ArticlesLuaをWebAssemblyにコンパイルして実行する話LuaでもWebAssemblyがしたかった(した)そろそろWebAssemblyやっていくぞと思って手を付け始めたんですが、もう既に色んな言語からwasmにコンパイルできるようになってるんですね。Goがwasm対応したと聞いたのでGoでやろうと思っていたんですが、なぜかLuaでやり始めました。Scriptをwasm上で実行して結果を得る、というもので、これだと自分で書いたスクリプトをwasmにするのとはちょっと違うなーってことで、参考にしつつイチから作りました。emscriptenやってることはほぼ同じで、バンドル対象のLuaファイルのコードをバイナリにして埋め込みつつ、emscriptenでコンパイルできるCのファイルを組み立ててコンパイル、という手順を取っています。manualみながらガチャガチャやってたらいけました。コンパイル用のCファイルの組み立てはテンプレーティングみたいな感じだったのですぐできたんですが、LuaのRuntimeを混ぜつつコンパイルするのにちょっと手間取りました。WASM=1"としてemscriptenようにコンパイルしたものを使わないとダメでした。リンクして、ヘッダを読み込ませることでコンパイルが通ります。WASM=1みたいな感じでコンパイルするとLuaの動くwasmが生成されます。examplesに置いたのでお試しください。Imageも置きました。hello_world.lua詳細はREADMEを見てください。char*のやりとりしかできません。wasmFunction(...);console.log(ret)のような呼び出し方法を取ります(直接コールすることもできますが、HEAPに入れたり出したりしないといけないのでこっちのほうが楽かな)。Luaには型がないので、それをwasmの関数としてCファイルを生成するのにどうすればいいのかな、と考えています。生成自体は簡単ですが、どうやって型情報をつけるか...TypeScriptみたいな定義ファイルを一緒に食わせるとか、そういう感じになりそうですが、何か良い案があればぜひ教えてください。あと、別モジュールに分けてrequireしてるものや、luarocksなどでインストールしたライブラリも今はバンドルできないので、これも対応したいと思います。...実際Luaでwasmやる人がいるのかどうかはわかりませんが...現場からは以上です。