hashiwa’s blog

技術的なメモを徒然と置いていきます。

GraalVMとTruffle

GraalVM

Graalは、Java Virtual Machine(JVM)用の新しいJITコンパイラです。そしてGraalVMとは、GraalコンパイラをもったJVMです。詳しくは、Oracle Labs GraalVM: Programming Languages and Runtimes Overviewを参照。

Graalは、Javaプログラミング言語以外にも、JavaScriptRubyなどのスクリプト言語JVM上で動かす際のJITコンパイラにもなるようです。

ここで、少し触ってみます。Oracle Labが公開しているバイナリをダウンロードします(私は GraalVM preview for Linux (v0.19), Development Kit をダウンロードしました)。ダウンロードするにはOTNアカウントを作る必要があると思います。

まずはJava

$ ./graalvm/bin/java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.71-b01-internal-jvmci-0.23, mixed mode)

$ cat A.java
class A {
  public static void main(String[] args) {
    System.out.println("Hello world!");
  }
}

$ ./graalvm/bin/java A
Hello world!

このバイナリはRubyとかも実行できます。

$ ./graalvm/bin/ruby -v
jruby 9.1.7.0-SNAPSHOT (2.3.1) 2016-12-07 00938d2 Java HotSpot(TM) 64-Bit Server VM 25.71-b01-internal-jvmci-0.23 on 1.8.0_111-b14 +jit [linux-x86_64]

$ cat A.rb
print "Hello world!\n"

$ ./graalvm/bin/ruby A.rb
Hello world!

Truffle

そして、以下のTruffleを使えば、オレオレプログラミング言語を作ってJVM上で動かすことができるらしいです。(んで、JITコンパイルも使える?)

GitHub - graalvm/truffle: The Truffle Language Implementation Framework.

以下がサンプル。これを参考にすれば言語作れるかも。

GitHub - graalvm/simplelanguage: A simple example language built using the Truffle API.

こうやって使える。

$ cat tests/HelloWorld.sl
function main() {  
  println("Hello World!");  
}


$ ./sl tests/HelloWorld.sl
== running on Graal Truffle Runtime
Hello World!

やってみたいけど、まだまだ調べが必要かな・・・