logo头像

From zero to HERO

新的虚拟机平台GraalVM,编程语言可以无缝沟通了

1. 前言

在许多年前,一群不需要产出的IT学术研究人员搞了一个有趣的实验性项目叫MaxineVM,它是一个一个用Java实现的元循环Java虚拟机。其实我也不知道这么高端的名字是啥意思,反正是一种研究性质的看起来很牛X很前沿的虚拟机,而Graal就是其中名不见经传的编译器。 Oracle投入了不少的钱和时间鼓捣了这个项目,其中一些研究成果看起来不错,他们就孵化了一个叫GraalVM的产品,看看有没有商业价值,到现在为止差不多三年了。随着编程技术的发展其中的一些理念也顺应了形势,开始有点眉目了。

2. “全能”的GraalVM

GraalVM 是一个跨语言的通用虚拟机,不仅支持了 Java、Scala、Groovy、Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其他像 JavaScript、Ruby、Rust、Python 和 R 语言等。它消除了编程语言之间的隔离。

GraalVM system diagram

这些语言可以通过GraalVM平台进行直接互操作,并在同一内存中传递数据。

在目前的GraalVM 21.0 引入了一个新的 JVM 实现 Java on Truffle,这是用Java编写的虚拟机。这些不同的编程语言被Truffle(一种语言实现框架)进行统一的语法解释,交给Graal的JIT编译并交给运行时执行,从运行时的角度上来看这些语言没有任何区别的。

还有一些特性超出了我的认知能力,你可以到官方博客去了解。

你甚至可以使用GraalVM将Java编译成可执行程序。

3. 发行版本与环境

目前GraalVM分为开源的CE版本和收费的EE版本,它们分别基于OpenJDK和OracleJDK的8和11版本,可以运行在Linux、 Linux on ARM 64bit、MacOS和Windows中。我在视频号的相关视频中也进行了Windows下的安装演示,感觉跑起来挺简单的,你可以尝试一下。

4. GraalVM能干什么

GraalVM的野心还是有的。

  • 让Java程序运行的更快更具有扩展性。
  • 多语言混合编程
  • 在JVM上运行原生语言
  • 开发云原生应用
  • 微服务运行时平台
  • 创建自己的语言
  • FaaS

5. 那么代价是什么

凡事有利有弊,对于多语言、跨平台、云原生的支持也需要更多的兼容性和编译解释的优化。目前在各个语言的性能基准上还不能统一,语言之间互操作的协议还需要完善,甚至还要牺牲特定编程语言的一些特性,比如Java Native Image目前无法使用动态加载,另外GraalVM也还没有经过大规模的生产实践,还有一个问题就是这是Oracle的产品🤪。但是GraalVM一直在进步,在五年之内GraalVM很有可能进入面试题豪华套餐。我是:码农小胖哥 多多关注分享更多有用的编程资讯。

评论系统未开启,无法评论!