[新闻] IBM/Eclipse OMR的编译器部分也已开源,以及IBM即将开源J9 VM

OMR的组件的大类别中里最后一个重量级类别也终于来了:源自J9的JIT编译器“Testarossa”(J9/TR)的编译器架构:

Initial contribution of compiler technology consisting of: · eclipse/omr@03874a4 · GitHub

Commit message:

Initial contribution of compiler technology consisting of:

  • high-level optimization technology featuring classic compiler optimizations, loop optimizations, control and data flow analyses, and support data structures
  • code generation technology with deep platform exploitation for x86 (i386 and x86-64), Power, System Z, and ARM (32-bit)
  • a robust, tree-based intermediate representation (or IL) and support code for producing IL from different method representations
  • expressive tracing and logging infrastructure for problem determination
  • JitBuilder technology to simplify the effort to integrate a JIT compiler into an existing language interpreter
  • a framework for constructing language-agnostic unit tests for compiler technology

OMR编译器部分的说明:

omr/README.md at master · eclipse/omr · GitHub

后续会在OMR里开源的都是各个大类别(GC、compiler、threading、diagnostic等)下的一些具体功能,而没有别的大类别还没开出来了。

Exciting!

可能会有不熟悉Testarossa的同学说:这个编译器开源出来跟我有毛关系,这不是个JVM里的JIT编译器么?

呵呵,它可不只是个JIT编译器。其实Kevin Stoodley大大最初提出Testarossa项目的时候,是想要成为IBM XL编译器套件(C/C++/Fortran等)的一个中间优化器(大概是想替代TPO?)。但是生不逢时,一开始没能被XL编译器青睐,却正好碰上IBM开始做J9 JVM,就摇身一变成为了J9的御用JIT编译器。后来它还被用在了许多不同的场景中,例如编译C/C++的Static Testarossa(sTR,曾在Linux/z上部署过)、用于优化legacy COBOL代码性能的二进制翻译/优化器,等等。这是个相当通用的编译器架构,就算对OMR的其它组件不感兴趣,Testarossa也可以单独拿出来用的。所以如果想自己写个编译器来玩,后端的选择除了LLVM、libgccjit、MicroVMQBE之类之外,这OMR TR也是个新选择。

不过当然,Testarossa的代码还是可以看出它最初的正式用途是作为J9 VM配套的编译器的这个历史。例如说,请看OMR Testarossa IL默认的opcode:omr/OMRILOpCodesEnum.hpp at master · eclipse/omr · GitHub,拿它跟JVM的字节码来对比一下,看看名字是不是非常的相似——OMR TR IL的opcode就像是JVM字节码的扩展版一样,在功能相同的地方名字也是一样的。

对OMR TR的IR设计感兴趣的同学,请跳传送门:[OMR/TR] Testarossa的IL设计 - 编程语言与高级语言虚拟机杂谈(仮) - 知乎专栏

说来,把一个老项目开源还真是改进代码质量 / 代码风格的一个好的动力来源。Testarossa的代码还没重构完,但组织决定让它尽快先放出来给大家瞄一眼。代码里使用 TR:: 命名空间的类型是已经被重构到的代码,而在全局命名空间但有 TR_ 前缀的类型则是尚未被重构(至少尚未被重命名)的代码。IBM还在继续重构中,尽量把Testarossa的代码风格从以前基本上就是C with Classes的风格改进为比较现代的C++风格;它自己带的一些数据结构库也将尽量被替换为STL的对应物。

==================================================

另外,IBM已经计划好在今年接下来的JavaOne上宣布IBM J9 VM的开源。看来OMR的开源还真是J9开源的一个敲门砖。以前我问Mark Stoodley说如果有人基于OMR写了个JVM的话会怎样,他还说:那很好啊,IBM不会介意的,如果有好想法的话可能还会取回到J9里去用;这不,J9自己干脆也决定要开源了。

今年的JVMLS上我问Mark说显然有不少在J9里已有的功能在OMR里尚未开放,例如说J9/TR自身支持的dependency-based speculative optimization,这方面有怎样的计划。他提到确实有不少功能因为还没想好如何抽象出来给外界使用,所以还没从J9剥离出来放到OMR里。但是他们会很欢迎外界贡献者帮忙从J9中把功能打捞到OMR去 >_<

12 条评论