動機
Emscriptenを使っていると、ところどころでBinaryenが出てくるので、どういう風につかわれているのか気になり調べた。
結果
どう使われているのかわからない。
Binaryenとはどういうものか
wasmをパースして、最適化して、wasmを出力してくれるツール群の総称。
EmscriptenのdocでのBinaryenについての説明
Emscripten’s WebAssembly support depends on Binaryen, which is provided by the emsdk
とある。emsdkがwasmサポートをBinaryenを使って提供しているとだけいっていて、どんな場面で使われているかについての説明はない。
asm2wasm
Binaryenにはasm2wasmというツールが入っていて、これはasm.jsをwasmに変換してくれる。
An asm.js-to-WebAssembly compiler, using Emscripten's asm optimizer infrastructure. This is used by Emscripten in Binaryen mode when it uses Emscripten's fastcomp asm.js backend.
1.38の以前のfastcompバックエンドベースのemscriptenでは、上の説明にあるように、このツールを使って、emscriptenの出力したasm.jsをwasmに変換していたらしい。
Emscripten emits WebAssembly using the upstream LLVM wasm backend, since version 1.39.0 (October 2019)
とあって、現行の1.39以降はLLVMのwasmを出力するバックエンドを使っているので、Binaryenはこの形では使われていない。
もしかして?
Binaryenは、wasmを最適化してくれるツールなので、一度LLVMが出力したwasmを、さらに最適化するために使われてるのかもしれない。もしくはwasmバックエンドでは全く使われていないのか。うーんわからない。emsdkのソースを読む機会があれば、調べてみる。
参考にしたページ
https://kripken.github.io/talks/binaryen.html#/
https://github.com/WebAssembly/binaryen
https://www.oreilly.com/library/view/learn-webassembly/9781788997379/780259f3-ab01-4bad-b218-37e07e11c41d.xhtml
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Emscripten