1.8 其他实现

标准版本的Python是用C来编译的,又被称为Cpython。除此之外,还有一些其他的Python实现。我们将在下面讲述些实现,除了本书中提到的这些实现以外,下面的网址还有更多的实现版本。

http://python.org/dev/implementations.html

Java

我们在上一节中曾经提到,还有一个可以用的Python解释器是完全由Java写成的,名为Jython。尽管两种解释器之间存在一些细微的差别,但是它们非常接近,而且启动环境也完全相同。那Jython又有哪些优势呢? Jython…

  • 只要有Java虚拟机,就能运行Jython。

  • 拥有访问Java包与类库的能力。

  • 为Java开发环境提供了脚本引擎。

  • 能够很容易的测试Java类库。

  • 提供访问Java原生异常处理的能力。

  • 继承了JavaBeans特性和内省能力。

  • 鼓励Python到Java的开发(反之亦然)。

  • GUI开发人员可以访问Java的AWT/Swing库。

  • 利用了Java原生垃圾收集器(CPython未实现此功能)。

对Jython进行详细论述,超出了本文的范围,不过网上有非常多的Jython信息。Jython目前仍然在不断开发之中,不时会增加新的特性。你可以通过访问Jython的网站得到更多有用的信息。

http://jython.org

.NET/Mono

现在已经有一个名为IronPython的Python实现,它是用C#语言完成的,它适用的环境是.NET和 Mono。你可以在一个.NET应用程序中整合IronPython解释器来访问.NET对象。ronPython的扩展可以用C#或VB.NET语言编写。除此之外,还有一种名为Boo的.NET/Mono语言。你可以在下面的网址获得更多关于IronPython和Boo语言的信息。

http://codeplex.com/Wiki/View.aspx?ProjectName=IronPython

http://boo.codehaus.org/

Stackless

CPython的一个局限就是每个Python函数调用都会产生一个C函数调用(从计算机科学的角度来说,我们在讨论栈帧)。这意味着同时产生的函数调用是有限制的,因此Python难以实现用户级的线程库和复杂递归应用。一旦超越这个限制,程序就会崩溃。你可以通过使用一个“stackless“的 Python实现来突破这个限制,一个C栈帧可以拥有任意数量的Python栈帧,这样你就能够拥有几乎无穷的函数调用,并能支持巨大数量的线程,这个Python实现的名字就叫……Stackless(嘿嘿,很惊讶吗?)

Stackless唯一的问题就是它要对现有的CPython解释器做重大修改,所以它几乎是一个独立的分支。另一个名为Greenlets的项目也支持微线程,它是一个标准的C扩展,因此不需要对标准Python解释器做任何修改。通过以下网址你能了解更多信息。

http://stackless.com

http://codespeak.net/py/current/doc/greenlet.html