@ledsun blog

無味の味は佳境に入らざればすなわち知れず

WebAssembly勉強メモ

ruby.wasmの発表ラッシュが終わりました。ruby.wasmのハックをしていると、WebAssemblyの理解があやふやなことが我ながら気になります。ここらで一度、足元を固めたいと思います。

じっくり、本を読んでみようと思います。

Emscriptenを使っているので、WASIを使っているruby.wasmとはツールチェーンがちょっと違います。WebAssembly自体の理解には良さそうです。

読んだ範囲では、asm.jsについて簡単な説明があったのが良かったです。JavaScriptと互換性を保ったまま型アノテーションをつけるそうです。TypeScriptっぽいアプローチなのが面白いです。型がわからないとJITができないのも、YJITのLazy Basic Block Versioningで型を決め打ちするのと似てて面白いです。

とりあえずはWebAssemblyバイナリーに含まれる情報を理解することを目指そうと思います。WebAssembly Specification — WebAssembly 2.0 (Draft 2023-07-24)に仕様があるので、これがなんとくなく読めるようになるのをゴールにすると良さそうです。

WebAssemblyはアセンブラ相当の命令を書き出せば動きます。機械語やリンカは考えなくて良いのですこしハードルが下がります。katsyoshiさんの真似してコンパイラをつくってみるのもいいかもしれません。RubyJavaScriptならASTも簡単に手に入ります。四則演算くらいから始めると良さそうです。

ゆくゆくは、WASM Spec難しすぎへんかのようにWebAssemblyバイナリーを動かすランタイムをつくってみるのもいいかもしれません。