2月27日(水)に開催したJJUGナイトセミナー「JVM言語を作ろう! GraalVMで遊ぼう!」に登壇しました。セミナーの様子についてはmike-neckさんの記事をご参考ください。無茶苦茶に楽しいイベントでした。
私が話したスライドは下記です。
だいたい次のような考えで内容を決めて行きました。
- Graal / Truffleの話をいきなり聞いてもなんのこっちゃ分からなかろう。
- Kink言語処理系の開発者として、Graal / Truffleに期待すること、という切り口なら導入しやすいのではないか。
- そのためには、KinkがJVMとのマッピングに苦労するところ(オブジェクトシステム、限定継続)を話さなきゃならない。
- つまり、JVMのオブジェクトシステムと呼び出しの実装も話題にのせる。
- GraalはJITなので、JVMのそれら抽象が、どのような低レベルの構成物に還元されるのか見る必要がある。
- ということは、機械語プログラムの実行と、バイトコードインタプリタによる実行を対比することになる。
- バイトコードインタプリタはCPUをシミュレートしているんだ、という話をするには当然CPUの構成の話も要る。
- そもそもバイトコードインタプリタのような評価器と、コンパイラの関係ってどうなの、というところについてありがちな誤解を避けねば。
これだけの分量を50分で話すのは本来無茶なのですが、そこは気合と根性で、息継ぎせずまくしたてることで乗り切りました。
私が聴きたかったGraal/Truffleの話は、じゅくちょーさんときしださんからお話いただきました。
TruffleがASTをGraalに引き渡す際、もともとのコード、アノテーションプロセッシング後のコードがどのような変換を受けるのか、というところで追いつけなくなってしまいます。SimpleLanguage処理系の実装と動きを追いかけるのがいいのかな。
懇親会では @noko_k さんから、Karaffe言語処理系の実装についてお聞きしました。Kink(典型的な動的言語)とKaraffe(典型的な静的型付け言語)はまるで性質が異なるのですが、似たような感覚を持っていることが分かって、興趣がありました。たとえば、
- 実装は一発ではうまく行かない。前回の反省を踏まえて処理系を作り直すと、違うところでつまづいてにっちもさっちもいかなくなる。
- どこかのタイミングで、自分よりも処理系のほうが賢くなる。
- ホスト環境の仕組みとのマッピングは難しい。マッピングレイヤがきれいに切れないと、早晩破綻して手に負えなくなる。