跨越编程语言界限(一)

来源:互联网 发布:人工智能 龙头 编辑:程序博客网 时间:2024/05/17 08:52

代码是宝贵的,世界上最郁闷的事情,便是写好的代码,还要在另外的平台上重写一次,或是同时维护功能相同的两套代码。

一、跨平台、跨语言、跨编译器

1、跨平台——JAVA
跨平台概念指的是即不依赖于具体的操作系统,也不依赖具体硬件环境。一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。
相对而言,如果某种计算机语言不用修改代码即可做到高度跨平台,那么此语言就越抽象,硬件控制力就越低,只适合开发高度抽象的模型系统。
跨平台语言最大特点是不编译机器码,不使用系统API。

从广义的角度上讲,一般的计算机语言都可做到跨平台,开发商只需要提供各种平台下的运行时/中间件环境即可。
从狭义的角度上说,用某种计算机语言编写的程序只需要做小量的修改,编译之后即可在另外一种平台下运行,此时并不提供运行时/中间件环境。
例如,Java是一种提供运行时环境的跨平台解决方案,而C是一种标准且严格的跨平台语言。

2、跨语言——.NET
跨语言的平台是指是微软为了抗衡Java做出的.NET对策。它包括了很多种以前的语言,比如VB,C#,C++,意思就是以前的老语言在.NET平台上都可以用,而未来程序的发展方向是跨语言平台,就是同样一个系统,可以是java写的也可以是c#写的,同样也可以是java和C#共同在运行,这个也就是跨语言平台。

3、跨编译器——混合编程
跨编译器指的是同时集成多个语言能够在一个解决方案(可执行文件)中实现相关功能。
1)同一语言跨编译器——异构平台
        CUDA(Compute Unified Device Architecture)
2)不同语言跨编译器——同构平台
        多语言混合编程。

4、with or without?
从项目开发的角度,跨语言的实现方法有时会更加高效。
从终端用户的角度,跨平台能够带来更多的便利。

二、各种 Python 实现的简单介绍与比较

Python实际上是一门语言规范,只是定义了Python这门语言应该具备哪些语言要素,应当能完成什么样的任务。这种语言规范可以用不同的方式实现,可以用C实现,也可以用C++、Java、C#、JavaScript,甚至使用Python自己实现。

1、CPython
CPython是标准Python,也是其他Python编译器的参考实现。通常提到“Python”一词,都是指CPython。CPython由C编写,将Python源码编译成CPython字节码,由虚拟机解释执行。没有用到JIT等技术,垃圾回收方面采用的是引用计数。
Python(CPython)将Python源码编译成CPython字节码,再由虚拟机解释执行这些字节码。
如果需要广泛用到C编写的第三方扩展,或让大多数用户都能直接使用你的Python代码,那么还是使用CPython吧。

2、Jython
Jython在JVM上实现的Python,由Java编写。Jython将Python源码编译成JVM字节码,由JVM执行对应的字节码。因此能很好的与JVM集成,比如利用JVM的垃圾回收和JIT,直接导入并调用JVM上其他语言编写的库和函数。
对于想在JVM上使用Python简化工作流程,或者出于某些原因需要在Python语言中使用Java的相关代码,同时无需用到太多CPython扩展的用户来说,极力推荐Jython。

3、IronPython
IronPython在CLR上实现的Python,即面向.NET平台,由C#编写。IronPython将源码编译成TODO CLR,同样能很好的与.NET平台集成。因此可以利用.NET框架的JIT、垃圾回收等功能,能导入并调用.NET上其他语言编写的库和函数。IronPython默认使用Unicode字符串。
另外,Python Tools for Visual Studio可以将CPython和IronPython无缝集成进VS中。

4、PyPy
PyPy在RPython实现的Python,利用Tracing JIT技术实现的Python,而不是RPython工具链。PyPy可以选择多种垃圾回收方式,如标记清除、标记压缩、分代等。
相对CPython,PyPy的性能提升非常明显,但对第三方模块的支持真心是弱爆了。比如无法很好的支持使用CPython的C API编写的扩展,完全不支持使用SWIG、SIP等工具编写的扩展。就连NumPy,也要在编译器的层面上从头实现。即使实现了,也只能在Python层面中使用,无法供其他第三方模块在非Python环境中使用。

5、Pyston
Pyston在C++11上实现的Python,由Dropbox开发采用Method-at-a-time-JIT和Mark Sweep——Stop the World的GC技术。Pyston使用类似JavaScript V8那样的多层编译,其中也用到了LLVM来优化代码。Pyston正在发展中,还不成熟。但其前景是非常值得看好的。


原创粉丝点击