Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

プレゼン、ボランティアコーチします!

勉強会でスピーカーをやりたいけど、プレゼンが初めて、苦手という方に無償でコーチします!資料レビューや録画リハへアドバイスします。Twitter@jyukutyoまでメンションでもDMでも。

私はデブサミやJJUG CCCなど200人規模で登壇経験ありです。海外での登壇も短いながらあり。デブサミ2017では公募スピーカー1位でした!

JJUG CCC 2017 Fallでスピーカーをしました #jjug_ccc #ccc_c5

5回目のCCC登壇です!

www.slideshare.net

ソースコードはこちらです。

github.com

このブログ投稿で実装した四則演算のTruffleでの言語実装について、セッションという形で話しました。

jyukutyo.hatenablog.com

ASTインタプリタを利用したものは言語なのか?という質問には、私の知識では答えられません…ただTruffleRubyは言語実装ですし、広義にはそう言えそうです。

また、パフォーマンスチューニングに関しても質問をいただきましたが、Truffleでは基本的にGraal(JITコンパイラ)に任せるもののはずです。今までのたくさんの叡智が詰まったJVMJITコンパイラを利用できるところにTruffleのメリットがあるからです。

セッションの感想

緊張感があり、疲れました。聴講者を見るとオラクルの方やJCP ECメンバーの方、B社のGC好きな方がいて、あいまいなことや間違ったことを言ったら刺されるんじゃないかという緊張感がありました。もちろん他の方もディープなことが好きで参加されているでしょうし、ライト層の僕は登壇自体ではなくそういう側面の緊張感がありました。

いつもどおり?前説もしました。セッション前から自分の部屋の雰囲気作りをすることも大切だと考えています。

想定通り45分ですべての内容を話せましたし、わかりやすかったと何人かの方が言ってくださったので、準備としては自分でも満足です。でも、今回が今までのCCCで一番聴講者が少なかったのです…自分の興味、話したいこととCCCのターゲットが合わなくなってきているのかな、という心配が出てきました。

Graalをビルドした

Graalはこちらからダウンロードできるのですが、

Oracle Labs GraalVM: Download

ソースを読むついでにビルドしました。

Graalとmxが要ります。Graalはバージョン0.29を使います。

$ git clone https://github.com/graalvm/graal.git
$ cd ../graal
$ git checkout vm-enterprise-0.29

$ git clone https://github.com/graalvm/mx.git
$ cd mx
$ export PATH=`pwd`:$PATH
$ mx -v      
Welcome to Mx version 5.130.1

MxはMavenみたいなものらしいです。込み入ったユースケースで使うので、アプリケーション開発では使わないらしいです。

GraalのコンパイラJIT)をビルドします。JDKは9にしました。

$ cd graal/compiler

$ export JAVA_HOME=`/usr/libexec/java_home -v 9`
$ mx build
...
Archiving TRUFFLE_TEST... [dependency com.oracle.truffle.api.test updated]

mx vmして確認します。

$ mx vm
使用方法: java [options] <mainclass> [args...]
           (クラスを実行する場合)
   または  java [options] -jar <jarfile> [args...]
           (jarファイルを実行する場合)
   または  java [options] -m <module>[/<mainclass>] [args...]
       java [options] --module <module>[/<mainclass>] [args...]
           (モジュールのメイン・クラスを実行する場合)
...

ソースをIDEで読めるようにするには、mx ideinitです。実行するとEclipseIntelliJ IDEA、NetBeansの設定を全部出力されます。.classpathやらproject.xmlやら.imlファイル全部出ました。

$ mx ideinit
created /Users/jyukutyo/code/graal/truffle/mxbuild/mx.truffle/eclipse-project-settings
...
IntelliJでの問題

SDKの値が1.9になっていて、モジュールすべてでエラーになります。9に変更します。

IGV

IGVでGraalのデータ構造を可視化できます。可視化自体は今度試します。

$ mx igv
Downloading BATIK from ['https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/batik-all-1.7.jar']
Downloading https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/batik-all-1.7.jar to /Users/koichi.sakata/.mx/cache/BATIK_122b87ca88e41a415cf8b523fd3d03b4325134a3.jar
 8361163 bytes (100%)
Please select a JDK for running IGV: (version >= 1.8 and < 1.8.0u20 or >= 1.8.0u40)
[1] Java 1.8.0_144 (1.8) from /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
[2] Java 1.7.0_80 (1.7) from /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
[3] <other>

こんな感じでJDKの選択します。なぜか[3]を選んでJDK 9のパスを入力してもダメでした。8にしました。

ユニットテスト実行

ユニットテストがあります。実行します。

$ mx unittest -Dgraal.Dump BC_athrow0
...
MxJUnitCore
JUnit version 4.12
.Dumping debug output in /Users/jyukutyo/code/graal/compiler/dumps/1510811588804
.
Time: 1.738

OK (2 tests)

これでソースを触る準備ができました。