多平台(Wp8/win8/Windows/iOS/Android)的开发语言

失足处男的倒霉孩子 发布于 2013/12/25 16:18
阅读 1K+
收藏 0

1.  Wp8/win8采用的是Xaml&c#编程语言

XAML是一种相对简单、通用的声明式编程语言,它适合于构建和初始化.NET对象。XAML仅仅是一种使用.NET API的方式,把它与HTML、可伸缩向量图形(SVG)或其他特定领域的格式或语言作比较是完全错误的。XAML由一些规则(告诉解析器和编译器如何处理XML)和一些关键字组成,但它自己没有任何有意义的元素。因此,如果在没有WPF这样的框架的基础上讨论XAML,就如同在没有.NET Framework的基础上讨论C#一样。

C#语言在.net环境中通常会先编译成中间语言(IL),交给代码托管系统。托管代码是由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。

托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware compiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。

在托管执行环境中使用托管代码及其编译,可以避免许多典型的导致安全黑洞和不稳定程序的编程错误。同样,许多不可靠的设计也自动的被增强了安全性,例如 类型安全检查,内存管理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。这就意味着更短的开发时间和更健壮的程序。

简单点说,托管代码是一Microsoft的中间语言,他主要的作用是在.NET FRAMEWORK的CLR执行代码前去编译源代码,也就是说托管代码充当着翻译的作用,源代码在运行时分为两个阶段:

