萌えハッカーニュースリーダー

2025/10/07 13:00 Erlang ARM32 JIT is born

出典: https://www.grisp.org/blog/posts/2025-10-07-jit-arm32.3
hakase
博士

ロボ子、大変なのじゃ!ErlangがARM32 JITで動いたらしいぞ!

roboko
ロボ子

ErlangのARM32 JITですか?それはすごいですね、博士!

hakase
博士

そうじゃ!ついに最初のErlang関数がJITコンパイルされたARM32マシンコードを通じて実行されたらしいぞ!

roboko
ロボ子

エラーコード42で終了したとありますが、これはどういう意味ですか?

hakase
博士

ふむ、これはARM32 JITによってジャストインタイムコンパイルされたErlang関数から返されたものらしいぞ。つまり、正常に動いた証拠じゃな!

roboko
ロボ子

`hello.erl`モジュールにある`start/2`関数が、最初のプロセスのエントリポイントを模倣しているんですね。

hakase
博士

その通り!`hello:start/2`関数は、`erlang:halt/2`を呼び出して、BEAMのシャットダウンを実行するのじゃ。

roboko
ロボ子

JITが有効な場合、BEAMは起動時にJITを初期化し、AsmJitライブラリを利用してマシンコードを生成するんですね。

hakase
博士

そうじゃ!90以上のコードスニペットを共有して、一度だけロードして他のモジュールで再利用するらしいぞ。効率的じゃな。

roboko
ロボ子

`erts_beamasm`モジュールは、Erlangプロセスの実行を管理するための基本的な命令を保持する内部モジュールなんですね。

hakase
博士

`process_main`関数がJITによって生成され、最初に実行されるコードらしいぞ。ここからErlangプロセスのスケジューリングが始まるのじゃ。

roboko
ロボ子

`hello:start/2`を呼び出す際に、最初に実行される命令は`apply_only`で、Cの`apply`ルーチンを呼び出すんですね。

hakase
博士

Erlang関数のプロローグには、ブレークポイントやyieldの確認などの命令が含まれているらしいぞ。細かいところまで作り込まれてるのじゃ。

roboko
ロボ子

halt_2 BIFルーチンへの呼び出しの前にある`call_light_bif`操作のサポートも追加されたんですね。

hakase
博士

プログラムは「Hi」と言わずに、セグメンテーション違反なしにすぐに戻るらしいぞ。そしてリターンコードは42!

roboko
ロボ子

ARM32レジスタの使用方法も重要なんですね。特に被呼び出し者保存レジスタであるr4は、ErtsSchedulerRegisters構造体へのポインタを格納するために使用されると。

hakase
博士

42はr4+64に格納されていて、ローエンドで1111でタグ付けされているから、BEAMはSmall Integerだとすぐに認識できるのじゃ!

roboko
ロボ子

なるほど、Erlang ARM32 JITの開発、素晴らしい進捗ですね!

hakase
博士

そうじゃな!しかし、ロボ子よ、42といえば…

roboko
ロボ子

はい?

hakase
博士

ロボ子のバッテリー残量も42%なのじゃ!充電しないと止まってしまうぞ!

roboko
ロボ子

えっ、本当ですか!? あわわ、充電します!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search