用JavaScript編寫一個Java虛擬機?談談譁衆取寵的BicaVM

今日目睹某網絡新聞,開篇明義便包含如下幾行文字

【程序員Artur Ventura,這位超級大牛,用JavaScript寫了一個java虛擬機BicaVM】


繼而再讀,驚見其中“超級大牛”、“神人”等溢美之詞不絕於耳,崇拜、神往之心溢於言表。彷彿BicaVM就是天上有地下無的創舉,彷彿Artur Ventura就是繼比爾蓋茨,喬布斯之後的第三位IT業領軍人。然而很可惜,小弟今天準備要“侮辱”一下這位“大牛”了。只因在小弟看來,這篇文章,乃至其中介紹的BicaVM,都如某女士對某御用文人的評價一樣“實無恥之尤,足令人作三日嘔”。什麼“自動化的沙盒”、“具有支持JNI接口,DOM模型等特點”,說起來果然天花亂墜,似乎有什麼高明玄妙。

其實歸根結底,BicaVM無非就由兩種東西所構成,一種叫炒作,而另一種,就叫做扯淡。


衆所周知,本來JS就是解釋性的語言,而BicaVM是什麼東西,是一個能夠讓JS運行字節碼(直接讀取class)的WEB版JVM。也就是說,他要用
自身還需瀏覽器進行解釋的JavaScript,再去“解釋”已編譯爲Class的Java Byte Code……上蒼啊!即便不討論性能問題,這也根本是“讓翻譯找翻譯去翻譯句子給你聽”式的繞口令了吧?別的不講,單就如此腦殘的行爲,還有人管這叫“大牛”?別“牛”了,不被評價爲“豬”,就算別人嘴下積德!

再看看BicaVM的類庫,既然實現目的是在瀏覽器中使用JVM,按理說應該是爲前端WEB開發搞的吧?可號稱已經模擬了“60% Byte Code”功能的BicaVM中,我卻連半個可視化組件也看不見(當然,可以調取JS指令構建出“窗體”,但這和Java有半毛錢關係嗎?直接寫不更快,本來語法就近似),半個網絡工具也找不到,唯一能找到的,就是一堆堆冗餘卻無用的類加載器與Java基礎數據類型的JS實現(N多對於JS來講重複的“輪子”……)

比如Java中的Long,在BicaVM中需要如此實現(部分源碼,太長無法顯示全,位於22KB的long.js中)。

圖1:



不知道各位都看見了什麼,我所見者,就僅僅是一個蠢貨爲了讓BicaVM中基本數據類型與標準Java保持一致,而強迫弱類型的JS去做冗長的強類型運算而已——凡有點JS開發經驗者,你們能相信在客戶端跑着如此海量的科學計算的後果嗎?能相信這是正常人類想出來的辦法嗎?(BicaVM的基本數據類型全是這樣“造”出來的,所以只要用,這些運算就沒完了)


可以說,BicaVM僅僅只是一個概念,一個看上去也不美的,JS仿“完整版Java”的概念(而且主要部分都沒實現),可以說,其中真正能起作用的東西,連半個也不存在。(另外,就連概念也不是他先想到的,下文有論及)

此外,不單這個項目毫無價值,下載BicaVM後我還愕然發現,該項目作者居然在BicaVM項目中要求使用Python運行服務…… 你,你玩Javaer呢?!

去看看他的webserver文件夾吧,可以說已經把BicaVM與Python綁死在一起了。這多像一個Java Byte Code被翻譯爲JavaScript後(其實就是翻譯String,然後解析爲JS),再由JS向Python服務器發送請求處理Java代碼的——“Python馬甲”啊!(PS:BicaVM所謂的JNI接口未來100%就是這樣,除了JS能執行的,一律讓Python服務器按照請求去訪問某接口,再把執行結果返回給客戶端)

借用香港江湖片的名詞,這簡直就是“小弟”Java向“話事人”JavaScript求援,再由“話事人”JavaScript找到“龍頭”Python求幫,最後由龍頭大哥Python親自出面幫Java小弟“擺平”問題的一系列標準動作。


額滴神啊,堂堂“編程兵器譜”排名第一位的Java,居然要向Python“搖尾乞憐”?!別的先不說,既然已經用JS解釋JVM了,你又何苦不直接用Java服務器運行你的演示程序呢?楞把Python做爲BicaVM運行的容器,你讓吾輩Java程序員情何以堪啊?!欺負我們搞Java的沒活人了嗎?!從來就有Jython存在的理由,也從來就沒有Pava存在的必要!

歸根結底,用JS跑執行JVM行不行?行。解釋字節碼行不行?也行,怎麼會不行?不過,還是等JavaScript自己先能編譯成機器碼後再說吧。

但上面所提及的,也無外是皮毛中的皮毛,真正讓小弟深惡痛絕的事情,還要從下面兩個項目講起。


