この記事は、下のGithubの「Binaryen」の項目を翻訳・編集したものです。
1 概要
Binaryenは、C++で書かれたWebAssemblyのためのコンパイラおよびツールチェインインフラストラクチャライブラリです。
WebAssemblyへのコンパイルを簡単に、速く、効果的にすることを目指しています。
1 簡単
Binaryenには単純なC APIがあり、単一のヘッダーから利用することができます。
また、JavaScriptからも使用できます。
入力としてWebAssembly形式を受け入れるだけでなく、一般的な制御フローグラフ(CFG)も受け入れます。
2 高速
Binaryenの内部IRはコンパクトなデータ構造を使用しており、完全に並列なコード生成と最適化を可能にし、利用可能なすべてのCPUコアを使用します。
BinaryenのIRは、実質的にWebAssemblyのサブセットであるため、WebAssemblyに非常に簡単かつ迅速にコンパイルすることができます。
3 効果的:
Binaryenの最適化器には、コードのサイズと速度を改善するための多くのパス(一連の最適化手順)があります。
これらの最適化は、Binaryenをコンパイラのバックエンドとして使用するのに十分なパワーを提供することを目指しています。
特に焦点を当てているのは、WebAssembly固有の最適化(一般的なコンパイラでは行わないかもしれないもの)で、これはJavaScriptやCSSなどの最小化と同様に、言語固有の最小化と考えることができます。
2 Binaryenを使用するコンパイラ
Binaryenを使用するコンパイラには以下のものがあります。
AssemblyScript:TypeScriptのバリアントをWebAssemblyにコンパイルします
wasm2js:WebAssemblyをJSにコンパイルします
Asterius:HaskellをWebAssemblyにコンパイルします
Grain:GrainをWebAssemblyにコンパイルします
3 提供するツールチェーンユーティリティ
Binaryenはまた、以下のツールチェインユーティリティを提供します。
1 パースと発行
WebAssemblyのパースと発行。
特に、WebAssemblyをロードし、Binaryenを使用して最適化し、再発行することで、一つのコマンドでwasm-to-wasm最適化器を実装します。
2 解釈とSpecテスト
WebAssemblyを解釈し、WebAssemblyのspecテストを実行します。
3 Emscriptenとの統合
Emscriptenと統合して、CおよびC++からWebAssemblyへの完全なコンパイラツールチェインを提供します。
4 ブラウザがまだネイティブサポートを提供していない場合
ブラウザがまだネイティブサポートを提供していない場合には、JavaScriptにコンパイルされたインタープリタでWebAssemblyをPolyfillすることで実行します(テストに便利)。
以上です。