Java趨勢:腳本語言引領(lǐng)風(fēng)騷
發(fā)布時(shí)間:2008-10-17 閱讀數(shù): 次 來源:網(wǎng)樂原科技
只用了短短的8年時(shí)間,卻好像已經(jīng)成長了35年,Java已經(jīng)迅速在廣泛的領(lǐng)域中找到了自己的位置:P2P、開放源代碼、無線應(yīng)用、嵌入式應(yīng)用程序以及將要命名的某些應(yīng)用。很難追蹤Java的具體方向,因?yàn)樗诿總€(gè)領(lǐng)域都正處于領(lǐng)導(dǎo)地位。
現(xiàn)在,讓我們看看Java領(lǐng)域中日益增長的腳本語言的影響。
關(guān)于快速開發(fā)
毋庸置疑,腳本語言,比如Jython、Python、Perl和PHP正越來越流行。Jython實(shí)際上是Python編程語言的一個(gè)完整實(shí)現(xiàn)。它由100%的純Java語言寫成,并且可以很方便地訪問Java類庫。
這種腳本趨勢正由于快速應(yīng)用程序開發(fā)(RAD,Rapid Application Development)的發(fā)展而越來越擴(kuò)大化。RAD是一種開發(fā)風(fēng)格,如今它正吸引著越來越多的擁護(hù)者。銷售部經(jīng)理給IT部門施加了巨大的壓力以便加速生產(chǎn),IT經(jīng)理就不得不尋找更高效的方法來縮短研發(fā)生產(chǎn)時(shí)間。因此,RAD自然成了最好的推動(dòng)力。
Infravio公司作為一個(gè)Java和Web服務(wù)的集成商,CTO Mukund Balasubramanian 說:“通過某些腳本語言,你可以變得非常聰明并且能夠完成常規(guī)Java無法完成的很多事情。如果你知道如何利用一個(gè)好的腳本語言,你可以在開發(fā)中節(jié)省大量的時(shí)間和金錢。”
腳本語言的優(yōu)勢
Balasubramanian說,腳本語言具有以下優(yōu)勢:
· 快速開發(fā)。它們大大縮短了“開發(fā)、部署、測試、調(diào)試”周期。
· 部署簡便。大多提供即時(shí)部署能力,而無需花費(fèi)大量時(shí)間在編譯和打包周期上。
· 與已有技術(shù)集成。它們大都構(gòu)建在已有的組件技術(shù),諸如Java或者COM上,以便有效重復(fù)利用現(xiàn)有代碼。
· 易于學(xué)習(xí)和使用。技術(shù)門檻很低,可以輕松找到大量的使用者。
· 動(dòng)態(tài)代碼。腳本語言能夠被即時(shí)生成和執(zhí)行,這在某些應(yīng)用程序中是非常必要和有用的高級(jí)特性(比如說,JavaScript中的動(dòng)態(tài)類型)。
當(dāng)然,Java腳本語言也存在著一些缺點(diǎn):
· 凡事沒有十全十美。它假定存在著一個(gè)“現(xiàn)實(shí)”的編程語言,比如說,找到內(nèi)建在腳本語言中的數(shù)據(jù)庫驅(qū)動(dòng)器是件非常困難的事情。
· 對(duì)于軟件工程和代碼結(jié)構(gòu)領(lǐng)域的熟練開發(fā)者來說,這不太有利。比如說面向?qū)ο蠛突诮M件的開發(fā)環(huán)境。
· 它們通常都不具有“一般性”,而是為某種特定的應(yīng)用程序所產(chǎn)生,比如說PHP和互聯(lián)網(wǎng)。
“盡管如此,腳本語言可以加速軟件開發(fā)的進(jìn)程,并且將其擴(kuò)展到一個(gè)巨大的領(lǐng)域。但是必須要注意的是選擇特定的應(yīng)用程序,比如說動(dòng)態(tài)頁面或者完成一個(gè)‘真實(shí)’的編程語言(如對(duì)于Java而言就是Jython)?!盉alasubramanian如是說。
第三方實(shí)用程序
通過基本框架幫助網(wǎng)格腳本
IBM的 Bean Scripting Framework的應(yīng)用程序使得將 Tcl、Python、Perl和其他腳本語言嵌入Java應(yīng)用程序相當(dāng)簡單。Sun、Borland、BEA和其他廠商也提供類似應(yīng)用程序。但是熟練的Java開發(fā)者,比如Mentro Graphics公司的David Kearns指出,支持一個(gè)腳本語言會(huì)有時(shí)間和費(fèi)用上的風(fēng)險(xiǎn),更不要說支持六個(gè)這樣的語言了。
在最近《Java World》的一篇文章中,Kearns描述了在Java應(yīng)用程序中支持腳本會(huì)有的潛在風(fēng)險(xiǎn)。
“Jython具有最快的腳本解釋能力,同時(shí)具有強(qiáng)大的編程特性?!彼f,“我最關(guān)注的其實(shí)是Jython的控制流語法,對(duì)你來說也許重要,也許不重要。因?yàn)橛行碌念I(lǐng)域要涵蓋,為Jython編寫腳本或許比JavaScript和BeanShell需要更長的學(xué)習(xí)周期。如果需要用Python編寫高級(jí)應(yīng)用的腳本,我推薦去買本書。Python是一個(gè)很流行的編程語言,所以書店中會(huì)有大量的書籍可供選購?!?br>
其他Java腳本語言
這里簡單介紹一些其他被廣泛使用的、與Java相關(guān)的腳本語言。
· Beanshell。Beanshell是用Java寫成的,一個(gè)小型的、免費(fèi)的、可以下載的、嵌入式的Java源代碼解釋器,具有對(duì)象腳本語言特性。BeanShell執(zhí)行標(biāo)準(zhǔn)Java語句和表達(dá)式,另外包括一些腳本命令和語法。它將腳本化對(duì)象看作簡單閉包方法(simple method closure)來支持,就如同在Perl和JavaScript中的一樣。
可以將BeanShell交互地用于Java試驗(yàn)和調(diào)試,或者也可以將其當(dāng)作簡單的腳本引擎以用于你的應(yīng)用程序。簡言之,BeanShell是一個(gè)動(dòng)態(tài)的解釋型Java,加上了一些有用的特性和功能。還有另外一種描述BeanShell的方式:在很多方面,BeanShell之于Java就像Tcl/TK之于C。BeanShell是嵌入式的——你可以從Java應(yīng)用程序中調(diào)用BeanShell,以便實(shí)時(shí)、動(dòng)態(tài)地執(zhí)行Java代碼,或者為應(yīng)用程序提供擴(kuò)展的腳本能力。當(dāng)然,也可以在BeanShell中調(diào)用Java應(yīng)用程序和對(duì)象,動(dòng)態(tài)地與Java對(duì)象和API協(xié)同工作。既然BeanShell是用Java寫成,并且在應(yīng)用程序中的某處運(yùn)行,那么就可以隨意傳送參數(shù)到腳本中的“實(shí)時(shí)”對(duì)象,并且將結(jié)果作為參數(shù)返回。
它具有以下的一些特點(diǎn):使用Java反射API以提供Java語句和表達(dá)式的實(shí)時(shí)解釋執(zhí)行;可以透明地訪問任何Java對(duì)象和API;可以在命令行模式、控制臺(tái)模式、小程序模式和遠(yuǎn)程線程服務(wù)器模式等四種模式下面運(yùn)行;與在應(yīng)用程序中一樣,可以在小程序中(Applet)正常運(yùn)行(無需編譯器或者類裝載器); 解釋器非常精簡——jar文件大小為175k(如果去掉某些實(shí)用程序,那么就只剩下135k);純Java寫成,并且是免費(fèi)的!
· Jess。Jess是完全用Java寫成的規(guī)則引擎和腳本環(huán)境。Jess的產(chǎn)生是受到CLIPS專家系統(tǒng)的啟發(fā),但是其本身正逐漸成長為一個(gè)完備的、獨(dú)特的、動(dòng)態(tài)環(huán)境。使用Jess,你可以構(gòu)建Java小應(yīng)用程序,這些程序具有根據(jù)你以規(guī)則聲明的形式所提供的知識(shí)來“推理”的能力。
Jess非常小巧、靈活,并且是已知規(guī)則引擎中最快的。核心Jess語言與CLIPS依然兼容,許多Jess腳本也是有效的CLIPS腳本。與CLIPS一樣,Jess使用Rete運(yùn)算法則來處理規(guī)則。Rete是一個(gè)非常高效的算法,用于解決復(fù)雜、艱深的多對(duì)多匹配問題。在CLIPS的基礎(chǔ)上,Jess添加了許多特性:后向鏈表、運(yùn)行內(nèi)存查詢以及操作和直接推理Java對(duì)象的能力。Jess同時(shí)也是一個(gè)強(qiáng)有力的Java腳本環(huán)境。通過它你能夠創(chuàng)建Java對(duì)象、調(diào)用Java方法而無需編譯任何Java代碼。
Jess可以被授權(quán)用于商業(yè)應(yīng)用,可以被免費(fèi)用于學(xué)術(shù)研究。
· JudoScript。JudoScript是一種Java類型的腳本,具有一系列特性:HTTP客戶端和服務(wù)器端編程、文件系統(tǒng)和歸檔、XML和XSLT腳本、JDBC腳本以及HTML代碼優(yōu)化。它同時(shí)帶有以下功能:有監(jiān)視器的調(diào)度程序、sendmail、可運(yùn)行調(diào)試、Java GUI的創(chuàng)建、FTP、SSH和SCP、Windows注冊(cè)表等等。該軟件可被自由下載,并且包括源代碼在內(nèi)都是免費(fèi)的。
JudoScript是一種通用的、應(yīng)用廣泛的、Java腳本語言。JudoScript包括三個(gè)緊密聯(lián)系的部分:一種通用腳本語言;完備的Java腳本工具;支持特定領(lǐng)域的特性。
它由純Java設(shè)計(jì)和實(shí)現(xiàn)。它的設(shè)計(jì)包含了第三代和第四代語言的思想,不僅提供強(qiáng)大的編程支持,同時(shí)提供一種特殊的機(jī)制,被稱之為“WYSIWYG(所見即所得)”的編程方法。該機(jī)制如今已經(jīng)非常流行,它使得編程工具的使用更加方便、高效,質(zhì)量優(yōu)異。這是一種高層次的語言,被集成進(jìn)了一個(gè)健壯的、通用的Java腳本環(huán)境中。
JudoScript由LGPL(Lesser GNU Public License)發(fā)布,因此你可以隨意使用它以及它的代碼。當(dāng)用于商業(yè)目的或者其他目的時(shí),只要保留其最初的版權(quán)信息就可以。它會(huì)始終與最新的Java開發(fā)保持同步,并且與更多LGPL或者GPL開發(fā)源代碼Java工程繼承。原理很簡單:如果有什么是有用和有效的,那么JudoScript就力圖使得它更加容易使用,并且很樂意使得它們具有腳本能力。
· Rhino。Rhino是用純Java寫成的JavaScript的開放源代碼實(shí)現(xiàn)。它最常被用于嵌入Java應(yīng)用程序,以便為終端用戶提供腳本的能力。
相關(guān)鏈接
腳本語言的定義
當(dāng)談?wù)摰侥_本的時(shí)候,我們的意思是說更快、更簡便地去做某件事情。下面是有關(guān)腳本和腳本語言的定義:
· 腳本(從編程的角度)就是為了簡便、直觀、清楚和準(zhǔn)確地去完成某件事情。腳本是如此的神奇以至于任何熟悉編程知識(shí)的人都可以在見到這樣一大段代碼的同時(shí),不用絲毫猶豫和思考就可以理解程序代碼的意義。
· 腳本支持意味著極高抽象級(jí)別的語言結(jié)構(gòu)或者說是特定領(lǐng)域的語言。
· 腳本語言通常是通用編程語言,具有對(duì)一個(gè)或多個(gè)腳本支持的能力。他們通常是可以編輯和運(yùn)行,并且,作為可選項(xiàng),它們提供編譯工具,目的在于提高性能、安全性等。這些都是典型的應(yīng)用,以便將應(yīng)用程序和組件連接起來從而達(dá)到更加簡便、快速和高效地完成任務(wù)的目的。
下面就是一些關(guān)于腳本以及腳本定義的資料:
· 游戲腳本語言是最完美的例子。它們也許基于某種通用編程語言發(fā)展而來,但是他們具有很高的抽象性,因此,一系列的動(dòng)作可以被輕松地組合和嵌入以實(shí)現(xiàn)扭曲和旋轉(zhuǎn)。
· JudoScript是被廣泛應(yīng)用的腳本語言,用于操作系統(tǒng)級(jí)的腳本、JDBC腳本、XML和SGML腳本、ActiveX腳本等等。
· Unix Shells是一種專項(xiàng)應(yīng)用的腳本語言,用于操作系統(tǒng)級(jí)的腳本。
· C、C++、Java、Perl、Python、Jython、Beanshell、JavaScript、Visual Basic、 JudoScript都是通用的編程語言。
· Jython、Beanshell、JudoScript、Rhino是用于Java領(lǐng)域的腳本語言(任何優(yōu)秀的Java程序員都應(yīng)該意識(shí)到代碼中無需過多麻煩Java的好處)。
· Vusyak Basic(包括VBA)是用于COM/ActiveX領(lǐng)域的腳本語言。
· Prolog,不能確定它的分類……可能還有其他的分類可以適合(邏輯編程語言或者其他什么)。