2014年4月29日 星期二

The future of JVM : JRuby


    晚公司邀請了JRuby的Contributor : Charles Oliver Nutter來談談JRuby,也談談未來JVM會的長相。JRuby的目的是讓原本只能活在JVM的Java Code,忽然可以跟世界外的語言有所互動,Ruby是其中之一,當然還有Python(Jython),為了要辦到這件事情有許多問題需要解決。

    他提到第一點,Bootstrap Time,他用了JVM可以微調的Flag,加上Pre-load JVM的技術(Drip/NailGun/還有一個忘了),讓執行時間跟跑原本的Ruby環境差不多(個人懷疑Runtim memory可能大上好幾倍)。

    第二點是Native Code,原本的世界裡,如果Java要呼叫Native的Code只能透過JNI(例如拿process ID),他本人是非常討厭JNI,除了寫起來吃力不討好之外,也提高的平台相依性(跟JAVA的初衷Write one, Run anywhere有所抵觸),他提到新的玩意叫做Java Native Runtime(JNR)也能辦到相同的事情,除了Interface比較簡潔外,也有龐大的community再幫你解決不同平台上所需要解決的Porting問題,其目的為把所有POSIX上支援的function都有一份Java對應的實作(不過目前還沒完全支援)。

    最後他提到JAVA 7之後support的invokedynamic指令,從bytecode等級支援新的語法來提升動態語言的效能。他也提到說每個Engineer都會想要創造自己的程式語言,但礙于並非對Compiler有所專精,而且可能要寫非常多底層的Code來Optimize performance,所以有一個新的架構可以滿足/解決我們的問題,它是Graal,概念有點像是C跟LLVM,而JAVA跟Graal,實際運作是所有的Java Code不會直接Compile成Bytecode,而是Graal Representation,然後再透過Graal的IR做最佳化之後直接Run再Native Code上面;有了Graal後再搭配Truffle,它能夠讓你自己撰寫IR去Optimize你的Code(當然也可以寫JAVA),如此一來,你就可以打造一個完全屬於你的語言了(但還是跑在JVM上面)

備註:本篇文章是根據昨晚聽完簡報後所撰寫,可能技術細節的描述有所錯誤,麻煩請多多指教。