自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JVM話三國(guó) 腳本語(yǔ)言之五虎上將

原創(chuàng)
開(kāi)發(fā) 后端
“JVM話三國(guó) 腳本語(yǔ)言之五虎上將”本文原為外文文章“Top five scripting languages on the JVM”。翻譯成漢語(yǔ)為“基于JVM的5大腳本語(yǔ)言”。編輯們稍作加工,希望大家喜歡。

【51CTO獨(dú)家特稿】蜀漢昭烈帝劉備麾下的五員猛將。建安十六年(219年)劉備攻取漢中,自立漢中王,冊(cè)封麾下關(guān)羽、張飛、趙云、馬超、黃忠為五虎上將。

在JVM中也有五個(gè)炙手可熱的腳本語(yǔ)言,堪稱(chēng)JVM的五虎上將!

Groovy和JRuby二將領(lǐng)銜JVM,Scala、Fantom和Jython三位亦是JVM腳本中的好漢。

很多人都知道,在過(guò)去很長(zhǎng)一段時(shí)間里,Java技術(shù)是指Java編程語(yǔ)言和Java虛擬機(jī)(JVM)。把Java語(yǔ)言被編譯成字節(jié)碼在JVM上運(yùn)行,而通過(guò)這樣的技術(shù),Java也被認(rèn)為是可以在任何環(huán)境、操作系統(tǒng)中都可以運(yùn)行萬(wàn)能語(yǔ)言。(51CTO推薦專(zhuān)題:Java虛擬機(jī)原理與優(yōu)化

[[13033]] 
五虎上將:關(guān)羽、張飛、趙云、馬超、黃忠

 

五種語(yǔ)言
五種語(yǔ)言特性對(duì)比

但是,Java和JVM的發(fā)展軌跡卻不相同:Java與C、C++等語(yǔ)言一樣,越來(lái)越復(fù)雜,而卓越的性能以及擁有便攜性和可擴(kuò)展性的JVM卻逐漸成為最快和最有效的執(zhí)行平臺(tái),JVM現(xiàn)在已經(jīng)創(chuàng)造了一個(gè)新一代的開(kāi)放編程語(yǔ)言平臺(tái)。

在寫(xiě)本文之前,我們找到一些可以在JVM上運(yùn)行的腳本語(yǔ)言,讓他們做一些對(duì)比,我認(rèn)為這些開(kāi)源的語(yǔ)言要比閉源的語(yǔ)言好得多。開(kāi)發(fā)人員在編寫(xiě)程序時(shí)都會(huì)使用腳本語(yǔ)言。這種語(yǔ)言的狹義概念是使開(kāi)發(fā)人員快速編寫(xiě)程序的語(yǔ)言。這些語(yǔ)言編寫(xiě)出來(lái)后一般被認(rèn)為是可執(zhí)行或半編譯的程序,而不是傳統(tǒng)意義編程。我們用另一個(gè)廣義概念來(lái)解釋就是這些都是可以在JVM上運(yùn)行的語(yǔ)言,比Java更加輕便的語(yǔ)言。有些是可以執(zhí)行的,有些是半編譯的,但是都發(fā)展迅速。我把定義成JVM上的五虎上將:Groovy、JRuby、Fantom、Jython和Scala。

今天JVM的腳本語(yǔ)言我們可以分為兩個(gè)重量級(jí)。 Groovy和JRuby自然是第一陣營(yíng)。

值得注意的是,Groovy和JRuby的位置也并不牢靠,就在兩年前他們的位置還很邊緣化。我認(rèn)為,在未來(lái)他們的位置隨時(shí)會(huì)被Scala、Fantom和Jython取代。如果你聽(tīng)我講完之后,你會(huì)覺(jué)得Jython的陽(yáng)光時(shí)刻可能已經(jīng)來(lái)了。

JVM的腳本語(yǔ)言五虎上將:

關(guān)羽——Groovy - 強(qiáng)大的,高層次,企業(yè)級(jí)JVM腳本語(yǔ)言。

趙云——JRuby -還有比紅寶石更好的嗎?

張飛——Scala - 快,多范例programmingJVM腳本語(yǔ)言。

馬超——Fantom - Java和.Net的performanceJVM的腳本語(yǔ)言。

黃忠——Jython中 - Python中的JVM的腳本語(yǔ)言。

#p#

關(guān)羽——Groovy - 強(qiáng)大的、高層次、企業(yè)級(jí)JVM腳本語(yǔ)言。關(guān)羽,[字:云長(zhǎng)][終屬:蜀漢](生卒:?-219)[并州]河?xùn)|解縣 [今山西運(yùn)城]人,官至前將軍,封漢壽亭侯,追謚曰壯繆候。Groovy是一種面向?qū)ο蟮恼Z(yǔ)言。其主要特點(diǎn)是它的語(yǔ)法與Java極為相似,但與很多雜亂的設(shè)置都被刪除了。Groovy中是最早的腳本語(yǔ)言之一,具有獨(dú)特的歷史,是開(kāi)源世界的奇葩,如果說(shuō)Java就是蜀國(guó)漢昭烈帝劉備的話,那只有忠勇的Groovy可稱(chēng)關(guān)羽。Java開(kāi)發(fā)人員可以很快使用Groovy,事實(shí)上Groovy的編譯器接受純Java的語(yǔ)法,Java開(kāi)發(fā)人員可以很快地學(xué)習(xí)這個(gè)全新的腳本語(yǔ)言——Groovy。