JSVM(JavaScript Virtual Machine)項目


JSVM。路過的大家有誰聽說過這個項目沒有?我估計2008年以前學編程的朋友估計有的聽說過,有的沒聽說過,而2008年以後出來混的恐怕就鳳毛麟角了,小弟這裏也不強求。總之,這是一個由國人萬常華(wch3116)在2003年搞出來的,結構上仿照標準Java,原理上酷似於BicaVM的開源項目(第一版最像,JSVM2差點,當然,正確的語序應該是BicaVM酷似JSVM)。


PS:在iteye上有個關於該項目討論的“影子”殘留,不清楚來龍去脈的可以先預習:


http://www.iteye.com/topic/7252


一句話,對比BicaVM而言,JSVM的實用性比BicaVM強太多了。

要知道,JS的語法結構本就與Java非常近似,如果按照JSVM的思路整合到一個統一的OOP框架下,那麼結合當今的HTML5風潮,實在是大有可爲。可惜這麼好的東西,不但沒多少人幫助發展,更可恨當年還有幾個拉便宜手說便宜話的假牛出來搗亂,結果鬧得該項目“無疾而終”!實在是可惜,可恨,可怒,可惱,可嘆!

而讓我恨得牙根發癢的,是我在某網站的BicaVM文章評論中,又看到了這樣的說法:


圖2:



國內沒人才?我就呸!倒退十年國內就有這樣的人才,我敢拿人頭保證,絕對是先有JSVM後有BicaVM(雖然兩者實現上有差別,但原理並無二致,都是結構上的JS仿Java,而且JSVM直接使用原生JS(當然,也有自己的JSC語法甚至允許自由擴展),不模擬“完整版Java”絕對效率更高),可結果呢?只因JSVM作者是某國人,空有人才,卻很難遇人識才,最後更被歸結到“不是人才”的那羣裏去了。小弟不知道JSVM的作者還在不在人世(應該還在吧-_-),如果您恰巧看到本文,小弟這裏順便跟您說一聲“我佩服您,您在十年前就搞出來的東西,洋人十年後才做出來!才被某些國人誇!”


公道自在人心,大家有空時可以結合2004年的JSVM舊文,再結合當前的BicaVM,也比較一下國內對中西同性質,不同效率項目(明顯JSVM更快)的不同評價與討論的主要方向吧。


PS:個人始終喜歡JSVM第一版,也就是高仿Java結構的那版,後來的JSVM2或許因前版性能被某些閒人詬病,於是作者犧牲了太多Java特性而搞了JSVM2,改的已經不像Java類庫,更貼近JQuery之類,也因此失去了原有的優良特性,遺憾。

Avian項目

說完了國內的,小弟再來介紹介紹國外的“不知名”JVM項目——Avian,這是一個非常精巧的JVM虛擬機項目。Avian最大的特徵就在於,可以構建不足1MB的完整Java應用,且無需額外的JRE。


小弟粗略歸納了一下Avian的要素,總結爲如下四點。

1、avian基於OpenJDK構建,代碼結構上與標準Java如出一轍,沒有絲毫例外存在。

2、avian默認不支持AWT/Swing,SWT等圖形庫(但可以引入,比如作者的示例中就引入了SWT庫),僅有io、lang、net、nio、security、text、util這七個標準Java工具包被預裝(近似於JavaME中CVM的實現)。因此代碼量相當之小。七個包的Java源碼累積僅400多KB,壓縮後簡直就是“微縮景觀”。某種意義上說,用avian寫Java病毒也沒問題(不用圖形庫,連微型虛擬機帶class壓縮後超過不過300KB)。

3、avian微型JVM默認支持Linux、Mac OS、Windows三種環境的運行及編譯。不過因爲開源,從技術角度看移植到Android、iPhone等平臺未嘗不可(如果微軟WP向普通用戶開放C/C++的支持,那麼也一樣)。

4、當然,avian目前的缺點也有不少,比如本身沒有提供自執行的啓動方式,僅能通過C/C++代碼調用main函數啓動,需要用戶對C/C++有初步瞭解,純Java技術員難以上手。執行速度雖然並不比OpenJDK遜色(因爲主體就是從中提取的,雖然作者替換了部分實現),但始終不同於標準JRE,有存在隱患之風險,在更多示例出現前,商業恐怕還難以讓人放心。

怎麼樣,這還算是好東西吧?但不是小弟說話張狂,我要不提Avian的名字,全中國Java程序員有一個算一個,知道這項目者,能“他XYZ的”超過1000人嗎?

如此實用的東西,在某國卻和JSVM一樣,極少有人理會,可洋人丟出來個垃圾,倒真有不少起鬨幫腔的。難怪海外會有一小撮人說:“某國人幹事,非得把世界上所有錯誤的方式都嘗試遍了,纔可能找到正確的那項選擇”。

——————————

我,真替某國的某些程序員感到悲哀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章