新聞中心
盡管 JPython 是一個(gè)真正面向社區(qū)的成果,但 Barry Warsaw 和 Finn Bock 是當(dāng)前兩名最活躍的 JPython 開發(fā)者。不幸的是,JPython 最初的開發(fā)者 Jim Hugunin 不再?gòu)氖缕溟_發(fā)了。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)靖江免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
David Mertz:究竟什么是 JPython?
Barry Warsaw:我將用標(biāo)準(zhǔn)的營(yíng)銷說(shuō)法來(lái)回答這個(gè)問(wèn)題。
JPython 是 Python 編程語(yǔ)言的 100% 純 Java 實(shí)現(xiàn)。它可以讓用戶將 Python 源代碼編譯成 Java 字節(jié)碼,并在任何 Java 虛擬機(jī)上運(yùn)行產(chǎn)生的字節(jié)碼。它是與 Java 的最無(wú)縫最平滑的集成。您可以從 Python 訪問(wèn)所有 Java 庫(kù)、構(gòu)建 Applet、與 Java Bean 集成以及從 Python 中的 Java 類創(chuàng)建子類,反之亦然。JPython 類似于 Python 而不象 Java,它可以交互使用;只需在提示上輸入一些 JPython 代碼就能立刻看到結(jié)果。
用更簡(jiǎn)單的話來(lái)說(shuō),JPython 可以為任何一個(gè)您需要的 Java 代碼編寫腳本,這樣轉(zhuǎn)換出的代碼行數(shù)比原來(lái)要少上 2 到 10 倍。因?yàn)?Python 是動(dòng)態(tài)輸入的語(yǔ)言,所以可以更快速地開發(fā)錯(cuò)誤更少的應(yīng)用,并得到靈活得多的程序。
Mertz:有關(guān) JPython 的開發(fā)是如何開始的呢?
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ò)了!
那么既然遇到挑戰(zhàn),為什么還要繼續(xù)開發(fā) JPython 呢?因?yàn)樗谴蠖鄶?shù) Java 程序員不太了解的最有價(jià)值的 Java 工具。到目前為止!
Mertz:您認(rèn)為是什么刺激了 JPython 的需求?
Warsaw :首先必須理解 JPython 不是 Java 的競(jìng)爭(zhēng)對(duì)手;而是對(duì)它的***補(bǔ)充。Java 是靜態(tài)輸入的編譯語(yǔ)言。這確保了庫(kù)的輸入很安全并且執(zhí)行速度更快。有一個(gè)現(xiàn)象很有趣,就是盡管它是字節(jié)碼翻譯的,但大多數(shù)人還是將 Java 看作一個(gè)傳統(tǒng)的“編寫-編譯-運(yùn)行-編輯”的程序。當(dāng)然,Java 利用了軟件世界的絕大部分,因此對(duì)于 Java 程序員有許多資源可用。
但相同的靜態(tài)輸入和傳統(tǒng)的編程周期在人力資源方面增加了 Java 應(yīng)用開發(fā)的成本。Python 在這方面絕對(duì)勝出。因?yàn)?Python 是一種小而簡(jiǎn)單的語(yǔ)言,所以非常易于掌握。大多數(shù)有經(jīng)驗(yàn)的程序員可以在大約一天的時(shí)間內(nèi)就學(xué)習(xí)到足夠的 Python 知識(shí)來(lái)提高生產(chǎn)力。Python 的設(shè)計(jì)思想就是代碼的讀比寫要多得多。因此 Python 源代碼易于在大型團(tuán)體項(xiàng)目中共享。
但更重要的是,Python 是非常高級(jí)的動(dòng)態(tài)輸入型語(yǔ)言。這表現(xiàn)在大大節(jié)約了執(zhí)行任務(wù)所需的代碼數(shù)量。因?yàn)槭褂?Python 所寫的代碼行數(shù)較少,可以寫得更快,錯(cuò)誤更少。對(duì)于快速應(yīng)用開發(fā)這簡(jiǎn)直太棒了。
Python 還提供一個(gè)交互式解釋器,這意味著您可以坐在解釋器提示,導(dǎo)入 Java 代碼,創(chuàng)建 Java 類實(shí)例,進(jìn)行方法調(diào)用等等,所有這些都是交互式的。這在訓(xùn)練程序員如何使用公司 Java 庫(kù)或者試驗(yàn)新 Java API 時(shí)是一種***工具。
但以我拙見,所有程序員都應(yīng)該備有 CPython 和 JPython。
Mertz :照您看,JPython 比 CPython 好在哪里呢?
Bock :JPython 提供了對(duì)其底層實(shí)現(xiàn)語(yǔ)言的完整訪問(wèn)。在大多數(shù)(可能所有)基于 C 的腳本語(yǔ)言中,C 函數(shù)必須封裝在用來(lái)將 C 函數(shù)暴露給腳本語(yǔ)言的一層簡(jiǎn)單的代碼中,這里存在一些好的工具,例如 SWIG,來(lái)將這個(gè)封裝器代碼的創(chuàng)建自動(dòng)化。但 JPython 根本就不需要封裝器。所有曾經(jīng)編寫過(guò)的 Java 代碼都可直接從 JPython 使用,集成是雙向的。以 JPython 定義的類和實(shí)例可以傳遞給 Java,就如同它們是一般的 Java 類和實(shí)例那樣(它們也確實(shí)如此)。
嵌入/擴(kuò)展 API 使從應(yīng)用程序或模塊中對(duì) JPython 對(duì)象的訪問(wèn)相當(dāng)精確。這一優(yōu)點(diǎn)部分來(lái)自于 JPython 和 Java 都是面向?qū)ο蟮恼Z(yǔ)言這一事實(shí)。Jim 利用了該事實(shí)的這一重要優(yōu)點(diǎn)。
Warsaw :CPython 欠缺的是對(duì)世界上大量 Java 代碼的訪問(wèn)。如果需要使用 Java 庫(kù),JPython 就是答案。反過(guò)來(lái)說(shuō),當(dāng)然,JPython 也沒有對(duì)世界上所有現(xiàn)有 C 庫(kù)的簡(jiǎn)易訪問(wèn)。Finn 已完成了通過(guò) JNI 集成如 Tkinter 和 POSIX 模塊這類事物的工作,但那些在 JPython 中總是非標(biāo)準(zhǔn)的,因?yàn)槲覀兿MA?100% 純 Java 認(rèn)證。
Mertz:依您所見,JPython 的缺點(diǎn)有哪些呢?
Finn Bock :JPython 只提供對(duì) Java 代碼的訪問(wèn),而不提供對(duì)所有現(xiàn)有 C 模塊的訪問(wèn)。因此每個(gè)以 C 實(shí)現(xiàn)的 Python 模塊都必須用 Java 重新實(shí)現(xiàn)。而 CPython 則有許多模塊。
另外,對(duì)于嵌入/擴(kuò)展 API,除了源代碼之外沒有任何文檔。
Mertz :您是否在尋找 JPython 優(yōu)于純 Java 的優(yōu)點(diǎn)?
Warsaw :我想我們已經(jīng)談了許多這方面的內(nèi)容。但現(xiàn)在讓我們談?wù)?JPython 的性能問(wèn)題。因?yàn)?JPython 實(shí)現(xiàn)了 Python 的動(dòng)態(tài)語(yǔ)義,所有 JPython 帶有相當(dāng)廣泛的運(yùn)行時(shí)。這對(duì)于某些應(yīng)用程序有性能影響。例如即時(shí)編譯器和 Hotspot 技術(shù)這樣的標(biāo)準(zhǔn) Java 優(yōu)化可以大大減輕這樣影響(八個(gè)月前的基準(zhǔn)顯示,使用支持 JIT 的 JVM,JPython 1.1 可以達(dá)到,有時(shí)還會(huì)超過(guò) CPython 1.5.2 速度)。我們將更新這些基準(zhǔn)結(jié)果,并在推出 JPython 之后集中在性能問(wèn)題上。
但與 CPython 一樣,您總能用 Java 重寫應(yīng)用程序中的性能關(guān)鍵部分。
Mertz:您認(rèn)為 JPython 的使用有多廣泛?
Warsaw :我想它的使用正在變得越來(lái)越廣泛。人們逐漸發(fā)現(xiàn)它對(duì)于技術(shù)成功非常關(guān)鍵。JPython 對(duì)于各種任務(wù)都有價(jià)值,從為最終用戶提供平易近人的腳本創(chuàng)建環(huán)境,到簡(jiǎn)化為 Java 庫(kù)和應(yīng)用程序創(chuàng)建測(cè)試框架。此時(shí) JPython ***的遺憾就是它需要更多宣傳。我希望這篇文章能在這一方面提供幫助。
Mertz :您是否認(rèn)為 JPython 是試圖跟上 CPython 的嘗試?
Bock :是的?,F(xiàn)在,JPython 正嘗試趕上它。幾乎所有新的特性都首先添加到 CPython。(當(dāng)然,JPython 確實(shí)在 CPython 之前具有字符串方法)。JPython 有不足之處是因?yàn)?CPython 比 JPython 有多 15 倍的核心開發(fā)者。但即使這樣,JPython 版本中存在 CPython 2.0 中幾乎所有新的特性。
但我認(rèn)為實(shí)際上它們幾乎不相上下,即使在現(xiàn)實(shí)世界中,誰(shuí)也不比誰(shuí)好多少。
Warsaw :我堅(jiān)決相信在語(yǔ)言級(jí)別上,JPython 和 CPython 應(yīng)該完全兼容。在不可能的情況下,Guido 確定差異是否與實(shí)現(xiàn)相關(guān),或者哪一種實(shí)現(xiàn)是“多錯(cuò)”的。我希望看到 CPython 和 JPython 最終成為同等的,JPython 在某些方面推動(dòng) CPython 開發(fā)和 CPython 推動(dòng) JPython 開發(fā)一樣。
當(dāng)前它的一個(gè)示例就是 Unicode 支持。JPython 已經(jīng)是全部 Unicode 化了。另一個(gè)示例是類型/類劃分。在 CPython 中,您可以有一些內(nèi)置類型,例如字符串、字典、列表和數(shù)。還有類和實(shí)例。內(nèi)置類型不能繼承。更讓人困惑的一點(diǎn)是,實(shí)例既有類型又有類。首先彌補(bǔ) JPython 中的這一缺憾更容易些,因?yàn)槠涿嫦驅(qū)ο髮?shí)現(xiàn)。
Mertz :對(duì)于 JPython 和 CPython 之間的不兼容性您是怎么認(rèn)為的?
Warsaw :在事物工作的方法上有許多細(xì)小的差異。它們都在 JPython 的文檔中進(jìn)行了大致說(shuō)明。某些作為提供語(yǔ)言定義的可接受差異分類,某些指出某個(gè)或其它實(shí)現(xiàn)應(yīng)該被修正的地方。大多數(shù)都非常次要。
Bock :某些模塊還沒有或者無(wú)法以 JPython 實(shí)現(xiàn)。某些模塊又只能作為 JNI 模塊實(shí)現(xiàn),類似的模塊在部署環(huán)境中是沒有用的。
Bock :實(shí)際上,當(dāng)我移植自己的腳本和程序(與 IDLE、PySol 和 PMW 工具箱一起)時(shí),我遇到的問(wèn)題不是無(wú)用信息收集的隨機(jī)回收或缺少 _del_method。它們是其他人以前沒有遇到過(guò)的小問(wèn)題,例如 CPython 行為。
Warsaw :下一個(gè)版本的 JPython 將與 Python 2.0 語(yǔ)言定義兼容,因此***的變化將在庫(kù)中。CPython 發(fā)行版中任何以純 Python 編寫的標(biāo)準(zhǔn)庫(kù)模塊都應(yīng)該是可移植的。C 擴(kuò)展模塊不行,除非它們特別通過(guò) JNI 網(wǎng)橋集成或以 Java 重新實(shí)現(xiàn)。任何大量使用 Java API 的 JPython 應(yīng)用程序在移植回 CPython 時(shí)都將經(jīng)過(guò)一段艱難時(shí)期。
另一方面,兩種系統(tǒng)的庫(kù)中有許多公共功能。在有足夠深謀遠(yuǎn)慮的前提下,可以將兼容性層構(gòu)建到應(yīng)用程序中。
Mertz :對(duì)于 JPython 今后的方向有什么想法嗎?
Warsaw :我們已經(jīng)基于公用 JPython 1.1 發(fā)行版創(chuàng)建了 JPython 后繼者 "Jython"。這樣做是為了確保項(xiàng)目的長(zhǎng)久性和穩(wěn)定性。依據(jù) CNRI 的 JPython 1.1.x 許可證實(shí)現(xiàn)了所有這些。我們將整個(gè)開發(fā)過(guò)程移到了 SourceForge,并使用對(duì) CPython 非常合適的相同開放過(guò)程管理它。Finn 和我兩人無(wú)疑要參與 Jython 未來(lái)的開發(fā);Jython 將使用 OSI 核準(zhǔn)的 CPython 2.0 許可證發(fā)行。它與您將獲得的“正式”派生很接近,所以當(dāng)前的 JPython 社區(qū)應(yīng)該確信 Jython 與它永遠(yuǎn)不會(huì)相差太多。我們希望它們最終都能遷移到 Jython。
現(xiàn)在代碼仍處在試驗(yàn)階段,但 Finn 和我將為 Jython 2.0 發(fā)行版(已經(jīng)包含了 Finn 的勘誤表)致力于建立幾個(gè)技術(shù)性里程碑。CPython 2.0 具有增強(qiáng)的指派和擴(kuò)展打印等特性(很快還將帶有列表理解)。我們已集成了免費(fèi)的 Apache Jakarta OROMatcher 代碼,消除了雙許可證的需要,并修正了許多錯(cuò)誤。我不知道 Jython 2.0 的***個(gè) alpha 發(fā)行版何時(shí)出現(xiàn),但當(dāng)前所有代碼都在 SourceForge CVS 樹中獲得。
【編輯推薦】
- Jython 2.5版本發(fā)布?xì)v程
- Jython 2.2的新增特性及發(fā)布背景介紹
- Python和Jython的區(qū)別簡(jiǎn)述
- Jython的安裝步驟(Jython2.1)
- 簡(jiǎn)單的Jython連接數(shù)據(jù)庫(kù)的腳本
文章題目:JPython訪談錄:從JPython到Jython
分享地址:http://m.fisionsoft.com.cn/article/cdgijde.html


咨詢
建站咨詢
