Stackless Python 自称 Python 增强版。之所以名为 Stackless(无栈),是因为它没有依赖
C 语言的调用栈。它实际上是修改过的 CPython 代码,还添加了一些新的功能,在创建 Stackless
Python 时 Python 核心实现中还没有这些功能。其中最重要的功能就是由解释器管理的微线
程,用来替代依赖系统内核上下文切换和任务调度的普通线程,既轻量化又节约资源。
Stackless Python 最新可用的版本是 2.7.9 和 3.3.5,分别实现的是 Python 2.7 和 3.3。在
Stackless Python 中,所有的额外功能都是内置 stackless 模块内的框架。
Stackless Python 并不是最有名的 Python 实现,但很值得一提,因为它引入的思想对编
程语言社区有很大的影响。将 Stackless Python 中的内核切换功能提取出来并作为一个独立
包发布,名为 greenlet,现在是许多有用的库和框架的基础。此外,它的大部分功能都
在 PyPy 中重新实现,PyPy 是另一个 Python 实现,我们将稍后介绍。
Jython
Jython 是 Python 语言的 Java 实现。它将代码编译为 Java 字节代码,开发人员在 Python
模块中可以无缝使用 Java 类。Jython 允许人们在复杂应用系统(例如 J2EE)中使用 Python
作为顶层脚本语言,它还将 Java 应用引入到 Python 世界中。Jython 的一个很好的例子就是,
在 Python 程序中可以使用 Apache Jackrabbit(这是一个基于 JCR 的文档仓库 API。
Jython 最新可用的版本是 Jython 2.7,对应的是 Python 2.7 版。它宣称几乎实现了 Python所有的核心标准库,并使用相同的回归测试套件。Jython 3.x 版正在开发中。
Jython 与 CPython 实现的主要区别如下所示。
• 真正的 Java 垃圾回收,而不是引用计数。
• 没有全局解释器锁(Global Interpreter Lock,GIL),在多线程应用中可以充分利用
多个内核。
这一语言实现的主要缺点是缺少对 C/Python 扩展 API 的支持,因此用 C 语言编写的
Python 扩展在 Jython 中无法运行。这种情况未来可能会发生改变,因为 Jython 3.x 计划支
持 C/Python 扩展 API。
某些 Python Web 框架(例如 Pylons)被认为是促进 Jython 的开发,使其可用于 Java 世界。
IronPython
IronPython 将 Python 引入.NET 框架中。这个项目受到微软的支持,IronPython 的主要
开发人员都在微软工作。它是推广语言的一种重要实现。除了 Java,.NET 社区是最大的开
发者社区之一。还值得注意的是,微软提供了一套免费开发工具,可以将 Visual Studio 转
换为成熟的 Python IDE。这是作为 Visual Studio 的插件发布的,名为 PTVS(Python Tools for
Visual Studio,用于 Visual Studio 的 Python 工具),在 GitHub 可以找到其开源代码。
最新的稳定版本是 2.7.5,与 Python 2.7 兼容。与 Jython 类似,Python 3.x 的实现也在
开发中,但还没有可用的稳定版本。虽然.NET 主要在微软 Windows 系统上运行,但是
IronPython 也可以在 Mac OS X 和 Linux 系统上运行。这一点要感谢 Mono,一个跨平台的
开源.NET 实现。
与 CPython 相比,IronPython 的主要区别或优点如下。
• 与 Jython 类似,没有全局解释器锁(Global Interpreter Lock,GIL),在多线程应用
中可以充分利用多个内核。
• 用 C#和其他.NET 语言编写的代码可以轻松集成到 IronPython 中,反之亦然。
• 通过 Silverlight,在所有主流 Web 浏览器中都可以运行。
说到弱点,IronPython 也与 Jython 非常类似,因为它也不支持 C/Python 扩展 API。对
于想要使用主要基于 C 扩展的 Python 包(例如 NumPy)的开发人员来说,这一点是很重
要的。有一个叫作 ironclad 的项目,其目的是在 IronPython 中无缝使用这些扩展,虽然它
最新支持的版本是 2.6,开发似乎也停止了。
PyPy
PyPy 可能是最令人兴奋的 Python 实现,因为其目标就是将 Python 重写为 Python。在
PyPy 中,Python 解释器本身是用 Python 编写的。在 Python 的 CPython 实现中,有一个 C
代码层来实现具体细节。但在 PyPy 实现中,这个 C 代码层用 Python 完全重写。
这样你可以在代码运行期间改变解释器的行为,并实现 CPython 难以实现的代码
模式。
目前 PyPy 的目的是与 Python 2.7 完全兼容,而 PyPy3 则与 Python 3.2.5 版兼容。
以前对 PyPy 感兴趣主要是理论上的原因,只有喜欢深入钻研语言细节的人才会对它感
兴趣。它通常不用于生产环境,但这些年来这种状况已经发生改变。现在许多基准测试给
出惊人的结果,PyPy 通常比 CPython 实现要快得多。这个项目有自己的基准测试网站,记
录了用数十种不同的基准测试对每一版本性能的测量结果(参见 http://speed.pypy.org/)。网
站清晰地显示,启用 JIT 的 PyPy 至少比 CPython 要快好几倍。由于 PyPy 的这一特性以及
其他特性,使得越来越多的开发人员决定在生产环境中切换到 PyPy。
PyPy 与 CPython 实现的主要区别在于以下几个方面。
• 使用垃圾回收,而不是引用计数。
• 集成跟踪 JIT 编译器,可以显著提高性能。
• 借鉴了 Stackless Python 在应用层的无栈特性。
与几乎所有其他的 Python 实现类似,PyPy 也缺乏对 C/Python 扩展 API 的完全官方支
持。但它至少通过 CPyExt 子系统为 C 扩展提供了某种程度的支持,虽然文档不完整,功
能也尚未完善。此外,社区正在努力将 NumPy 迁移到 PyPy 中,因为这是最需要的功能。