不同的Python实现方式的区别

转自:http://www.weidianyuedu.com/content/1411714076207.html

不同的Python实现方式之间是有区别的。Python从2017年开始受到关注和追捧,它与高科技人工智能有关,但python是什么?python能做什么?似乎是最热门的话题。这里我先解释一下:

python是什么:其实python是一种面向对象的解释性计算机编程语言,拥有丰富而强大的库。该语言因其简单性、可读性和可扩展性而广受欢迎。

python能做什么:python可以用于图形处理、数学处理、文本处理、数据库编程、网络编程、Web编程、多媒体应用、pymo引擎、黑客编程、用Python写简单爬虫、人工智能等等。

所以我们说Python的时候,一般指的是CPPython。但Python其实是一种语言规范,它只定义了Python应该具备什么语言元素,应该完成什么任务。这个语言规范可以用不同的方式实现,比如C,C++,Java,C#,JavaScript,甚至Python本身。本文是对不同Python实现的简单介绍和比较,以后还会继续扩展。

CPython.

CPython是标准Python,是其他Python编译器的参考实现。一般来说,“Python”这个词指的是CPython。CPython是用c写的,c把Python源代码编译成CPython字节码,由虚拟机解释执行。不使用JIT等技术,垃圾收集使用引用计数。

所以,当有人问Python解释执行还是编译执行,答案可以是这样的:Python(CPython)将Python源代码编译成CPPython字节码,然后虚拟机解释执行这些字节码。

如果你需要大量使用C写的第三方扩展,或者让大部分用户直接使用你的Python代码,那就改用CPPython。

Jython.

Python由Jython在JVM上实现,Java编写。Jython将Python源代码编译成JVM字节码,JVM执行相应的字节码。所以可以很好的和JVM集成,比如利用JVM的垃圾收集和JIT直接在JVM上导入和调用其他语言编写的库和函数。

对于希望使用Python简化JVM上的工作流程,或者由于某些原因需要使用Python语言的Java相关代码的用户,强烈推荐使用Jython,不要使用太多的CPPython扩展。

IronPython.

IronPython和Jython类似,不同的是IronPython在CLR中实现Python,面向。NET平台,用C#编写。IronPython将源代码编译成TODOCLR,也可以很好地与。.NET平台。也就是说,像Jython一样,它可以使用JIT、垃圾收集和。NET框架来导入和调用用其他语言编写的库和函数。.NET。IronPython默认使用Unicode字符串。

此外,PythonToolsforVisualStudio可以将CPython和IronPython无缝集成到vs中。如果只需要在Windows上开发大型Python项目。在条件允许的情况下,IronPython是一个不错的选择。

PyPy.

这里的PyPy指的是RPython和TracingJIT技术实现的Python,而不是RPython工具链。PyPy可以选择多种垃圾收集方式,比如标签移除、标签压缩、生成等等。

对于CPython来说,PyPy的性能明显提高了,但是对第三方模块的支持真的很弱。比如CPythonCAPI写的扩展不能很好的支持,SWIG,SIP等工具写的扩展根本不能支持。甚至NumPy都要在编译器级别从头实现。即使实现了,也只能在Python级别使用,不能在非Python环境下被其他第三方模块使用。

皮斯顿.

Pyston是Dropbox开发的,用C++11编写,采用了一次一法-JIT和MarkSweep-StoptheWorld的GC技术。Pyston使用像JavaScriptV8那样的多层编译,其中LLVM也是用来优化代码的。Pyston在发展,不成熟。但是它的前景很有希望。

总结一下。

在了解python是什么,python能做什么的基础上,相信大家已经了解了这些主要的python实现,以及它们之间的区别。他们之间也有一些区别和区别,比如Cython,Brython,RubyPython。

上一篇:mysqltest语法整理


下一篇:CodeGo.net>如何使用IronPython的Win32api