0
点赞
收藏
分享

微信扫一扫

Jython

潇湘落木life 03-18 23:15 阅读 2

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 垃圾回收,而不是引用计数。

• 没有全局解释器锁(GlobalInterpreterLock,GIL),在多线程应用中可以充分利用

多个内核。

这一语言实现的主要缺点是缺少对 C/Python 扩展 API 的支持,因此用 C 语言编写的

Python扩展在Jython中无法运行。这种情况未来可能会发生改变,因为Jython 3.x计划支 持 C/Python 扩展 API。

某些 Python Web 框架(例如 Pylons)被认为是促进 Jython 的开发,使其可用于 Java 世界。 1.6.4 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,开发似乎也停止了。

1.6.5 PyPy

PyPy 可能是最令人兴奋的 Python 实现,因为其目标就是将 Python 重写为 Python。在 PyPy 中,Python 解释器本身是用 Python 编写的。在 Python 的 CPython 实现中,有一个 C

1.6 不只是 CPython 11

 

12 第1章 Python现状

代码层来实现具体细节。但在 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 中,因为这是最需要的功能。

1.7 Python 开发的现代方法

作为专家,最重要的是要对所选用的编程语言有深刻的理解。对于任何技术来说都是 如此。但如果不知道在特定语言社区中的常用工具和实践的话,想开发一款好软件是相当 困难的。Python 所有的单项功能都可以在其他某种语言中找到。所以,直接比较语法、表 现力(expressiveness)或性能的话,总会在一个或多个方面存在更好的解决方案。但 Python 真正出众的领域在于围绕语言打造的整个生态系统。多年来,Python 社区完善了标准实践 和标准库,有助于在更短的时间内创建更可靠的软件。

对于上文提到的生态系统,最明显也最重要的一部分就是大量免费的开源包,可以用 来解决许多问题。编写新软件总是一个费钱又费时的过程。能够复用现有代码而无需重新 造轮子(reinvent the wheel),可以大大降低开发的时间和成本。这也是某些公司的项目在 经济上可行的唯一原因。

由于这个原因,Python 开发者花费大量精力来创建工具和标准,方便使用他人创建的开 源包。我们首先介绍虚拟隔离环境、改进的交互式 shell 和调试器,然后介绍一些程序,有助 于发现、搜索和分析 PyPI(Python Package Index,Python 包索引)上大量可用的 Python 包。

举报

相关推荐

0 条评论