---
title: GraalVM 的多语言、Instrument 与沙箱
date: '2018-04-19 20:13:26'
draft: false
summary: GraalVM 真正有意思的地方，不只是一个 VM 跑多种语言，而是把多语言混合、统一 Instrument 和更强沙箱能力放到了一起。
slug: graalvm-polyglot-instrument-sandbox
syndication:
- platform: Weibo
  url: https://weibo.com/1648815335/4230612174493305
tags:
- graalvm
- jvm
- polyglot
topics:
- software-engineering
type: post
---

看到最近 `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 方案更有意思，因为它天然支持的语言范围更广。

<!-- WEIBO_MEDIA_START -->
## 原微博中的媒体

![](./weibo-4230612174493305-1.jpg)

![](./weibo-4230612174493305-2.jpg)

![](./weibo-4230612174493305-3.jpg)

![](./weibo-4230612174493305-4.jpg)
<!-- WEIBO_MEDIA_END -->
