JVM話三國 腳本語言之五虎上將
原創【51CTO獨家特稿】蜀漢昭烈帝劉備麾下的五員猛將。建安十六年(219年)劉備攻取漢中,自立漢中王,冊封麾下關羽、張飛、趙云、馬超、黃忠為五虎上將。
在JVM中也有五個炙手可熱的腳本語言,堪稱JVM的五虎上將!
Groovy和JRuby二將領銜JVM,Scala、Fantom和Jython三位亦是JVM腳本中的好漢。
很多人都知道,在過去很長一段時間里,Java技術是指Java編程語言和Java虛擬機(JVM)。把Java語言被編譯成字節碼在JVM上運行,而通過這樣的技術,Java也被認為是可以在任何環境、操作系統中都可以運行萬能語言。(51CTO推薦專題:Java虛擬機原理與優化)
但是,Java和JVM的發展軌跡卻不相同:Java與C、C++等語言一樣,越來越復雜,而卓越的性能以及擁有便攜性和可擴展性的JVM卻逐漸成為最快和最有效的執行平臺,JVM現在已經創造了一個新一代的開放編程語言平臺。
在寫本文之前,我們找到一些可以在JVM上運行的腳本語言,讓他們做一些對比,我認為這些開源的語言要比閉源的語言好得多。開發人員在編寫程序時都會使用腳本語言。這種語言的狹義概念是使開發人員快速編寫程序的語言。這些語言編寫出來后一般被認為是可執行或半編譯的程序,而不是傳統意義編程。我們用另一個廣義概念來解釋就是這些都是可以在JVM上運行的語言,比Java更加輕便的語言。有些是可以執行的,有些是半編譯的,但是都發展迅速。我把定義成JVM上的五虎上將:Groovy、JRuby、Fantom、Jython和Scala。
今天JVM的腳本語言我們可以分為兩個重量級。 Groovy和JRuby自然是第一陣營。
值得注意的是,Groovy和JRuby的位置也并不牢靠,就在兩年前他們的位置還很邊緣化。我認為,在未來他們的位置隨時會被Scala、Fantom和Jython取代。如果你聽我講完之后,你會覺得Jython的陽光時刻可能已經來了。
JVM的腳本語言五虎上將:
關羽——Groovy - 強大的,高層次,企業級JVM腳本語言。
趙云——JRuby -還有比紅寶石更好的嗎?
張飛——Scala - 快,多范例programmingJVM腳本語言。
馬超——Fantom - Java和.Net的performanceJVM的腳本語言。
黃忠——Jython中 - Python中的JVM的腳本語言。
#p#
關羽——Groovy - 強大的、高層次、企業級JVM腳本語言。關羽,[字:云長][終屬:蜀漢](生卒:?-219)[并州]河東解縣 [今山西運城]人,官至前將軍,封漢壽亭侯,追謚曰壯繆候。Groovy是一種面向對象的語言。其主要特點是它的語法與Java極為相似,但與很多雜亂的設置都被刪除了。Groovy中是最早的腳本語言之一,具有獨特的歷史,是開源世界的奇葩,如果說Java就是蜀國漢昭烈帝劉備的話,那只有忠勇的Groovy可稱關羽。Java開發人員可以很快使用Groovy,事實上Groovy的編譯器接受純Java的語法,Java開發人員可以很快地學習這個全新的腳本語言——Groovy。
(51CTO推薦專題:Groovy開發技術)
對于Groovy,開發者運用時簡化了很多代碼。尤其語言能力的推斷方面。例如,Groovy可以檢查一個變量的初始使用,并確定它是一個整數,字符串等。程序員可以自由地提供這方面的代碼。
Groovy中是最早的腳本語言之一,它同時還提供另一種功能,稱為封鎖,由Sun公司Java開發(現在的甲骨文公司)提供。封鎖使開發者指定的代碼作為一個獨立的實體,并把它運用到其他編程業務中。這使得在描述程序的功能非常簡潔,并在其他語言里,可以提供為創建可作為函數的參數傳遞給其他對象的功能。
Groovy。構建在強大的Java語言之上并添加了從Python,Ruby和Smalltalk等語言中學到的諸多特征,為Java開發者提供了現代最流行的編程語言特性,而且學習成本很低(幾乎為零),在開發Web,GUI,數據庫或控制臺程序時, 通過減少框架性代碼大大提高了開發者的效率。支持單元測試和模擬(對象),可以簡化測試。無縫集成所有已經存在的Java對象和類庫。直接編譯成Java字節碼,這樣可以在任何使用Java的地方使用Groovy。
Groovy中具有獨特的歷史,開源世界的奇葩。該項目啟動于2003年。創始人后來移居到其他項目,在不同時期,都認為Groovy不能成功。不過即使沒有他們,開源社區貢獻者也對Groovy產生濃厚的興趣,保持了Groovy前進。一個領先的Web框架,使用Groovy和在他們的支持IDE最終走到世人面前。
有Laforge和Grails的開發者以及現在SpringSource和VMware這些企業的支持使Groovy的未來變得有保證。盡管JVM的性能優化,但是一些Groovy特性卻有很高的成本。同時雖然Groovy語言的受歡迎程度正在上升,它患有長期的弱點,正在慢慢出現:緩慢的運行速度。她也給了其他腳本語言了機會,五虎上將中的關羽是第一個陣亡的,Groovy又會不會被其他語言超越呢?
#p#
趙云——JRuby - 比紅寶石更好的嗎?JRuby是一個Ruby語言的Java的端口。趙云,[字:子龍][終屬:蜀漢](生卒:168-229(62歲))[冀州]常山真定 [今河北正定]人,官至鎮東將軍,封永昌亭侯,追謚曰順平侯。Ruby本身是一種腳本語言在1990年代中期的日本出現,它已經得到了廣泛應用。在JVM中JRuby2004年才在美國和歐洲Ruby的殺手锏級別武器——Ruby on Rails。Ruby on Rails使得Web應用程序裝配的各部分更容易設置,Ruby被迅速投入使用開發小型和中型的企業網站。 Rails的普及導致了Ruby的爆炸性增長。常言道:“馬中赤兔,人中呂布。”武功不在呂布之下的趙云當有寶石的稱號,五虎上將中也只有常勝將軍常山趙子龍堪比JRuby!
Ruby語言有很多在Groovy中的功能,但它使用了更簡潔的語法——讓開發人員得到更多的工作。Ruby面臨最大的問題是性能。在多個基準里,它都是排在最后的。這促使許多競爭性項目,以重寫Ruby。其中,最成功的是JRuby的。
JRuby項目開始于2001年1月,Ruby的代碼直接端口到JVM。2007年,Sun工程師對JRuby進行開發——可以運行Rails的Ruby和交付性能媲美非Java的Ruby。自那時以來,開發人員轉移到Ruby on Rails上,在JRuby的工作已持續快速上漲并迅速抓到了商機。在此期間,JRuby的性能是現在這個版本比Ruby發布的1.9版本要快得多。
JRuby。一個純Java實現的Ruby解釋器。通過JRuby,你可以在JVM上直接運行Ruby程序,調用Java的類庫。很多Java編寫的Ruby IDE都是使用JRuby來解釋語法的。
對Java的運行環境和代碼庫來說,訪問是決定JRuby的未來是至關重要的一環。Ruby一直沒有進入在一個大企業,JRuby則可能是存進入大企業。 JRuby中的優點,企業可以在JVM上的應用程序運行,而原生的Ruby虛擬機是一種不成熟的數據中心。此外,由于與Java應用程序集成,企業可以通過采用JRuby和Java軟件中還利用到以前開發的Ruby項目中去。最重要的是高司令離開Oracle之后全心投入到JRuby開發中去,這個給了JRuby開發者極大的信心!就像被橫掃N次團隊突然來了個MT!
高司令blog:“On a New Rord” 主頁上截取的圖片“高司令和JRuby紅鼻子小企鵝在一起”
企業是否會支持Groovy或JRuby完全取決于科技發展速度。Groovy和JRuby目前都是由發展商支持的(而不是由志愿人員),有日益擴大的工具供應商長時間的支持,迅速提供工作代碼。而以下三種語言現在并不像Groovy和JRuby成功,但他們有一些必定能使他們在未來數年內的取得成功。即使他們沒有達到這個水平,他們也都有眾多的熱情支持者。
#p#
張飛——Scala - 快,多范例programmingJVM腳本語言。張飛,[字:翼德][終屬:蜀漢](生卒:?-221)[冀州]涿郡涿縣 [今河北涿州]人,官至車騎將軍,追謚曰桓候。最初是在2003年發展成為一個研究語言。它經常被描述為一個多范例語言,因為它結合了不同的編程元素。其核心是一個純粹的面向對象的語言(即,一切都是一個對象)的功能能力。Scala是一個在學術界流行的編程風格有利于職能,沒有副作用(函數不改變函數的變量或其他國家使用),一流的功能(函數成為使用對象可以傳遞給其他函數),并盡可能多的使用常量的變量。在Java字符串不能被修改,但是Scala的任改變一在一個完全新的字符串創建現有字符串的結果是可以實現的。論忠誠張飛不比關云長差得半分,論武藝能喝斷橋的張翼德可給趙云斷后,強大的Scala不就和張飛一樣嗎?
(51CTO推薦專題:專題:Scala編程語言)
Scala。一種多范式的編程語言,設計意圖是要整合面向對象編程和函數式編程的各種特性。Scala編程語言近來抓住了很多開發者的眼球。它看起來像是一種純粹的面向對象編程語言,而又無縫地結合了命令式和函數式的編程風格。Scala的名稱表明,它還是一種高度可伸縮的語言。Scala的設計始終貫穿著一個理念:創造一種更好地支持組件的語言。
開發者在Scala這里享受過其他語言沒有的快樂:奇異的性能優勢。語言是編譯為優化代碼,運行速度基本上和Java沒有區別。其余的語言遠遠地落后于Scala遠遠執行速度。
當然,Scala確實有缺點。其中第一項是有時不透明的語法,每一種語言都有用于生成堅不可摧的代碼,但它不太容易在Scala上這樣做。第二個問題是一個二進制兼容性,Scala的維護人員已經發布二進制兼容新版本。如果廣泛采用,尤其是在企業開發里,把現有代碼重新編譯,以便能夠與現在的代碼兼容,這是Scala發展的一個巨大障礙。不過,對于Scala的好工具相繼出現,以及社區的用戶是積極和熱情。我完全相信Scala會成為JVM語言里最棒的一個。
#p#
馬超——Fantom - Java和.Net的performanceJVM的腳本語言。馬超,[字:孟起][終屬:蜀漢](生卒:176-222(47歲))[雍州]扶風茂陵 [今陜西興平]人,官至驃騎將軍,封犛鄉侯,追謚曰威侯。 Fantom 前身是 (Fan) 是一個基于 Java 和 .NET 平臺的編程腳本引擎,用來在運行時產生 JVM 和 .NET 平臺的字節碼,該語言是面向對象的,跟 Groovy 和 JRuby 有點類似,可通過特定的接口來集成 Java 的類庫。馬超天生的守城大將,攻城略地被C#——曹操打得大敗,Fantom在JVM陣營中的停滯不前不正像馬超的后半生嗎?
Fantom這種語言遵循其設計者的想法,最初制定他們的客戶需要的實時軟件包。Fantom這種語言設計者就像是Groovy的和JRuby的設計師一樣,想使編碼更容易。他們已經取消了相當數量的代碼,但前面推入新的領域作出一些有趣的選擇。
例如,所有的整數和浮點值是64位。這意味著,對于所有意圖,對算術運算的結果不能造成溢出的領域限制。 Fantom還包括內置的并發——Scala只有對全面的并發這個共同特征的支持。該代碼庫已經很成熟了,很多語言認為按照Java和.net的標準API的模式是不守秩序。因此,Fantom的API是需要一個特定的功能,只有在Fantom那里才可以找到。作出Fantom網站出色的文件顯然更加更容易。
像許多語言一樣,Fantom對通過外部工具只有有限的支持。它唯一的IDE支持是NetBeans。這有可能改變為Fantom社區的增長和其獨特的設計和跨平臺特性變得更加廣為人知。總體來說Fantom有點像馬超一樣,有點獨!
#p#
黃忠——Jython - Python中的JVM的腳本語言。黃忠[字:漢升][終屬:蜀漢](生卒:148-220(73歲))[荊州]南陽 [今河南南陽]人,官至后將軍,追謚曰剛侯。 JPython,是JVM釋放最早的腳本語言之一。其目的是Python用于Java平臺的實現。在這方面,只是部分成功,因為它沒有實現所有Python,而是整個Python語言的一小部分。 Python本身是沿著原來的腳本語言與Perl(1)。它保留了它的普及多年來作為一個最好的通用語言,它被廣泛應用于內的Google。黃忠為五虎上將最后一名,和Jython一樣,年輕時無比強悍,可惜耽誤了幾年,可惜可惜啊!
Jython由于繼承了Java和Python二者的特性而顯得很獨特。其是一種完整的語言,而不是一個Java翻譯器或僅僅是一個Python編譯器,它是一個Python語言在Java中的完全實現。Jython也有很多從CPython中繼承的模塊庫。最有趣的事情是Jython不像CPython或其他任何高級語言,它提供了對其實現語言的一切存取。所以Jython不僅給你提供了Python的庫,同時也提供了所有的Java類。這使其有一個巨大的資源庫。
Jython的最初受到了它的主要開發者熱情用戶,但他主要的創始人離開了項目,去往微軟工作之后,Jython開始掙扎著前行。在經歷了Jython的創始人離去之后,項目基本在2005至2008年間停滯。在此期間,其他JVM的腳本語言尤其是Groovy,獲得了很大的發展,而Jython是否會像黃忠一樣慢慢老去、永遠無法恢復的原有勢頭,我們拭目以待!
總結:
本文原為外文文章“Top five scripting languages on the JVM”。翻譯成漢語為“基于JVM的5大腳本語言”。編輯們稍作加工,希望大家喜歡。
原文出處:http://www.networkworld.com/reviews/2010/071410-top-five-scripting-languages-on.html?hpg1=bn
原文名:Top five scripting languages on the JVM
原文作者:Andrew Binstock
【51CTO譯稿,非經授權謝絕轉載,合作媒體轉載請注明原文出處、作者及51CTO譯稿和譯者!】
【編輯推薦】