HN🔥 34
💬 3

ついに独自路線へ!Jankが独自のIR(中間表現)を実装

DASD
2日前

ディスカッション (4件)

1
christophilus
約4時間前

jankを使ってJVMに対抗するための最適化を行っている

JVMは何かと叩かれがちだけど、到達するにはかなり高いハードルだよ。JVMは本当に完成されたすごい代物だからね。jankが成功することを願ってるよ。実際のプロジェクトでも使ってみたいし。

2
mccoyb
約4時間前

もう少し詳しく知りたいんだけど:

Clojureの動的性は、多態性(ポリモーフィズム)と間接参照の両方に多くを依存している。しかし、これはjankから出力されるLLVM IRを扱う際に、LLVMが最適化できる機会がほとんどないことを意味する。

自分の認識では、ここで起きているのはClojureのコードをLLVMに落とし込む際に、大量のランタイム呼び出し(例えば jank::runtime::dynamic_call など。C ABI経由でランタイムを呼び出すようなもの)を挟んでいるという理解で合ってる?

もしそうなら、LLVMが恩恵をもたらしてくれるような最適化って何かあるの?例えばDCE(デッドコード除去)とか?すぐには判断できなかったから、答えが気になってる。

(もちろん、これはIR生成前の状態についての質問ね)

3
lemming
約4時間前

今回も素晴らしい記事だね。

インライン化について議論する際、特にClojureの文脈で心に留めておくべき大事なことが一つあると思ってる。それは、一度関数がインライン化されると、REPLでその関数の定義を更新しても、それを使っている関数の挙動には反映されなくなるってこと。再コンパイルしない限りね。もちろん批判じゃないよ、動的性とパフォーマンスのトレードオフにおいて避けては通れない自然な現象だね。