午夜咖啡午夜咖啡

jolestar 的文章与笔记。

Post

GraalVM 的多语言、Instrument 与沙箱

2018-04-19 20:13:26Post

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 等,并且性能也很好。

这种东西有什么用?

  1. 用来做多语言混合(Polyglot)编写。比如用 Java 混合 JavaScript,或者 JavaScript 混合 R,哪个语言更顺手就用哪个,不用总是围绕“最好的语言”争论。
  2. 用来做各种 Instrument 工具。很多 APM、性能分析、追踪工具,如果能站在统一运行时上做无侵入注入,就很有想象空间。开发工具里的代码覆盖率、运行时分析之类的能力,也更容易统一。
  3. 用来实现自定义语言。它本质上也提供了一个“造语言的平台”,而且新语言可以比较容易复用已有语言的运行库和生态。
  4. 用来做编程语言沙箱。网络、主机、线程、本地文件系统这些边界都更容易统一隔离。再配合 Instrument,还可以做内存分配和执行指令的精确追踪。

如果把这个思路放到区块链智能合约场景里看,我会觉得它在某些方面甚至比 EOS 当时选择的 Wasm 方案更有意思,因为它天然支持的语言范围更广。

原微博中的媒体