Get It Explained
説明するってのは難しいなあと Podcast をしていて思う。今回の Graal/Truffle は周辺論文も読んでほぼ理解したつもりだったが、話してみるとわけわからんかんじになってしまった。
なぜかと考える。ひとつは Truffle/Graal というものがどう振る舞うかはわかったが、それが他のものと比べてどう新しいのかについての理解が足りていなかったこと。たとえば普通の最適化コンパイラ/JIT にはなぜそれができなくて、なぜ Truffle ではできるのかという部分の説明ができなかった。それは
- AST の関数単位ではなくてゲスト言語の関数単位でコードを生成するので、同じ AST のノード相手に異なる特殊化をすることとができる。これはまあ普通の JIT コンパイラもそうとえいばそうだけれど、一見すると再帰しそうな AST 評価のコードをインライン化して大丈夫と突撃できるのはドメイン固有ならでは。
- 普通のコンパイラには見えないものが見える。単なる定数をコンパイル時定数にできる。この結果+インライン化の力で芋づる的に可能になる最適化が沢山ある。そしてこれがよく効くのは、ゲスト言語の関数単位で特殊化できるという性質があるから。
- 投機的に判断して、あてがはずれたらコードを捨ててやりなおせる。だから普通は定数とみなせないものも定数をみなせる。これだって普通の JIT コンパイラがやっていることと言えなくもないけれど、そういう判断は tracing の type checking など場面が限られる、どこで投機してどこでコードを捨てるのかをコード側から指示できるのは強い。ふつうなら投機できそうにないと諦めそうな場面でもコンパイラの背中を押すことができる。
とかだよな。
でもこれは、実際に説明しようとして失敗しないと思い至れない。いちおうなにを話すかはノートに箇条書きしてあるのだけれど、それが不十分なのだろうなあ。結局、自分がアイデアのコアを理解できてないということのような気もする・・・が、こうして事後的にはわかるのだから、理解してないというのとも違う。説明できないだけで。
公開前に読みなおしてわからなさを判断できるブログだとこういう問題はおきない。でもブログを書くのがと大変だから Podcast をやってるわけで、たとえばブログを書いた上で Podcast に臨むとかは時間がかかりすぎて本末転倒。
もうひとつのオプションは、前の日のランチとかでリハーサル?をしておくことだろうか。ただそれだと聞き手がねたばれしてしまい、本編の会話がいまいちになってしまう気もする。向井さんじゃない誰かに説明してみるのがよいのだろうけど、日本語の通じる知り合いがまわりにあんましいないのだよなー Y 氏くらいで・・・もうちょっと日本人同僚たちと親しくしておくんだった・・・。英語でやれ?すみません・・・。
箇条書きのノートだけだとうまく話せないのは、スライドだけつくってもうまく講演ができないのと似ている。事前の練習が必須。一人で、あまり手間をかけずに、それができないもんかなー。まあ講演の練習なんかは一人でやることもあったから、やればいいだけかもしれないが・・・。夜中にやるの?ひとりで?まあ一回くらいは練習してみていいかもしれないな。あとはやはり Y 氏に犠牲になってもらうか・・・あのひと木曜の昼はあいてるのだろうか・・・。
あとはノートをもうちょっと会話に近づけていくというのはあるかもしれないね。しかしそれほぼ Blog なのでは、という気はする。時間と手間をかければよくなるのはわかるが、本業および家庭に差し支えると困るのでラクさは重要なのだった。持続可能性。
持続可能性という意味では週に一本、担当は隔週にするのはよい。自分への論文読み圧が減ってしまうのはやや残念でもあるけれど。
前回の RISC-V の話がなぜ比較的大丈夫だったかというと、立ち入った話が少なかったからだろうね。ああいう与太話寄りのはラクだけれど、やっぱり立ち入った話ができないと面白くないよなあ。自分が。世の中の説明がうまい人たちの頭の中ってどうなってるのだろうね。
追記
うー
- AST の Java コード単位ではなく AST のオブジェクト単位でプロファイル情報を収集できるから、コード単位でしか統計をとれない ホスト言語の JIT にはできない最適化ができる、ということではないか。これがなぜ makes sense かというと、ホスト言語上で表現された AST のオブジェクトというのはゲスト言語にとってのコードだから。
こう説明すればだいぶ腑に落ちるはずだが、この理解には到達できていなかった。限られた時間でこういう理解に辿りつけなかったのは、自分が言語処理系に通じておらずメンタルモデルが弱かったせいだよなあ。
練習するとかもあるけど、ちゃんと腑に落ちるまで考えるのも大事。練習をすると自分の理解の不備に気付きやすくはなるが、けっきょく理解には時間をかけないといけない。