ruby4ijを早速使っていただきました!「風船 Ruby 版 (ruby4ij)/Kidspod;

ただ、なかなかにやっかいな開発環境づくり。開発するために必要なツールが多く、それぞれがバージョンアップするので環境構築方法が変わってしまったりして鬼門です。 そこで便利なweb技術。クラウド処理もありですが、IchigoJam web でも使っている、エッジ技術、WebAssemblyを使ったパパっと手元で軽快動作を目指します。

手始めに、こちら学習用ミニCコンパイラ「ci0」を移植して作った「webci0

webci0 - mini C compiler ci0 in WebAssembly
C言語風に書いたプログラムをスタックマシンなVM用マシン語に変換、インタプリタとして実行します。標準関数は文字列表示のputstrと数表示のputnumのみ。メイン部分は500行ちょっとのオープンソース、いろいろ改造して遊んでみましょう!

WebAssembly用に標準ライブラリ系を準備して、clang, llvm-link, llc, s2wasm, wat2wasm の手順でコンパイル。16KBのWebAssembly用バイナリ ci0.wasm ファイルができあがり!(参考、WebAssembly開発環境 WABTコンパイル用シェルスクリプト

printfは「Linuxをはじめよう!:printfを自作してみる」を使わせてもらいましたが、WebAssembly環境で複数の引数の時にうまく動いていないので ci0.c では回避策をとっています。

ブラウザ上のコードエディタとして Ace を使用。快適に動作するので、普段使う標準エディタにしてもいいくらい! カラーテーマも「Ace Kitchen Sink」からC言語のハイライトに合う感じのものを選んでみました。

ci0のスタックマシンはWebAssemblyのマシン語ともよく似ているので、WASMコンパイラとして育てるのもおもしろそう!
Cコンパイラを作ってみたい人、自作言語を作ってみたい人、WebAssemblyでの開発、オススメです!
(WASM、現時点では、goto非対応、例外非対応な点に注意!)

WebAssemblyマシン語入門
- ブラウザだけでOK! 1+1からはじめる、WebAssemblyマシン語入門その1
- プログラミングはプログラミングで楽をする、WebAssemblyマシン語入門その2
- もっと楽するコンパイラ、WebAssemblyマシン語入門その3

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS