正月に書いたコード

正月には久しぶりにWebAssemblyの仕様書を読み直して、それをもとに少しだけコードを書いていた。去年の夏休み以来だ。WebAssembly1.0になってから結構経つが、まだあまり変わった感じはない。確か、1.0になったときに関数が複数の値を返せるようになったんだっけ。うろ覚えです。複数の値を扱えるようになるメリットがどこかに記事で上がっていたな、と思って探したらあった。

hacks.mozilla.org

あとは、早く複数のテーブル(関数テーブル)やメモリが扱えるようになるといいな。テーブルに関しても関数以外も置けるようになれば、ポインタ置き場として使い道はたくさんありそう。でもやっぱり、セキュリティ上、そんなに簡単に用途を広げられないんかな。

前回は(全然公開していないが)WebAssemblyのインタプリタを書いた。ただしText Formatにだけ対応していて、また動く命令も一部だけだ。また機会があれば追加していきたいなと思っていたら転職であっというまに時間が過ぎてしまった。今回はBinary Formatで書き始めている。よく考えたらバイナリのパースを手で書いたことはないな。なんとなくバイナリのパースと聞くとErlangが浮かぶが、別に書きやすくはなさそうな気もする。そのなかにLEB128という形式が出てきて、WebAssemblyで使う整数値はその方式でバイナリ化する決まりになっている。これもプログラミング始めたての方の練習に良さそう(ビット演算とか仕事だとなかなかしないし)。

ちなみに少し前に買った以下の内容が役に立ちました。ここではRubyで実装されている。技術書典で買ったもの。技術書典、またリアルで遊びに行けるようになるといいね。

booth.pm