(51CTO推薦專(zhuān)題:Groovy開(kāi)發(fā)技術(shù)

[[13034]]
前將軍關(guān)羽

對(duì)于Groovy,開(kāi)發(fā)者運(yùn)用時(shí)簡(jiǎn)化了很多代碼。尤其語(yǔ)言能力的推斷方面。例如,Groovy可以檢查一個(gè)變量的初始使用,并確定它是一個(gè)整數(shù),字符串等。程序員可以自由地提供這方面的代碼。

Groovy中是最早的腳本語(yǔ)言之一,它同時(shí)還提供另一種功能,稱(chēng)為封鎖,由Sun公司Java開(kāi)發(fā)(現(xiàn)在的甲骨文公司)提供。封鎖使開(kāi)發(fā)者指定的代碼作為一個(gè)獨(dú)立的實(shí)體,并把它運(yùn)用到其他編程業(yè)務(wù)中。這使得在描述程序的功能非常簡(jiǎn)潔,并在其他語(yǔ)言里,可以提供為創(chuàng)建可作為函數(shù)的參數(shù)傳遞給其他對(duì)象的功能。

Groovy。構(gòu)建在強(qiáng)大的Java語(yǔ)言之上并添加了從Python,Ruby和Smalltalk等語(yǔ)言中學(xué)到的諸多特征,為Java開(kāi)發(fā)者提供了現(xiàn)代最流行的編程語(yǔ)言特性,而且學(xué)習(xí)成本很低(幾乎為零),在開(kāi)發(fā)Web,GUI,數(shù)據(jù)庫(kù)或控制臺(tái)程序時(shí), 通過(guò)減少框架性代碼大大提高了開(kāi)發(fā)者的效率。支持單元測(cè)試和模擬(對(duì)象),可以簡(jiǎn)化測(cè)試。無(wú)縫集成所有已經(jīng)存在的Java對(duì)象和類(lèi)庫(kù)。直接編譯成Java字節(jié)碼,這樣可以在任何使用Java的地方使用Groovy。

Groovy中具有獨(dú)特的歷史,開(kāi)源世界的奇葩。該項(xiàng)目啟動(dòng)于2003年。創(chuàng)始人后來(lái)移居到其他項(xiàng)目,在不同時(shí)期,都認(rèn)為Groovy不能成功。不過(guò)即使沒(méi)有他們,開(kāi)源社區(qū)貢獻(xiàn)者也對(duì)Groovy產(chǎn)生濃厚的興趣,保持了Groovy前進(jìn)。一個(gè)領(lǐng)先的Web框架,使用Groovy和在他們的支持IDE最終走到世人面前。

有Laforge和Grails的開(kāi)發(fā)者以及現(xiàn)在SpringSource和VMware這些企業(yè)的支持使Groovy的未來(lái)變得有保證。盡管JVM的性能優(yōu)化,但是一些Groovy特性卻有很高的成本。同時(shí)雖然Groovy語(yǔ)言的受歡迎程度正在上升,它患有長(zhǎng)期的弱點(diǎn),正在慢慢出現(xiàn):緩慢的運(yùn)行速度。她也給了其他腳本語(yǔ)言了機(jī)會(huì),五虎上將中的關(guān)羽是第一個(gè)陣亡的,Groovy又會(huì)不會(huì)被其他語(yǔ)言超越呢?

#p#

趙云——JRuby - 比紅寶石更好的嗎?JRuby是一個(gè)Ruby語(yǔ)言的Java的端口。趙云,[字:子龍][終屬:蜀漢](生卒:168-229(62歲))[冀州]常山真定 [今河北正定]人,官至鎮(zhèn)東將軍,封永昌亭侯,追謚曰順平侯。Ruby本身是一種腳本語(yǔ)言在1990年代中期的日本出現(xiàn),它已經(jīng)得到了廣泛應(yīng)用。在JVM中JRuby2004年才在美國(guó)和歐洲Ruby的殺手锏級(jí)別武器——Ruby on Rails。Ruby on Rails使得Web應(yīng)用程序裝配的各部分更容易設(shè)置,Ruby被迅速投入使用開(kāi)發(fā)小型和中型的企業(yè)網(wǎng)站。 Rails的普及導(dǎo)致了Ruby的爆炸性增長(zhǎng)。常言道:“馬中赤兔,人中呂布。”武功不在呂布之下的趙云當(dāng)有寶石的稱(chēng)號(hào),五虎上將中也只有常勝將軍常山趙子龍堪比JRuby!

[[13035]] 
中將軍趙云

Ruby語(yǔ)言有很多在Groovy中的功能,但它使用了更簡(jiǎn)潔的語(yǔ)法——讓開(kāi)發(fā)人員得到更多的工作。Ruby面臨最大的問(wèn)題是性能。在多個(gè)基準(zhǔn)里,它都是排在最后的。這促使許多競(jìng)爭(zhēng)性項(xiàng)目,以重寫(xiě)Ruby。其中,最成功的是JRuby的。

JRuby項(xiàng)目開(kāi)始于2001年1月,Ruby的代碼直接端口到JVM。2007年,Sun工程師對(duì)JRuby進(jìn)行開(kāi)發(fā)——可以運(yùn)行Rails的Ruby和交付性能媲美非Java的Ruby。自那時(shí)以來(lái),開(kāi)發(fā)人員轉(zhuǎn)移到Ruby on Rails上,在JRuby的工作已持續(xù)快速上漲并迅速抓到了商機(jī)。在此期間,JRuby的性能是現(xiàn)在這個(gè)版本比Ruby發(fā)布的1.9版本要快得多。

JRuby。一個(gè)純Java實(shí)現(xiàn)的Ruby解釋器。通過(guò)JRuby,你可以在JVM上直接運(yùn)行Ruby程序,調(diào)用Java的類(lèi)庫(kù)。很多Java編寫(xiě)的Ruby IDE都是使用JRuby來(lái)解釋語(yǔ)法的。

對(duì)Java的運(yùn)行環(huán)境和代碼庫(kù)來(lái)說(shuō),訪問(wèn)是決定JRuby的未來(lái)是至關(guān)重要的一環(huán)。Ruby一直沒(méi)有進(jìn)入在一個(gè)大企業(yè),JRuby則可能是存進(jìn)入大企業(yè)。 JRuby中的優(yōu)點(diǎn),企業(yè)可以在JVM上的應(yīng)用程序運(yùn)行,而原生的Ruby虛擬機(jī)是一種不成熟的數(shù)據(jù)中心。此外,由于與Java應(yīng)用程序集成,企業(yè)可以通過(guò)采用JRuby和Java軟件中還利用到以前開(kāi)發(fā)的Ruby項(xiàng)目中去。最重要的是高司令離開(kāi)Oracle之后全心投入到JRuby開(kāi)發(fā)中去,這個(gè)給了JRuby開(kāi)發(fā)者極大的信心!就像被橫掃N次團(tuán)隊(duì)突然來(lái)了個(gè)MT!

[[13036]]

高司令blog:“On a New Rord” 主頁(yè)上截取的圖片“高司令和JRuby紅鼻子小企鵝在一起”

企業(yè)是否會(huì)支持Groovy或JRuby完全取決于科技發(fā)展速度。Groovy和JRuby目前都是由發(fā)展商支持的(而不是由志愿人員),有日益擴(kuò)大的工具供應(yīng)商長(zhǎng)時(shí)間的支持,迅速提供工作代碼。而以下三種語(yǔ)言現(xiàn)在并不像Groovy和JRuby成功,但他們有一些必定能使他們?cè)谖磥?lái)數(shù)年內(nèi)的取得成功。即使他們沒(méi)有達(dá)到這個(gè)水平,他們也都有眾多的熱情支持者。

