用JavaScript編寫Java虛擬機?談?wù)剣W眾取寵的BicaVM
◆ 今日目睹某網(wǎng)絡(luò)新聞,開篇明義便包含如下幾行文字:
【程序員Artur Ventura,這位超級大牛,用JavaScript寫了一個java虛擬機BicaVM】
繼而再讀,驚見其中“超級大牛”、“神人”等溢美之詞不絕于耳,崇拜、神往之心溢于言表。仿佛B(yǎng)icaVM就是天上有地下無的創(chuàng)舉,仿佛Artur Ventura就是繼比爾蓋茨,喬布斯之后的第三位IT業(yè)領(lǐng)軍人。然而很可惜,小弟今天準備要“侮辱”一下這位“大牛”了。只因在小弟看來,這篇文章,乃至其中介紹的BicaVM,都如某女士對某御用文人的評價一樣“實無恥之尤,足令人作三日嘔”。什么“自動化的沙盒”、“具有支持JNI接口,DOM模型等特點”,說起來果然天花亂墜,似乎有什么高明玄妙。
◆ 其實歸根結(jié)底,BicaVM無非就由兩種東西所構(gòu)成,一種,叫炒作,而另一種,就叫做扯淡。
眾所周知,本來JS就是解釋性的語言,而BicaVM是什么東西,是一個能夠讓JS運行字節(jié)碼(直接讀取class)的WEB版JVM。也就是說,他要用自身還需瀏覽器進行解釋的JavaScript,再去“解釋”已編譯為Class的Java Byte Code……上蒼??!即便不討論性能問題,這也根本是“讓翻譯找翻譯去翻譯句子給你聽”式的繞口令了吧?別的不講,單就如此腦殘的行為,還有人管這叫“大牛”?別“牛”了,不被評價為“豬”,就算別人嘴下積德!
再看看BicaVM的類庫,既然實現(xiàn)目的是在瀏覽器中使用JVM,按理說應(yīng)該是為前端WEB開發(fā)搞的吧?可號稱已經(jīng)模擬了“60% Byte Code”功能的BicaVM中,我卻連半個可視化組件也看不見(當(dāng)然,可以調(diào)取JS指令構(gòu)建出“窗體”,但這和Java有半毛錢關(guān)系嗎?直接寫不更快,本來語法就近似),半個網(wǎng)絡(luò)工具也找不到,唯一能找到的,就是一堆堆冗余卻無用的類加載器與Java基礎(chǔ)數(shù)據(jù)類型的JS實現(xiàn)(N多對于JS來講重復(fù)的“輪子”……)
比如Java中的Long,在BicaVM中需要如此實現(xiàn)(部分源碼,太長無法顯示全,位于22KB的long.js中)。
圖1:
不知道各位都看見了什么,我所見者,就僅僅是一個蠢貨為了讓BicaVM中基本數(shù)據(jù)類型與標(biāo)準Java保持一致,而強迫弱類型的JS去做冗長的強類型運算而已——凡有點JS開發(fā)經(jīng)驗者,你們能相信在客戶端跑著如此海量的科學(xué)計算的后果嗎?能相信這是正常人類想出來的辦法嗎?(BicaVM的基本數(shù)據(jù)類型全是這樣“造”出來的,所以只要用,這些運算就沒完了)
可以說,BicaVM僅僅只是一個概念,一個看上去也不美的,JS仿“完整版Java”的概念(而且主要部分都沒實現(xiàn)),可以說,其中真正能起作用的東西,連半個也不存在。(另外,就連概念也不是他先想到的,下文有論及)
此外,不單這個項目毫無價值,下載BicaVM后我還愕然發(fā)現(xiàn),該項目作者居然在BicaVM項目中要求使用Python運行服務(wù)…… 你,你玩Javaer呢?!
去看看他的webserver文件夾吧,可以說已經(jīng)把BicaVM與Python綁死在一起了。這多像一個Java Byte Code被翻譯為JavaScript后(其實就是翻譯String,然后解析為JS),再由JS向Python服務(wù)器發(fā)送請求處理Java代碼的——“Python馬甲”?。。≒S:BicaVM所謂的JNI接口未來100%就是這樣,除了JS能執(zhí)行的,一律讓Python服務(wù)器按照請求去訪問某接口,再把執(zhí)行結(jié)果返回給客戶端)
借用香港江湖片的名詞,這簡直就是“小弟”Java向“話事人”JavaScript求援,再由“話事人”JavaScript找到“龍頭”Python求幫,***由龍頭大哥Python親自出面幫Java小弟“擺平”問題的一系列標(biāo)準動作。
額滴神啊,堂堂“編程兵器譜”***位的Java,居然要向Python“搖尾乞憐”?!別的先不說,既然已經(jīng)用JS解釋JVM了,你又何苦不直接用Java服務(wù)器運行你的演示程序呢?楞把Python做為BicaVM運行的容器,你讓吾輩Java程序員情何以堪???!欺負我們搞Java的沒活人了嗎?!從來就有Jython存在的理由,也從來就沒有Pava存在的必要!
歸根結(jié)底,用JS跑執(zhí)行JVM行不行?行。解釋字節(jié)碼行不行?也行,怎么會不行?不過,還是等JavaScript自己先能編譯成機器碼后再說吧。
但上面所提及的,也無外是皮毛中的皮毛,真正讓小弟深惡痛絕的事情,還要從下面兩個項目講起。
◆ JSVM(JavaScript Virtual Machine)項目
JSVM。路過的大家有誰聽說過這個項目沒有?我估計2008年以前學(xué)編程的朋友估計有的聽說過,有的沒聽說過,而2008年以后出來混的恐怕就鳳毛麟角了,小弟這里也不強求??傊?,這是一個由國人萬常華(wch3116)在2003年搞出來的,結(jié)構(gòu)上仿照標(biāo)準Java,原理上酷似于BicaVM的開源項目(***版最像,JSVM2差點,當(dāng)然,正確的語序應(yīng)該是BicaVM酷似JSVM)。
PS:在iteye上有個關(guān)于該項目討論的“影子”殘留,不清楚來龍去脈的可以先預(yù)習(xí):
http://www.iteye.com/topic/7252
一句話,對比BicaVM而言,JSVM的實用性比BicaVM強太多了。
要知道,JS的語法結(jié)構(gòu)本就與Java非常近似,如果按照JSVM的思路整合到一個統(tǒng)一的OOP框架下,那么結(jié)合當(dāng)今的HTML5風(fēng)潮,實在是大有可為??上н@么好的東西,不但沒多少人幫助發(fā)展,更可恨當(dāng)年還有幾個拉便宜手說便宜話的假牛出來搗亂,結(jié)果鬧得該項目“無疾而終”!實在是可惜,可恨,可怒,可惱,可嘆!
而讓我恨得牙根發(fā)癢的,是我在某網(wǎng)站的BicaVM文章評論中,又看到了這樣的說法:
圖2:
國內(nèi)沒人才?我呸!倒退十年國內(nèi)就有這樣的人才,我敢拿人頭保證,絕對是先有JSVM后有BicaVM(雖然兩者實現(xiàn)上有差別,但原理并無二致,都是結(jié)構(gòu)上的JS仿Java,而且JSVM直接使用原生JS(當(dāng)然,也有自己的JSC語法甚至允許自由擴展),不模擬“完整版Java”絕對效率更高),可結(jié)果呢?只因JSVM作者是某國人,空有人才,卻很難遇人識才,***更被歸結(jié)到“不是人才”的那群里去了。小弟不知道JSVM的作者還在不在人世(應(yīng)該還在吧-_-),如果您恰巧看到本文,小弟這里順便跟您說一聲“我佩服您,您在十年前就搞出來的東西,洋人十年后才做出來!才被某國人夸!”
公道自在人心,大家有空時可以結(jié)合2004年的JSVM舊文,再結(jié)合當(dāng)前的BicaVM,也比較一下國內(nèi)對中西同性質(zhì),不同效率項目(明顯JSVM更快)的不同評價吧。
PS:個人始終喜歡JSVM***版,也就是高仿Java結(jié)構(gòu)的那版,后來的JSVM2或許因前版性能被某些閑人詬病,于是作者犧牲了太多Java特性而搞了JSVM2,改的已經(jīng)不像Java類庫,更貼近JQuery之類,也因此失去了原有的優(yōu)良特性,遺憾。
◆ Avian項目
說完了國內(nèi)的,小弟再來介紹介紹國外的“不知名”JVM項目——Avian,這是一個非常精巧的JVM虛擬機項目。Avian***的特征就在于,可以構(gòu)建不足1MB的完整Java應(yīng)用,且無需額外的JRE。
小弟粗略歸納了一下Avian的要素,總結(jié)為如下四點。
1、avian基于OpenJDK構(gòu)建,代碼結(jié)構(gòu)上與標(biāo)準Java如出一轍,沒有絲毫例外存在。
2、avian默認不支持AWT/Swing,SWT等圖形庫(但可以引入,比如作者的示例中就引入了SWT庫),僅有io、lang、net、nio、security、text、util這七個標(biāo)準Java工具包被預(yù)裝(近似于JavaME中CVM的實現(xiàn))。因此代碼量相當(dāng)之小。七個包的Java源碼累積僅400多KB,壓縮后簡直就是“微縮景觀”。某種意義上說,用avian寫Java病毒也沒問題(不用圖形庫,連微型虛擬機帶class壓縮后超過不過300KB)。
3、avian微型JVM默認支持Linux、Mac OS、Windows三種環(huán)境的運行及編譯。不過因為開源,從技術(shù)角度看移植到Android、iPhone等平臺未嘗不可(如果微軟WP向普通用戶開放C/C++的支持,那么也一樣)。
4、當(dāng)然,avian目前的缺點也有不少,比如本身沒有提供自執(zhí)行的啟動方式,僅能通過C/C++代碼調(diào)用main函數(shù)啟動,需要用戶對C/C++有初步了解,純Java技術(shù)員難以上手。執(zhí)行速度雖然并不比OpenJDK遜色(因為主體就是從中提取的,雖然作者替換了部分實現(xiàn)),但始終不同于標(biāo)準JRE,有存在隱患之風(fēng)險,在更多示例出現(xiàn)前,商業(yè)恐怕還難以讓人放心。
怎么樣,這還算是好東西吧?但不是小弟說話張狂,我要不提Avian的名字,全中國Java程序員有一個算一個,知道這項目者,能“他XYZ的”超過1000人嗎?
如此實用的東西,在某國卻和JSVM一樣,極少有人理會,可洋人丟出來個垃圾,倒真有不少起哄幫腔的。難怪海外會有一小撮人說:“某國人干事,非得把世界上所有錯誤的方式都嘗試遍了,才可能找到正確的那項選擇”。
——————————
真替某國的某些程序員感到悲哀。
原文鏈接:http://www.cnblogs.com/cping1982/archive/2011/11/23/BicaVM.html
【編輯推薦】