Python 高手编程系列二百一十四:不只是 CPython

最重要的 Python 实现是用 C 语言编写的,叫作 CPython。大多数人在讨论 Python 时
指的都是 CPython。随着语言的进化,C 语言实现也相应发生变化。除了 C 之外,Python还有其他几种实现方式,这些实现方式都在努力地跟上主流。大多数实现方式的时间表都
要落后于 CPython,但它们提供了一个好机会,可以在具体环境中使用并推广 Python 语言。
为什么要关注 Python 实现
Python 实现有许多种。在Python 官网上关于这一话题的维基百科页面中,主要介绍了 20
多种语言变体、方言或除 C 语言之外的 Python 解释器实现。其中一些只是实现了语言核心
语法、功能和内置扩展的一个子集,但至少有几个与 CPython 几乎完全兼容。最重要的是,
虽然其中一些只是玩具项目或实验,但大部分都是为了解决某些实际问题而创建的,这些
问题要么是用 CPython 无法解决,要么需要开发人员花费巨大的精力。这些问题的实例包
括如下几个。
• 在嵌入式系统中运行 Python 代码。
• 与运行框架(如 Java 或.NET)或其他语言做代码集成。
• 在 Web 浏览器中运行 Python 代码。
本节将简要介绍目前 Python 开发人员可用的最流行和最新的 Python 实现。
Stackless Python
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,开发似乎也停止了。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值