#p#

張飛——Scala - 快,多范例programmingJVM腳本語(yǔ)言。張飛,[字:翼德][終屬:蜀漢](生卒:?-221)[冀州]涿郡涿縣 [今河北涿州]人,官至車(chē)騎將軍,追謚曰桓候。最初是在2003年發(fā)展成為一個(gè)研究語(yǔ)言。它經(jīng)常被描述為一個(gè)多范例語(yǔ)言,因?yàn)樗Y(jié)合了不同的編程元素。其核心是一個(gè)純粹的面向?qū)ο蟮恼Z(yǔ)言(即,一切都是一個(gè)對(duì)象)的功能能力。Scala是一個(gè)在學(xué)術(shù)界流行的編程風(fēng)格有利于職能,沒(méi)有副作用(函數(shù)不改變函數(shù)的變量或其他國(guó)家使用),一流的功能(函數(shù)成為使用對(duì)象可以傳遞給其他函數(shù)),并盡可能多的使用常量的變量。在Java字符串不能被修改,但是Scala的任改變一在一個(gè)完全新的字符串創(chuàng)建現(xiàn)有字符串的結(jié)果是可以實(shí)現(xiàn)的。論忠誠(chéng)張飛不比關(guān)云長(zhǎng)差得半分,論武藝能喝斷橋的張翼德可給趙云斷后,強(qiáng)大的Scala不就和張飛一樣嗎?

