Python 的幾種實(shí)現(xiàn)(派生)

Python 的幾種實(shí)現(xiàn)(派生):

重新實(shí)現(xiàn)了哪些編程語言,實(shí)現(xiàn)的頻率怎樣,出于什么原因,以及由誰實(shí)現(xiàn)?要形容這組語言非常困難。某些與 Python 幾乎處同一地位的流行語言 -- 例如 perl、REBOL 和 PHP -- 只有一種實(shí)現(xiàn)(編譯成許多平臺(tái))。TCL 與 Perl/PHP 最為相似,但 確實(shí)有一種稱為 Jacl 的 Java 平臺(tái)版本。從另一個(gè)極端來看,例如 C、Awk、Cobol、REXX 和 Java 這樣的語言,每個(gè)都曾經(jīng)被無數(shù)次地實(shí)現(xiàn)。但那些再實(shí)現(xiàn)是為了許可和營銷等考慮,而不是出于實(shí)現(xiàn)的概念和抽象問題。似乎有特殊學(xué)術(shù)意味的那些語言重新實(shí)現(xiàn)得很多(特別是函數(shù)性、邏輯性或超純 OOP 語言,例如Smalltalk 和 Eiffel)。Lisp 沒有幾百個(gè)也有幾十個(gè)實(shí)現(xiàn)和派生。

參見: http://www.ibm.com/developerworks/cn/linux/sdk/python/python-7/

1.CPython:

這是Python的官方版本,使用C語言實(shí)現(xiàn),使用最為廣泛,新的語言特性一般也最先出現(xiàn)在這里。

CPython實(shí)現(xiàn)會(huì)將源文件(py文件)轉(zhuǎn)換成字節(jié)碼文件(pyc文件),然后運(yùn)行在Python虛擬機(jī)上。

2.Jython

這是Python的Java實(shí)現(xiàn),相比于CPython,它與Java語言之間的互操作性要遠(yuǎn)遠(yuǎn)高于CPython和C語言之間的互操作性。

在Python中可以直接使用Java代碼庫,這使得使用Python可以方便地為Java程序?qū)憸y(cè)試代碼,更進(jìn)一步,可以在Python中使用Swing等圖形庫編寫GUI程序。

Jython會(huì)將Python代碼動(dòng)態(tài)編譯成Java字節(jié)碼,然后在JVM上運(yùn)行轉(zhuǎn)換后的程序,這意味著此時(shí)Python程序與Java程序沒有區(qū)別,只是源代碼不一樣。

在Python 中寫一個(gè)類,像使用Java 類一樣使用這個(gè)類是很容易的事情。

你甚至可以把Jython 腳本靜態(tài)地編譯為Java 字節(jié)碼。

示例代碼:

from java.lang import System
System.out.write('Hello World!\n')

Warsaw :JPython 是由 Jim Hugunin 發(fā)明的,他現(xiàn)在為 Xerox PARC 的 Aspect Oriented Programming 項(xiàng)目工作。我了解 Jim,他可能主要是對(duì)挑戰(zhàn)感興趣。Python 領(lǐng)域中有許多人都認(rèn)為這是不可實(shí)現(xiàn)的。Guido 自己就是一個(gè)懷疑論者。Jim 證明他們都錯(cuò)了!

  1. IronPython:

IronPython 是一種在 NET 和 Mono 上實(shí)現(xiàn)的 Python 語言,由 Jim Hugunin(同時(shí)也是 Jython 創(chuàng)造者)所創(chuàng)造。

IronPython is an implementation of the Python programming language for Microsoft .NET and Mono.

http://ironpython.codeplex.com/

4.PyPy:

Python的Python實(shí)現(xiàn)版本,原理是這樣的,PyPy運(yùn)行在CPython(或者其它實(shí)現(xiàn))之上,用戶程序運(yùn)行在PyPy之上。它的一個(gè)目標(biāo)是成為Python語言自身的試驗(yàn)場(chǎng),因?yàn)榭梢院苋菀椎匦薷腜yPy解釋器的實(shí)現(xiàn)(因?yàn)樗鞘褂肞ython寫的)。

5.Vyper

Vyper 是以函數(shù)性語言 Ocaml (3.00) 編寫的 Python 語言的實(shí)現(xiàn)。與其它 Python 實(shí)現(xiàn)比較,Vyper 提供了一些(可選的)語言擴(kuò)展:更強(qiáng)大的范圍確定規(guī)則和一些新的函數(shù)性特性。Vyper 現(xiàn)在不再進(jìn)行開發(fā),但它以后可能得到增強(qiáng)(請(qǐng)參閱 參考資料獲得 Vyper,以及它的源代碼。)。我問 Vyper 的創(chuàng)始人 John Max Skaller 有關(guān)建造 Vyper 的動(dòng)機(jī)。

6.Stackless:

CPython的一個(gè)局限就是每個(gè)Python函數(shù)調(diào)用都會(huì)產(chǎn)生一個(gè)C函數(shù)調(diào)用。 這意味著同時(shí)產(chǎn)生的函數(shù)調(diào)用是有限制的,因此Python難以實(shí)現(xiàn)用戶級(jí)的線程庫和復(fù)雜遞歸應(yīng)用。一旦超越這個(gè)限制,程序就會(huì)崩潰。Stackless的Python實(shí)現(xiàn)突破了這個(gè)限制,一個(gè)C棧幀可以擁有任意數(shù)量的Python棧幀。這樣你就能夠擁有幾乎無窮的函數(shù)調(diào)用,并能支持巨大數(shù)量的線程。Stackless唯一的問題就是它要對(duì)現(xiàn)有的CPython解釋器做重大修改。所以它幾乎是一個(gè)獨(dú)立的分支。另一個(gè)名為Greenlets的項(xiàng)目也支持微線程。它是一個(gè)標(biāo)準(zhǔn)的C擴(kuò)展,因此不需要對(duì)標(biāo)準(zhǔn)Python解釋器做任何修改。

擴(kuò)張閱讀:
Python的幾種實(shí)現(xiàn)
http://www.cnblogs.com/frydsh/archive/2012/07/12/2587261.html
簡(jiǎn)介:
里邊有一處錯(cuò)誤,給作者做了反饋,還沒有核實(shí)...

可愛的 Python:Python實(shí)現(xiàn)內(nèi)幕
http://www.ibm.com/developerworks/cn/linux/sdk/python/python-7/

可愛的 Python:JPython 和 Python for .NET內(nèi)幕
http://www.ibm.com/developerworks/cn/linux/sdk/python/python-9/

Python解釋器
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001407375700558864523211a5049c4983176de304549c8000

PyPy 和 CPython 的性能比較測(cè)試
http://www.pythontab.com/html/2013/pythonhexinbiancheng_0221/243.html
簡(jiǎn)介:
PyPy相比CPython,在我這個(gè)簡(jiǎn)單的數(shù)據(jù)庫操作中,提高了2-3倍的性能。(我這里沒有算上SQL解析器,大約8倍)
多虧了PyPy,我的工作更加愉悅了——我沒有改寫算法就使Python有了效率,而且PyPy沒有像CPython一樣把我的CPU弄掛了,以至于一段時(shí)間內(nèi)我沒法正常的使用我的筆記本了(看看CPU時(shí)間占的百分比吧)。
任務(wù)幾乎都是數(shù)據(jù)庫操作,而CPython有一些加速的亂七八糟的C語言模塊。PyPy不使用這些,但結(jié)果卻更快!
我的全部工作需要大量的周期,所以我真高興能用PyPy。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容