Post
GraalVM 的多语言、Instrument 与沙箱
GraalVM 真正有意思的地方,不只是一个 VM 跑多种语言,而是把多语言混合、统一 Instrument 和更强沙箱能力放到了一起。
看到最近 GraalVM 发布了 1.0 版本。
GraalVM 试图打造一个工具,实现论文 One VM to Rule Them All 里的目标,用一个 VM 来运行所有语言。当前支持 Java 系语言,比如 Scala、Kotlin,也支持 JavaScript、Ruby、Python、R,以及基于 LLVM 的语言,比如 C/C++、Swift 等,并且性能也很好。
这种东西有什么用?
- 用来做多语言混合(Polyglot)编写。比如用 Java 混合 JavaScript,或者 JavaScript 混合 R,哪个语言更顺手就用哪个,不用总是围绕“最好的语言”争论。
- 用来做各种 Instrument 工具。很多 APM、性能分析、追踪工具,如果能站在统一运行时上做无侵入注入,就很有想象空间。开发工具里的代码覆盖率、运行时分析之类的能力,也更容易统一。
- 用来实现自定义语言。它本质上也提供了一个“造语言的平台”,而且新语言可以比较容易复用已有语言的运行库和生态。
- 用来做编程语言沙箱。网络、主机、线程、本地文件系统这些边界都更容易统一隔离。再配合 Instrument,还可以做内存分配和执行指令的精确追踪。
如果把这个思路放到区块链智能合约场景里看,我会觉得它在某些方面甚至比 EOS 当时选择的 Wasm 方案更有意思,因为它天然支持的语言范围更广。
原微博中的媒体