(51CTO推薦專(zhuān)題:專(zhuān)題:Scala編程語(yǔ)言

[[13037]]
后將軍張飛

Scala。一種多范式的編程語(yǔ)言,設(shè)計(jì)意圖是要整合面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。Scala編程語(yǔ)言近來(lái)抓住了很多開(kāi)發(fā)者的眼球。它看起來(lái)像是一種純粹的面向?qū)ο缶幊陶Z(yǔ)言,而又無(wú)縫地結(jié)合了命令式和函數(shù)式的編程風(fēng)格。Scala的名稱(chēng)表明,它還是一種高度可伸縮的語(yǔ)言。Scala的設(shè)計(jì)始終貫穿著一個(gè)理念:創(chuàng)造一種更好地支持組件的語(yǔ)言。

開(kāi)發(fā)者在Scala這里享受過(guò)其他語(yǔ)言沒(méi)有的快樂(lè):奇異的性能優(yōu)勢(shì)。語(yǔ)言是編譯為優(yōu)化代碼,運(yùn)行速度基本上和Java沒(méi)有區(qū)別。其余的語(yǔ)言遠(yuǎn)遠(yuǎn)地落后于Scala遠(yuǎn)遠(yuǎn)執(zhí)行速度。

當(dāng)然,Scala確實(shí)有缺點(diǎn)。其中第一項(xiàng)是有時(shí)不透明的語(yǔ)法,每一種語(yǔ)言都有用于生成堅(jiān)不可摧的代碼,但它不太容易在Scala上這樣做。第二個(gè)問(wèn)題是一個(gè)二進(jìn)制兼容性,Scala的維護(hù)人員已經(jīng)發(fā)布二進(jìn)制兼容新版本。如果廣泛采用,尤其是在企業(yè)開(kāi)發(fā)里,把現(xiàn)有代碼重新編譯,以便能夠與現(xiàn)在的代碼兼容,這是Scala發(fā)展的一個(gè)巨大障礙。不過(guò),對(duì)于Scala的好工具相繼出現(xiàn),以及社區(qū)的用戶(hù)是積極和熱情。我完全相信Scala會(huì)成為JVM語(yǔ)言里最棒的一個(gè)。

