WebAssembly処理系完成、ブログを再開します

嘘ではありません。

3月後半、忙しくなってブログをお休みしていました。落ち着いたので再開します。年明けから毎日書いていましたが、特にルールとして決めていたわけではありません。多少休むことがあっても継続することの方が大切だと考えているので、潔く、しばらく休みました。いやあ、仕事と、そのほかも少し、大変でした。3/11でやめているのが意味深に見えたかもしれませんが、他意はありません。

ただ、ネタ切れしていたのも確かです(忙しくて調べたり実装したりする暇がなかったのももちろんそうです)。ブログを書くことが形骸化しないように気をつけないと。

そういう意味では、ブログを更新していない間に進捗が生まれていました(忙しかったんじゃないの?という声が聞こえますが、作業に取り掛かれるようになったのはつい最近です)。ここでつらつらと書いていたWebAssemblyの処理系自作、ようやくほぼ仕様書のすべてを実装することができました。正確にいうと、ランタイム部分を作ったのが最近で、その他の部分は以前から分割して作っていたものを統合しました。ともかく、これでいろいろ試していくことができます。夢が膨らみますね。

github.com

とはいえ、品質はどうなのかわかりません。自分のために作っているので、現在のところまともに使えるのかも怪しいです。ドキュメントなど、対外的な整理はこれからですね。ちゃんとテスト書いてCI回したい。WebAssembly公式のテストがあるらしいですが、それも全然試してません。

ちなみに今回はバイナリフォーマットパーサ、テキストフォーマットパーサ、そして型検査、ランタイムの4つが主な機能で、これはWebAssemblyのコア仕様に書かれているものの大まかには全てです。ほぼすべて、と書いたのは、テキストフォーマットの記法の中に一部対応していないものがあるからです。これらは大きくFoldingとAbbreviationsに分かれますが、どちらもLispでいうマクロにあたるような書かれ方をしていて、基本的にはsyntax sugarなので現時点でも書けない機能があるわけではありません。

S式でマクロと聞けばヨダレが出る方もいらっしゃるでしょうが、今回はその法則に当てはまらない書き換え規則もあり、実装方法に関してはまだ悩んでいます。パーサを拡張するのか、もしくはもう一段階増やして、マクロとして構文木を書き換えるのか。趣味だけでいえば多段階計算したいけれど、一方でOne passからTwo passesになるだけでなく、書き換え規則上ではストリーム的な書き方ができないので方法がなくて唸っています。

でもまあやりたいことはできるし、コンパイラがテキストフォーマットを吐くわけでもないので、あまり気にしていません。そのうち作りましょう。

このwasmiqの話は、引き続き行うと思いますので、どうぞよろしくお願いします。