麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

選擇合適的java腳本語言

2019-11-18 13:41:03
字體:
來源:轉載
供稿:網友

  選擇合適的java腳本語言
--假如你正考慮在java應用中集成腳本解釋器,最難得是決定使用那種

摘要:腳本語言已經向java開發者證實了它的價值。它讓客戶實現應用功能的擴展和界面的個性化,從而程序的價值得以提升。另外,它們可以顯著的簡化程序開發者的設計任務,通過實現動態定義、裝載和評估。對于開發人員,集成一種或多種腳本語言的任務是簡單的,從越來越長的可選列表中選出一個確實困難的。本文描述了一些伴隨java應用中腳本語言支持的問題,并從不同角度比較了Groovy, JudoScript, Pnuts, JRuby, Jacl, Jython, Rhino和Beanshell,以期能幫助讀者作出正確的決定。

三年前,我在javaworld寫了一遍叫做“javascripting語言,那種是適合你的?”的文章。當我收集解釋器并進行比較時,我盡量選擇那些看起來滿足苛刻商務需求的。理想狀態下,我希望解釋器能夠方便的擴展應用的用戶接口,并且有易讀的腳本代碼,高可靠,快速,有好的支持和文檔,并且是完備的。在那個時候,我把列表限制到了Jacl,Jython,Rhion和BeanShell。

過去的三年中發生了很多變化。可選項不再是很少的幾個,不管是動態開發還是直接選擇,可選的腳本語言都有一打以上。可靠的選擇列表比三年前增多了,現在還包括了Groovy, JudoScript, Pnuts和BeanShell。我們還可以考慮不再這個列表中的其他解釋器,但這個列表中,已經足夠開發人員自己的所需了。

我預備標準化所有解釋器,看看Jacl, Jython, Rhion和BeanShell在2002年后性能有沒有提高,并看看Groovy, JudoScript, Jruby和Pnuts同它們比較起來會怎樣。我認為,看看不同腳本語言有什么獨特之處,有什么非凡的強項和弱點是很有意思的事情。

商務風險

在以前的文章里,我講述了一些聞名的優秀腳本解釋器的資料,并說明了結合腳本解釋器時你可能碰到的風險。本文中,我把這些內容簡化為一些要點,并根據我在寫那些文章之后的經驗進行了改進。Java腳本解釋器的優點是毋庸置疑的。使用腳本語言編碼比使用java簡單;腳步語言使程序的應用邏輯和用戶界面的推動(drive/驅動?)和擴展成為可能;腳本代碼可以違反java應用中類接口而運行,這是非常強大的功能。這樣可以輕易的編寫程序測試驅動(write test drivers against your PRogram),與編碼并編譯用于java類的單元測試相比,這是更加快速的。另外,假如用戶花時間使用腳本擴展你的應用,他們就作你的工具上進行了投資,這使得你在競爭中多了一件利器。

但是,當在應用中集成jiava腳本解釋器時,你必須面對一定的風險。兩個主要的風險是,解釋器可能成為孤兒,或者是當你把產品裝上后,你可能發現解釋器的致命缺陷。大多數解釋器是通過開源模型動態維護和更新的,在這種情況下,你可以向研究你所發現問題的專家尋求幫助,給解釋器打補丁,或者在未來版本中包含你需要的bug-fix(bug修理?)。這是一種安全的賭博,但并不能得到足夠保證。假如你正嚴厲的考慮采用某個特定的解釋器,請先看看它的開發站點,看看它的代碼的進化,看看上面的流言板,用戶的提問都有答案否。這可以幫助你了解代碼支持的實際情況。

自我保護的另一格措施是,對你預備采用的任腳本何解釋器進行完全測試。一些解釋器在發布時包含了一個單元測試集。在測試你的應用中集成的解釋器時,這些單元測試可以作為你的更大的測試集中的一部分。在測試解釋器和應用之間的集成時,可以剔出自己的工作(you have your work cut out for you),因為腳本解釋器有足夠的彈性,并向開發人員暴露了足夠的功能。你在早期向質量保證投入時間,而不是在應用已經成為產品,當用戶需要急切的bug修復時才考慮。

新的競爭者列表

假如你正在尋找一個腳本解釋器,你有很多選擇。一些解釋器支持已經存在的語言,比如Ruby, Python, javascript, Java和Tcl。另外一些解釋器,如JudoScript, Groovy和Pnuts,選擇了它們自己的類似java的語言語法。在比較不同的解釋器,需要進行的最大的選擇是,那種腳本語言的語法能很好的適合你的應用。像這種個人偏好發生作用的技術選擇,可能在不同的開發人員團隊引起激烈的爭論。也許本文能有助于解決一些爭論。

我收集比較了最近發布的八種不同的腳本解釋器。解釋器及其版本都在下表中列出。假如你對這些解釋器并不熟悉,我還給出了每種解釋器功能和開發活動的概要(a thumbnail sketch)。

腳本語言

版本號

簡短描述

Jacl

1.3.1

Tcl解釋器的java實現。假如你希望在腳本中使用工具包來創建用戶接口類,看看Swank工程中的包裹(wrap)java swing 工具的類集。Jacl已經存在較長時間了,并且還在持續改進。

Jython

2.1

Python解釋器的java實現。我注重到的一個問題是,已經有很長一段時間沒有看到這個解釋器的新版本了。但在Jython的網站上,說明了改變這種現狀的計劃,并且有基金支持。

Rhino

1.6.1

javascript解釋器的java實現。它還支持把腳本編譯成類文件。它的最新版本在幾個月前發布,并加入了xml支持。

JRuby

0.8

Ruby解釋器的java實現。它正在發展中,其測試版0.8表現良好。

BeanShell

2.0 beta 2

