2/27 JJUGナイトセミナー「JVM言語を作ろう! GraalVMで遊ぼう!」に登壇しました

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(典型的な静的型付け言語)はまるで性質が異なるのですが、似たような感覚を持っていることが分かって、興趣がありました。たとえば、

  • 実装は一発ではうまく行かない。前回の反省を踏まえて処理系を作り直すと、違うところでつまづいてにっちもさっちもいかなくなる。
  • どこかのタイミングで、自分よりも処理系のほうが賢くなる。
  • ホスト環境の仕組みとのマッピングは難しい。マッピングレイヤがきれいに切れないと、早晩破綻して手に負えなくなる。