📜  各种Python实现之间的区别

📅  最后修改于: 2020-05-10 13:36:10             🧑  作者: Mango

当我们谈到Python时,我们通常不仅指语言,还指实现。 Python实际上是一种语言的规范,可以通过许多不同的方式实现。

背景
在继续进行之前,让我们了解字节码和机器码(本机码)之间的区别。

机器代码( 又称本机代码 )
机器代码是一组直接由CPU执行的指令。 每条指令执行一个非常独特的任务,例如对CPU内存中的数据进行加载或逻辑操作。 在编译器,加载器和链接器的帮助下,几乎所有高级语言(例如C)都将源代码转换为可执行的机器代码。 每个处理器或处理器系列都有其自己的机器代码指令集。

字节码
字节码也是虚拟机(不是直接由CPU)执行的二进制表示形式。 虚拟机(针对不同的机器编写的写法不同)将二进制指令转换为特定的机器指令。 使用字节码概念的语言之一是Java。

与字节码相比,机器码要快得多,但是与机器码相比,字节码具有可移植性和安全性。

Python的CPython实现

Python编程语言的默认实现是CPython。 顾名思义,CPython是用C语言编写的。 CPython将Python源代码编译为中间字节码,该字节码由CPython虚拟机执行。 CPython附带了一个大型标准库,该库使用C和Python混合编写。 CPython提供了与Python包和C扩展模块的最高兼容性。 因为CPython是参考实现,所以所有版本的Python语言都用C实现。
一些基于CPython运行时核心但在某些方面具有扩展的行为或功能的实现是Stackless Python,wPython,MicroPython。
无堆栈Python –强调使用Tasklet和通道的并发性的CPython(dsPython用于Nintendo DS)

其他实现
Python语言还有其他一些实现。已知与该语言的给定版本兼容的唯一实现是IronPython , JythonPyPy 。

Jython
Jython是可以在Java平台上运行的Python编程语言的实现。 Jython程序使用Java类而不是Python模块.Jython编译为Java字节码,然后可以由Java虚拟机运行。 Jython支持使用Python程序中的Java类库函数。 与CPython相比,Jython速度慢,并且与CPython库缺乏兼容性。

IronPython
以C#编写的面向Microsoft .NET框架的Python实现。 与Jython相似,它使用.Net虚拟机,即Common Language Runtime 。 IronPython可以使用.NET Framework和Python库,而其他.NET语言可以非常有效地使用Python代码。 IronPython具有JIT的特性,而且因为它没有Global Interpreter Lock ,因此在使用线程或多核的Python程序中表现更好。

PyPy
“如果您希望代码运行得更快,您可能应该只使用PyPy。”-Guido van Rossum(Python的创建者)
Python是动态编程语言。 据说Python速度很慢,因为默认的CPython实现以字节码编译Python源代码,这比机器代码(本机代码)慢。 PyPy进来了。
PyPy是用Python编写的Python编程语言的实现。 解释器是用RPython(Python的子集)编写的。

PyPy使用即时编译 。 简而言之,JIT使用编译方法来提高解释器系统的效率和速度。 因此,基本上,JIT可以将源代码编译为本机代码,从而使其非常快。
PyPy还默认支持无堆栈模式,提供微线程以实现大规模并发。 据说Python比CPython快7.5倍。
Python的其他一些实现包括CLPython , Pyston , Psyco , Cython , IPython 。