#p#

馬超——Fantom - Java和.Net的performanceJVM的腳本語(yǔ)言。馬超,[字:孟起][終屬:蜀漢](生卒:176-222(47歲))[雍州]扶風(fēng)茂陵 [今陜西興平]人,官至驃騎將軍,封犛鄉(xiāng)侯,追謚曰威侯。 Fantom 前身是 (Fan) 是一個(gè)基于 Java 和 .NET 平臺(tái)的編程腳本引擎,用來(lái)在運(yùn)行時(shí)產(chǎn)生 JVM 和 .NET 平臺(tái)的字節(jié)碼,該語(yǔ)言是面向?qū)ο蟮模?Groovy 和 JRuby 有點(diǎn)類(lèi)似,可通過(guò)特定的接口來(lái)集成 Java 的類(lèi)庫(kù)。馬超天生的守城大將,攻城略地被C#——曹操打得大敗,F(xiàn)antom在JVM陣營(yíng)中的停滯不前不正像馬超的后半生嗎?

[[13038]] 
左將軍馬超

Fantom這種語(yǔ)言遵循其設(shè)計(jì)者的想法,最初制定他們的客戶(hù)需要的實(shí)時(shí)軟件包。Fantom這種語(yǔ)言設(shè)計(jì)者就像是Groovy的和JRuby的設(shè)計(jì)師一樣,想使編碼更容易。他們已經(jīng)取消了相當(dāng)數(shù)量的代碼,但前面推入新的領(lǐng)域作出一些有趣的選擇。

例如,所有的整數(shù)和浮點(diǎn)值是64位。這意味著,對(duì)于所有意圖,對(duì)算術(shù)運(yùn)算的結(jié)果不能造成溢出的領(lǐng)域限制。 Fantom還包括內(nèi)置的并發(fā)——Scala只有對(duì)全面的并發(fā)這個(gè)共同特征的支持。該代碼庫(kù)已經(jīng)很成熟了,很多語(yǔ)言認(rèn)為按照J(rèn)ava和.net的標(biāo)準(zhǔn)API的模式是不守秩序。因此,F(xiàn)antom的API是需要一個(gè)特定的功能,只有在Fantom那里才可以找到。作出Fantom網(wǎng)站出色的文件顯然更加更容易。

像許多語(yǔ)言一樣,F(xiàn)antom對(duì)通過(guò)外部工具只有有限的支持。它唯一的IDE支持是NetBeans。這有可能改變?yōu)镕antom社區(qū)的增長(zhǎng)和其獨(dú)特的設(shè)計(jì)和跨平臺(tái)特性變得更加廣為人知。總體來(lái)說(shuō)Fantom有點(diǎn)像馬超一樣,有點(diǎn)獨(dú)!

#p#