它是一個java源文件解釋器,正在持續的發展和加入新特性。2.0版本提供了完全的普通java源文件解釋支持。

Groovy

1.0 beta 9

Groovy是把Python和Ruby的特征加入java類似語法形成的,由很多令人興奮的特征。可以把腳本直接編譯成類文件,對不同的IDE,又很多Groovy插件可供選擇,JSR委員會正在制定Groovy的規范。

JudoScript

0.9

它有和javascript類似的編程語法,學習和使用更加輕易。在它的FAQ中提到了它的一個明確目標:“支持對象級,操作系統級和應用級的腳本”。我測試的0.9版運行良好。

Pnuts

1.1 beta 2

Pnuts有和java相似的編程語法,并保持持續更新。它可以把腳本直接編譯成java類文件。

第一個指標:性能

未來測試第一項指標,我為每個解釋器編寫了等價的腳本代碼,讓他們完成簡單的任務集并記錄它們執行腳本所花的時間。我的測試腳本主要關注基本操作,如循環,整數比較和大的一維、二維數組分配和初始化。用于各個解釋器的測試腳本和運行它們的java程序可以在原文資源部分下載。

在基準測試中最有用的信息是,解釋器完成簡單任務速度的apples-to-apples比較。假如你重點考慮吞吐量,基準數將十分重要。對每種腳本語言,我盡力編寫相識的測試代碼。測試使用Java1.4.2在東芝Tecra8100筆記本上運行,CPU為PIII700MHz,內存256MB。啟動JVM時使用了默認的堆尺寸。出于向你展示解釋器到底有多快還是多慢的愛好,我編寫了測試用例的java代碼,并在java1.4.2上運行了。測試集包括:

1到1,000,000的計數

1,000,000次整數相等比較

分配并初始化包含100,000個元素的數組

分配并初始化一個500*500的二維數組

在2002年后有提高么?

在告訴你哪個解釋器最快之前,我們先看看圖1,這個條狀圖列出了很多耗時任務的結果:1百萬次整數相等比較。對2002年文章中講述的4種腳本解釋器,我給出了在Java1.3.1JVM和Java1.4.2上運行所需的時間。非常有趣的是,測試Jython時用的是同一個版本的腳本解釋器,結果表明新版JVM上速度提升了25%。在加上我使用了和前一次測試完全相同的硬件,所以可以肯定JVM1.4.2減少了運行基礎測試所需的時間。現在看看Rhino,BeanShell和Jacl發生了什么:新版Rhino在1.4.2的JVM上比在1.3.1的JVM上運行的舊版本快樂86%,Jacl的這個數字是76%。可以看出,性能提高了很多。



四項任務的總時間

由于解釋器在速度方面都十分相似(至少對我的基準測試是這樣),我把各解釋器完成四項基準測試所耗的總時間算出來并在圖2中給出。



多變的標志

對這些簡單測試,Rhino,Pnuts和Jytho始終是最快的,緊跟在后面的時Groovy,然后是JudoScript,然后是其他的。這些性能參數對你是否有用,取決于你希望腳本語言做的事情。假如你的腳本函數包含大量的迭代,并且用戶要等待結果,你就需要關注速度最快的解釋器,或者你就該考慮用java實現高性能要求的算法,而不是腳本代碼。假如你的腳本只需要很少的重復操作,這些解釋器速度的差異就不是那么重要了,快速的硬件也會使問題變得不同。

還有一點需要指出的是,即使最快的解釋器,完成上面測試所用的時間也是同樣功能java代碼所用時間的大約40倍。假如速度是你最主要的問題,你必須清楚,最有意義的事情是用java代替腳本代碼實現要害算法。

一些腳本解釋器支持腳本代碼直接編譯成字節碼。我對這將會產生多大的性能差異非常好奇,所以我進行了另一項測試。我用Rhino腳本解釋器把基準測試腳本編譯成了字節碼,然后我把整個基準測試集用腳本和腳本產生的字節碼分別運行了10遍。令人驚異的是,與直接運行腳本相比,腳本碼編譯成字節碼再運行僅僅節省了10%的時間。我最初任務,JVM的魔咒占用了運行測試集的大部分時間,但進一步的檢查發現JVM魔咒本身只占測試集運行總時間的20%。簡單腳本代碼編譯成字節碼看起來會有積極的意義,但這并不一定是顯著提高性能的銀彈。也許在更長的或者,更加計算中心的腳本中,會看到不同的結果。

第二個標準:集成難度

第三個標準:許

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品国产一级毛片 | 久久精品黄 | 成年人国产视频 | 玖玖视频精品 | 亚洲欧美国产精品va在线观看 | 国产成人综合在线观看 | gril hd| 国产成人自拍小视频 | 亚洲欧美在线视频免费 | 人人舔人人射 | a免费视频| 国产免费视频在线 | 哪里可以看免费的av | 国产精品欧美久久久久一区二区 | 久久免费观看一级毛片 | 久久久久久久黄色片 | 亚洲第一色婷婷 | 末成年女av片一区二区 | 超碰97在线人人 | 免费人成年短视频在线观看网站 | 国产精品成人免费一区久久羞羞 | 国产精品视频二区不卡 | 欧美极品免费 | 91成人久久 | 亚洲精品a级 | 91 视频网站| 国产无限资源在线观看 | 日本中文不卡视频 | 天天看天天摸天天操 | 嫩草影院在线观看网站成人 | 亚洲一级成人 | 欧美精品久久久久久久久久 | 国产流白浆高潮在线观看 | 久久久久久免费 | av在线成人 | 麻豆国产网站 | 日本高清视频网站www | 91小视频在线观看免费版高清 | 久久福利小视频 | 国产1区2 | 亚洲无av |