天天看點

《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>