黃忠——Jython - Python中的JVM的腳本語(yǔ)言黃忠[字:漢升][終屬:蜀漢](生卒:148-220(73歲))[荊州]南陽(yáng) [今河南南陽(yáng)]人,官至后將軍,追謚曰剛侯。 JPython,是JVM釋放最早的腳本語(yǔ)言之一。其目的是Python用于Java平臺(tái)的實(shí)現(xiàn)。在這方面,只是部分成功,因?yàn)樗鼪](méi)有實(shí)現(xiàn)所有Python,而是整個(gè)Python語(yǔ)言的一小部分。 Python本身是沿著原來(lái)的腳本語(yǔ)言與Perl(1)。它保留了它的普及多年來(lái)作為一個(gè)最好的通用語(yǔ)言,它被廣泛應(yīng)用于內(nèi)的Google。黃忠為五虎上將最后一名,和Jython一樣,年輕時(shí)無(wú)比強(qiáng)悍,可惜耽誤了幾年,可惜可惜??!

[[13039]]
右將軍黃忠

Jython由于繼承了Java和Python二者的特性而顯得很獨(dú)特。其是一種完整的語(yǔ)言,而不是一個(gè)Java翻譯器或僅僅是一個(gè)Python編譯器,它是一個(gè)Python語(yǔ)言在Java中的完全實(shí)現(xiàn)。Jython也有很多從CPython中繼承的模塊庫(kù)。最有趣的事情是Jython不像CPython或其他任何高級(jí)語(yǔ)言,它提供了對(duì)其實(shí)現(xiàn)語(yǔ)言的一切存取。所以Jython不僅給你提供了Python的庫(kù),同時(shí)也提供了所有的Java類(lèi)。這使其有一個(gè)巨大的資源庫(kù)。

Jython的最初受到了它的主要開(kāi)發(fā)者熱情用戶(hù),但他主要的創(chuàng)始人離開(kāi)了項(xiàng)目,去往微軟工作之后,Jython開(kāi)始掙扎著前行。在經(jīng)歷了Jython的創(chuàng)始人離去之后,項(xiàng)目基本在2005至2008年間停滯。在此期間,其他JVM的腳本語(yǔ)言尤其是Groovy,獲得了很大的發(fā)展,而Jython是否會(huì)像黃忠一樣慢慢老去、永遠(yuǎn)無(wú)法恢復(fù)的原有勢(shì)頭,我們拭目以待!

總結(jié):

本文原為外文文章“Top five scripting languages on the JVM”。翻譯成漢語(yǔ)為“基于JVM的5大腳本語(yǔ)言”。編輯們稍作加工,希望大家喜歡。

 

原文出處: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譯稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載,合作媒體轉(zhuǎn)載請(qǐng)注明原文出處、作者及51CTO譯稿和譯者!】

【編輯推薦】

  1. Scala 2.8最終發(fā)布 全新功能值得期待
  2. Groovy 1.7.3發(fā)布 值得關(guān)注的新功能
  3. Java上的寶石 JRuby 1.5正式發(fā)布
  4. 深入Java底層:內(nèi)存屏障與JVM并發(fā)詳解

 

責(zé)任編輯:佚名 來(lái)源: 51CTO編譯
相關(guān)推薦

2011-08-11 22:22:26

工作站行情

2011-06-22 10:14:49

JVM

2011-08-24 13:32:17

2011-07-05 10:39:55

JVM

2013-08-02 16:11:07

IT半小時(shí)

2011-08-25 14:26:40

LUA數(shù)據(jù)文件

2009-08-17 10:08:24

2018-11-06 09:39:47

芯片蘋(píng)果高通

2021-07-27 14:25:10

零信任/IBM安全/

2012-06-02 01:41:00

GroovyJVMJava

2014-03-31 17:35:04

云計(jì)算

2011-09-22 10:29:26

三國(guó)塔防游戲

2021-06-05 17:59:00

責(zé)任鏈模式設(shè)計(jì)

2020-09-08 17:32:50

戴爾

2009-06-10 08:41:15

Linux腳本語(yǔ)言

2011-08-22 18:00:53

Lua語(yǔ)言

2010-02-24 14:04:32

Python腳本語(yǔ)言

2009-10-28 13:53:10

應(yīng)用接入行業(yè)

2011-11-07 16:04:30

操作系統(tǒng)評(píng)測(cè)

2010-11-24 10:45:28

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)