強答一下。結(jié)論是GraalVM想成為一統(tǒng)天下的“最終”虛擬機。
大部分腳本語言或者有動態(tài)特效的語言都需要一個語言虛擬機運行,比如CPython,Lua,Erlang,Java,Ruby,R,JS,PHP,Perl,APL等等,但是這些語言的虛擬機水平,對,就是具體的實現(xiàn),差距很大,比如CPython的VM就不忍直視,JVM的HotSpotVM,C#的CLR和JS的v8卻是stateoftheart級別,那么能不能付出較小努力,用一個stateoftheart的虛擬機,來運行這些語言,讓它們享受該虛擬機的一些工匠特性,比如gc,鎖,jit等?
答案基本上是肯定的。首先,對于Java,Scala,Groovy這些本來就是JVM-based的語言,那沒有什么壓力,直接上JVM即可。對于CPython,R,Ruby,PHP乃至自己寫的一門新的語言,回顧一下我們的一般做法:首先解析源代碼到AST,然后寫一個AST解釋器->當(dāng)有些人用這個語言的時候,語言設(shè)計者可能繼續(xù)迭代,實現(xiàn)一個虛擬機,包括GC,運行時等,代碼執(zhí)行仍然是AST解釋器->用的人多了,繼續(xù)迭代,將AST轉(zhuǎn)換為字節(jié)碼,使用字節(jié)碼解釋器->用的人特別多,性能也很關(guān)鍵,如果這個語言社區(qū)有足夠資金和人力,那么可以寫JIT編譯器,提升GC性能等,大部分語言都到不了這一步。我們希望一門語言在AST解釋器節(jié)點性能就足夠好了,不用花那么多精力和財力做性能優(yōu)化等,這就是Truffle語言框架的動機,Truffle是一個Java框架,自然跑在JVM上,在這個框架下,用戶只需要實現(xiàn)具體語言的AST解釋器,付出的努力比較小,性能也足夠好。