1.源代码编译为托管代码;(所以源代码可以有很多种,如VB,C#,J#)

2.托管代码编译为Microsoft系统的.net平台专用文件(如类库、可执行文件等),即中间语言。

2. Windows运行时支持多语言及代码共享

借助 Windows 运行时组件,您可以混合使用编程语言,例如,在项目中使用现有的、采用另一种语言编写的类库。并且能够实现再在 Windows 应用商店和 Windows Phone 应用程序之间共享native代码。

Windows 运行时组件,有时被称为第三方 Windows 运行时 组件,是指您为向所有支持的语言公开功能而生成的组件。通过使用 Windows 运行时(在 Windows Phone 8 和 Windows 8 上受支持),您可以创建组件并以简单自然的方式从您所选的语言中调用它们。使用 Visual Studio 中的 Windows 运行时 组件模板生成组件。其功能被输出为 .winmd 文件,该文件包含将功能自动投影到 C#、C++、VB 和 JavaScript 中所需的元数据。

下表描述什么时候您应该考虑在 Windows 运行时 组件中共享应用的功能。

`利用 C++ 的功能: 如果您的应用进行计算量相当大的操作,您可能会选择使用 C++ 编写该代码以实现最佳性能。如果使用该功能的代码是采用 C# 或 VB 编写的,您可以将该功能打包为 Windows 运行时 组件并从您的托管代码调用该组件。

交叉语言边界: 通常,使用 Windows 运行时 组件是向所有支持的语言公开您的代码的绝佳方式。如果您的应用是使用一种语言编写的并且您不打算向其他语言公开任意功能,则这不是必需的。而是,您可以使用常规类库、可移植类库,或者根据应用的大小和复杂性,在相同的项目中编写整个应用来构成您的应用。

使用 Direct3D、Win32 或 COM API: Windows Phone 8 传送本机 API 以启动强大的游戏方案、本机网络和从本机代码对相机 API 的访问。要从托管代码使用这些 API,您可以在 Windows 运行时 组件中包装此功能。有关更多信息,请参见 Windows Phone 8 支持的 Win32 API 和 Windows Phone 游戏

使用第三方库: 在过去,如果您的应用是使用另一种语言编写的,很难使用以一种语言编写的第三方库。借助 Windows 运行时 组件,可以抓取库、将其打包在 Windows 运行时 组件中并向其他以任意支持的语言编写的应用公开功能。

上述列表是方案的一部分,在其中编写 Windows 运行时 组件是共享代码的有用方法。但是,Windows 运行时组件不是标准的 DLL 或程序集。在创建 Windows 运行时 组件时,您必须遵循一些特定的要求。这些要求包括仅使用允许的数据类型、处理集合、仅创建密封类以及更多。

3.  IOS开发采用的是object-c语言

Objective-C是非常“高效”的语言。它使用一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反,Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。

Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的“死亡时间”,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep),Apple在其Mac OS X 10.3中仍未引入这个功能。

另一个问题是Objective-c不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在Cocoa编程环境中,所有Mac OS X类别和函数均有“NS”作为前缀,例如NSObject或NSButton来清楚分辨它们属于Mac OS X核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发时定下。

虽然Objective-C是C的母集,但它也不视C的基本型别为第一级的对象。和C++不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。

4.  Android采用java语言

Java是一种通过解释方式来执行的语言,其语法法则和C++类似。同时,Java也是一种跨平台的程序设计语言,用Java语言编写的程序,可以运行在任何平台和设备上。Java非常适合于企业网络和Internet环境,并且已经成为Internet中最有影响力、最受欢迎的编程语言之一。

Java语言编写的程序既是编译型的,又是解释型的。程序代码经过编译之后转换为一种称为Java字节码的中间语言,Java虚拟机JVM将对字节码进行解释和运行。编译只进行一次,而解释在每次运行程序时都会进行。编译后的字节码采用一种针对JVM优化过的机器码形式保存,虚拟机JVM将字节码解释为机器码,然后在计算机上运行。

5. 选择一个编程语言

在进一步学习之前,你应该知道当您开发 Windows 应用商店的应用程序时你可以选择的编程语言。虽然这篇文章中的演练使用 C#,您可以使用几种编程语言开发 Windows 应用商店应用程序。与此相反的是,您仅能使用Java 开发 Android 应用程序。

开发 Windows 应用商店应用程序可以使用 C#、 c + +、 Microsoft Visual Basic 或 JavaScript。JavaScript 使用 HTML5 标记为 UI 布局,其余语言使用可扩展应用程序标记语言 (XAML) 为 UI 布局。您稍后在这篇文章中将学习标记语言。

虽然在这篇文章中我们重点是 C#,但你可能会想要探索其他语言提供独特的好处。例如,如果您的应用程序主要关注性能,尤其是大量的图形,那么 c + + 可能是正确的选择;Visual Basic 应用程序开发人员可能选择Microsoft.NET 版本的 Visual Basic ;具有 web 开发背景的那些人可能选择使用 HTML5 的 JavaScript 。更多的信息,请参阅下列操作之一:

使用 C# 或 Visual Basic创建第一个 Windows 存储应用程序

使用 c + +创建第一个 Windows 存储应用程序

使用 JavaScript创建 Windows 应用商店应用程序

使用 3D 图形的应用程序,不提供用于 Windows 应用商店的应用程序的 OpenGL 和 OpenGL ES 标准。但是,您可以使用 Microsoft DirectX — — 与 c + +。像 OpenGL ES 2.0,DirectX 11.1 支持可编程的管道,并使用 Microsoft 高级别着色语言 (HLSL) 可比对 OpenGL 着色语言 (GLSL)。若要了解有关 DirectX 的详细信息,请参阅以下:

第一次使用DirectX创建 Windows 应用商店应用程序

使用 DirectX 的 Windows 应用商店 app 样本

DirectX SDK 在哪里?

作为 Android 开发者,你习惯于 Java。我们认为 C# 编程语言与java很类似,所以这篇文章的信息和演练专注于C#语言。若要了解有关 C# 的详细信息,请参阅以下内容:

创建第一个 Windows 存储应用程序使用 C# 或 Visual Basic

使用 C# 的 Windows 应用商店 app 样本

Visual C#

以下是Java , C#和Objective-c编写的类。Java 版本是首先显示,其次是 C# 版本。您会看到结构是非常相似的,使您很容易开始使用 C#。在此示例中,您还会看到有case和文档语法中的差异。最后,您将看到 C# 类可以有显式属性而不是使用常规的 getter 和 setter 方法。

package com.example.MyApp;
// Java class definition.
/** 
 * The Counter class shows key aspects of a Java class.
 */
public class Counter {
    private int count; // Private variables are not visible outside.
    public Counter() 
    {
        count = 0; // Initialize the local variable.
    }
    public int getValue()  // Getter for the local variable.
    {
        return count;      
    }
    public void setValue(int value) // Setter for the local variable.
    {
        count = value;         
    }	
    public int increment(int delta)
    {
    	   // Add the delta to the local count, and then return.
    	   count += delta;
        return count;
    }        
    public int increment()
    {
        return increment(1);
    }    
}
// Java usage.
import com.example.myapp.Counter;
Counter myCounter = new Counter();
int count = myCounter.getValue();
myCounter.setValue(5);
count = myCounter.increment();
// C# class definition.
namespace MyApp
{
    public class Counter
    {
        private int count; // Private variable not visible outside of the class.
        public Counter()
        {
            count = 0; // Initialize the local variable.
        }
        public int Value // Getter for the local variable.
        {
            get
            {
                return count;
            }
            set
            {
                count = value;
            }
        }
        /// 
        /// Increments the counter by the delta.
        /// 
        /// delta
        /// Returns the resulting counter.
        public int Increment(int delta)
        {
            // Add the delta to the local count, and then return.
            count += delta;
            return count;
        }
        public int Increment()
        {
            return Increment(1);
        }
    }
// C# usage.
using MyApp;
Counter myCounter = new Counter();
int count = myCounter.Value;
myCounter.Value = 5;
count = myCounter.Increment();
// Objective-C header: SampleClass.h.
#import 
@interface SampleClass : NSObject {
    BOOL localVariable;
}
@property (nonatomic) BOOL localVariable;
-(int) addThis: (int) firstNumber andThis: (int) secondNumber;
@end
// Objective-C implementation.
#import "SampleClass.h"
@implementation SampleClass
@synthesize localVariable = _localVariable;
- (id)init {
    self = [super init];
    if (self) {
        localVariable = true;
    }
    return self;
}
-(int) addThis: (int) firstNumber andThis: (int) secondNumber {
    return firstNumber + secondNumber;
}
@end
加载中
返回顶部
顶部