📜  Python的各种实现之间的区别

📅  最后修改于: 2022-05-13 01:54:43.315000             🧑  作者: Mango

Python的各种实现之间的区别

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

背景
在继续之前,让我们了解字节码和机器码(本机代码)之间的区别。
机器代码(又名本机代码
机器代码是一组直接由 CPU 执行的指令。每条指令都执行一项非常独特的任务,例如对 CPU 内存中的数据进行加载或逻辑操作。在编译器、加载器和链接器的帮助下,几乎所有高级语言(如 C)都将源代码翻译成可执行的机器代码。每个处理器或处理器系列都有自己的机器代码指令集。
机器
字节码
字节码也是由虚拟机(不是直接由 CPU)执行的二进制表示。虚拟机(不同机器写的不同)将二进制指令转换成特定的机器指令。使用字节码概念的语言之一是Java。
字节

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

Python的实现
蟒蛇
Python编程语言的默认实现是 Cpython。顾名思义,Cpython 是用 C 语言编写的。 Cpython将Python源代码编译成中间字节码,由Cpython虚拟机执行。 CPython 与一个用 C 和Python混合编写的大型标准库一起分发。 CPython 提供与Python包和 C 扩展模块的最高级别的兼容性。所有版本的Python语言都是用 C 实现的,因为 CPython 是参考实现。
一些基于 CPython 运行时核心但在某些方面具有扩展行为或特性的实现是 Stackless Python、wpython、MicroPython。
Stackless Python – CPython,强调使用 tasklet 和通道的并发性(由 dspython 用于 Nintendo DS)

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

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

铁蟒
用 C# 编写的Python实现,针对 Microsoft 的 .NET 框架。与 Jython 类似,它使用 .Net 虚拟机,即公共语言运行时。 IronPython 可以使用 .NET Framework 和Python库,而其他 .NET 语言可以非常有效地使用Python代码。 IronPython 在使用线程或多核的Python程序中表现更好,因为它有 JIT,也因为它没有全局解释器锁。

派皮
“如果你想让你的代码运行得更快,你应该只使用 PyPy。” — Guido van Rossum( Python的创造者)
Python是动态编程语言。据说Python很慢,因为默认的 CPython 实现以字节码编译Python源代码,与机器代码(本机代码)相比,它的速度很慢。这里 PyPy 进来了。
PyPy 是用Python编写的Python编程语言的实现。解释器是用 RPython( Python的一个子集)编写的。

弗洛

PyPy 使用(即时编译)。简单来说,JIT 使用编译方法使解释器系统更加高效和快速。所以基本上 JIT 可以将源代码编译成本地机器代码,这使得它非常快。
PyPy 还默认支持无堆栈模式,为大规模并发提供微线程。据说Python比 Cpython 快大约 7.5 倍。

Python的其他一些实现是CLPythonPystonPsycoCythonIPython

参考:

  • https://维基。 Python.org/moin/PythonImplementations
  • http://pypy.org/
  • https://维基。 Python.org/moin/IronPython
  • http://www.jython.org/