天天看点

《Python核心编程(第二版)》—— 1.8 其他实现

本节书摘来自异步社区《python核心编程(第二版)》一书中的第1章,第1.8节,作者[美]wesley j. chun,宋吉广 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

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

<a href="http://python.org/dev/implementations.html">http://python.org/dev/implementations.html</a>

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的网站得到更多有用的信息。

<a href="http://jython.org">http://jython.org</a>

.net/mono

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

<a href="http://codeplex.com/wiki/view.aspx?projectname=ironpython">http://codeplex.com/wiki/view.aspx?projectname=ironpython</a>

<a href="http://boo.codehaus.org/">http://boo.codehaus.org/</a>

stackless

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

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

<a href="http://stackless.com">http://stackless.com</a>

<a href="http://codespeak.net/py/current/doc/greenlet.html">http://codespeak.net/py/current/doc/greenlet.html</a>