表題の通りの勉強会に参加してきた。
今回も参加したときにはキャンセル待ちで、参加申し込みの段階で 50人待ちオーバー、2日前の時点で 45 人待ち、前日 26人待ちの状態でしたが、当日に参加できるようになりました。キャンセルしてくださった皆さんありがとうございます。
有志(僕)が togetter をまとめておりますので、当日のツイートはこちらを参照してください。
VM言語の動き方・動かし方 by 宮川 拓
基本的なプログラミング言語のコンパイル→実行までの概要と、JVM言語でのプログラム実行の話と、宮川さんが作っているKinkを題材にJVM言語の実際の作り方の3本立ての話。わかりやすい資料で丁寧に解説されており、プログラマーになりたいと思っている人や、初心者の方にもこの資料はおすすめしたい。各テーマの区切りで、「CPU/OSは完全に理解」「JVMはわかった」という常套句が入っており、奥の深さが感じられました。話の終わりに Kink の実行系は独自のインタプリターで処理しているため、速度が出ていないことを竹内関数のベンチマークで比較しており、改善点として JVM で処理できるようにする or Graal + Truffle に任せることで高速化できるのではないかとのことでした。
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう by 阪田 浩一
GraalVM の概要と Truffle Language Implementation Framework を使った独自言語の作り方および Polyglot からの呼び出し方の紹介です。まず最初に GraalVM とはなんぞやという話がありました。これは欧米の言語圏でも Graal と GraalVM とを混同している人が多いそうですが、
- Graal : JIT Compiler
- GraalVM : HotSpot + α (JVMCI(Compiler Interface の位置) + Graal を C2コンパイラーの代わりに使う)
- Truffle : 言語実行系用のフレームワーク
とのことです。独自言語を Graal で動かす際は、対象の言語から Truffle API の AST まで作り出せれば、あとは Truffle がよしなにやってくれるとのこと。と、簡単に書いていますが、 Truffle 入門用の SimpleLanguage がすでに難しいらしく、なかなか敷居の高さを感じさせます。また、 Truffle はドキュメントもあまり整備されておらず、わからないことがあればコードを読むしかないとのことでした。内容の説明は丁寧で、セッションが早めに終わったこともあり、質疑応答が活発に行われていました。
TruffleでPHPぽい言語を実装したら爆速だった by きしだ なおき
こちらは Truffle を使って実際に PHP っぽい言語を動かせるようにして、ベンチマークとしてフィボナッチ関数のパフォーマンスを比較した話。少し面白かったのは、 return
命令は例外に値をくるんで投げることで実現するとのことですが、例外を使うと実行速度が遅くなることが想定されるのに、実際は遅くなっていないため、どうも書いたように動いていないのではないかと推測されるとのことでした。ちなみに、図の縦軸がなにかよくわからず(かかった時間なのか、単位時間あたりに処理できた量なのか)、ちょっとよく理解できませんでした。
懇親会
懇親会の支払いが PayPal でなくなったことにより、数百年ぶりに懇親会に参加しました。きしださんに JavaScript を native 化する場合はどうするのか質問したところ、 JavaScript そのものをネイティブ化するのではなく、 Truffle AST を吐き出すJavaのバイトコード、Truffle (こいつはあくまで jar)を native 化することでネイティブ化する、あるいは JavaScript を Truffle AST に変換した状態の Java のバイトコードと Truffle(つまり jar) を native 化することでネイティブ化するということを理解できたので、僕も Truffle を完全にマスターしたと言える。