Jython

Jython

Jython是一種完整的語言,而不是一個Java翻譯器或僅僅是一個Python編譯器,它是一個Python語言在Java中的完全實現。Jython也有很多從CPython中繼承的模組庫。最有趣的事情是Jython不像CPython或其他任何高級語言,它提供了對其實現語言的一切存取。所以Jython不僅給你提供了Python的庫,同時也提供了所有的Java類。這使其有一個巨大的資源庫。

基本介紹

  • 外文名:Jython
  • 釋義:一種完整的語言
  • 特點:提供了對其實現語言的一切存取
  • 別稱:JPython
介紹,特點,效率,優勢,示例,

介紹

要了解Jython(舊稱JPython),首先要了解Python。Python是用C編寫的高級的、面向對象的、開放原始碼的程式語言。Guido vanRossum是Python的原創者,繼而在Python的快速發展中產生了一大群高水平的設計者和程式設計師。使用Python的開發人員增長迅速,並一直在持續增長。然而Sun的Java程式語言也是深入人心的。隨著用Java實現的項目的數量接近了用C/C++實現的項目,Python的Java實現也變得很有必要。Jython,最初叫做JPython,就是:Python語言的Java實現。為避免混淆,本書用CPython來表示Python的C語言實現,而用Jython來表示Java實現,而Python表示實現的中性概念和Python語言規範的設計特徵。
Jython和Python強調了代碼的簡明性、方便性和易讀性。Jython使用縮排來對代碼塊定界以避免使用在Java中的大括弧。Jython用新的一行來表示一個新的語句的開始,並有幾個重要的區別,如允許在每個語句後省略分號。Jython沒有像在Java中的public、private和protected存取符,這樣就給程式設計師提供了快速開發所需要的靈活性,並將注意力集中在程式邏輯上。正像前面所提到的,Jython不用明顯的靜態的類型定義,故程式設計師不需要從程式邏輯轉移到類型定義上來。
Jython的歷史要追溯到JimHugunin,他是Guidovan Rossum在國家研究動力中心(CNRI)的同事。JimHugunin認識到Python程式語言用Java實現的重要性,並實現了最初名為JPython的語言。由於要開發aspectj(http://aspectj.org/),JimHugunin不能繼續致力於JPython了。所以當Python的開發者準備離開CNRI時,由當時也在CNRI的Barry Warsaw繼續領導開發。
Python和Jython項目組從CNRI離開後,在Sourceforge上轉變為一種更開放的語言模型。在此期間,一個對Jython(JPython)做了主要貢獻的人FinnBock領導了Jython項目小組。正是由於FinnBock所做的傑出貢獻使Jython現在成為一個如此有價值的工具。類似Jython這樣的開放原始碼項目與開發和維護它們的人一樣傑出,從這個意義上說Jython因為有FinnBack的貢獻和指導而很幸運。另外一個對Jython做了最新有價值貢獻的人是SamuelePedroni。Samuele的貢獻主要在Jython的類裝載、導入機制等等。Finn和Samuele目前是Jython的兩個主要開發者。

特點

數和函式編程
Jython與Python一樣有第一類函式。第一類函式是指能像變數一樣的可調用的對象。第一類函式在對事件處理和其他情況下有意義,這導致增加了Java內部類的功能。雖然Java的內部類與第一類函式類似,但它在方便性與靈活性方面有很大的不足,這是由於Jython中的第一類函式減少了Jython中的語法開銷。
Jython也包括了所有函式編程所需要的工具。這意味著強制的面向對象的函式編程在Jython中得到支持。這顯然在教學上很有意義,它使Jython程式設計師能選擇最適合於特定問題的程式語言而不是由語言強加。函式化的工具如列表包含、lambda表單、map、filter和reduce也對減少代碼的行數、降低複雜性和名字重綁定數(名字重綁定有很大副作用)起到很大的作用。
學習周期短
任何Java程式設計師在數日內就能熟悉Jython。由於有很多內容,關鍵在於細節的學習,但僅僅用幾天的時間就能擁有Jython的快速開發功能確實是很有價值的。對於那些從事測試和技術支持的小組通常並沒有很多時間去學習複雜的Java代碼,但通過對Jython的學習能在開銷很少的情況下很快提高公司的技術水平和效率。
寫一次,處處可用
由於Jython是用Java編寫的且由於其可編譯成Java位元組碼,因此Jython也具有Java的“寫一次,處處可用”的特點。Jython能運行在任何可兼容的Java1.1‘或更高的Java虛擬機(JVM)版本的平台上。另外你可將Jython套用編譯成自足的位元組碼,它能運行在任何兼容的JVM上。在Linux上編譯的套用能運行在有兼容JVM的任何其他平台上。
Java安全性
Java的安全性是特別的而且越來越重要。從沙箱到信號,Jython有能力使用Java的特別的安全框架。
代碼清晰性
代碼的清晰性是Python最大的優點,當然也是Jython最大的優點。不必要的標點和行都避免了。Jython代碼在可讀性和清晰性方面近似於自然語言。這起源於Python對代碼塊和語句的簡單描繪的承諾。縮排標記代碼塊,換行符標記新的語句。在此之上,語法通常支持。

效率

計算程式語言的效率是一個很廣泛的課題,它要考慮程式設計師的時間、總體複雜性、代碼的行數、可用性、可維護性和運行效率。當然很多人不同意賦予這些變數的權重,經常是在不同的情況下偏重有所不同。然而本書的前提是Jython除運行時的效率外,其他方面都超過其他語言。Jython的運行速度是可以與其他高級語言相比的,但速度並不是高級語言的目標和特點。區別在於當加速一個需要的套用時,將Jython代碼翻譯成Java更有效,這是由於Jython與Java的無縫集成性。另外對所有有效的Java類的直接訪問增加了改進已存在的類的可能性。
動態類型
在Jython中你不必像在Java中那樣聲明類型,因為類型是在運行時決定的。Jython的列表和映射類型是高級的多態的Java類的實例。多態意味著對象能對不同的數據類型工作。例如Jython的list類型可以是一個數字的序列、字元串的序列、字元的序列或它們的組合。動態和多態性的列是對編程的極大的貢獻,從很多已放棄顯式的靜態類型定義的高級語言中可看出它減少了代碼的行數,降低了複雜性,提高了程式的效率。
內省和動態執行
Jython有一些允許方便的對象內省和代碼的動態執行的內部函式。內省是發現一個對象信息的能力,而動態執行是執行在運行時產生的代碼的能力。該功能很大程度上減少了代碼的行數並增加了程式的可靠性,使其更加方便維護。這也能使數據和程式結構或邏輯更好的集成而不影響重用性,因為所有的東西都是在運行時決定的。

優勢

Jython由於繼承了Java和Python二者的特性而顯得很獨特。
對Java類的無縫存取
在Java中實現Python可以看到有趣的Java反射API的作用。反射使Jython能無縫地使用任何Java類。Jython從CPython中繼承了很多優點,但CPython不像別的專為Python所寫的一樣,在C和Python之間有一些問題限制了C庫函式的使用。在Jython中真正解決了這個問題,使其編程的效率和生產力得到了很大的提高。
由於與Java的無縫集成,Jython能使任何部署了Java套用和框架的公司受益而不需要額外的工作。接受任何一種部門的程式語言,對任何一個公司而言都是不容易的,需要深思熟慮,因為這牽涉到整體結構、伺服器和外圍的工具。Jython作為Java的一個無縫集成的語言,可以在已存在的Java套用上無縫增加而不需要重大抉擇。很多公司都花費了很多資金來建立Java的套用,這使採用CPython、Perl、Ruby、PHP和其他不能透明地集成已有Java實現的高級語言的效益降低,吸引力下降。而Jython有能力對已存在的Java框架進行補充,且二者能無縫地結合。

示例

1.按鈕
import java
from java import awt
def exit(e): java.lang.System.exit(0)
frame = awt.Frame('AWT Example', visible=1)
button = awt.Button('Close Me!', actionPerformed=exit)
frame.add(button, 'Center')
frame.pack()
運行效果:
Jython

相關詞條

熱門詞條

聯絡我們