Binaryenプロジェクトの進展とWebAssemblyの特徴について
3836 ワード
Mozillaのブログからの読書ノートhttps://hacks.mozilla.org/2015/12/compiling-to-webassembly-its-happening/
WebAssemblyの生態は大きく2つの部分に分けられており,コンパイラなどのツールチェーンと実行環境の両方がspecに基づいてドッキングを完了し,デカップリングツールチェーンの部分を実現する重要な新しいプロジェクトはBinaryen,1つのコンパイラである.https://github.com/WebAssembly/binaryen実装言語はC++であり、parseとemit WebAssemblyに使用することもできるし、AST仕様に基づいていくつかの部分に基づくツールを変換することもできる. Binaryen shellは、解釈器が使用する接尾辞 である. asm2wasm ASM.jsはWebAssembly にコンパイルされた wasm 2 asm WebAssemblyはASMにコンパイルする.js(まだ完成していない) s 2 wasmアセンブリファイル、接尾辞 を実行
Binaryenの紹介について、スライドがあります.その中の1ページは特に見てください.https://kripken.github.io/talks/wasm.html#/9BinaryenBinaryとEmscriptenのエンディング連載を一緒に書きます
EmscriptenはCまたはC++をASMにコンパイルすることができる.そしてBinaryenはASMをjsはWebAssemblyにコンパイルされ、
https://github.com/kripken/emscripten/wiki/WebAssembly
現在、ブラウザ環境に直接コンパイルして実行する案はまだありません.現在、測定目標は最も早く実現し、検証効果があります.ブラウザのことは後で話しますが、測定の目的のためには、個性が低いwasmがあります.jsが走ることができるのは、実行環境を初期化し、WebAssembly推定を実行することを説明することです.このスキームとCoffeeScriptの解釈実行には、いくつかの参考になる点があります.https://kripken.github.io/talks/wasm.html#/10https://github.com/WebAssembly/build-suite
現在のテストツールは、将来的に後続コードの信頼性を保証するためにも使用できます.もちろん、今後の実行性能は非常に高いものになります.https://github.com/WebAssembly/binaryen/blob/master/src/wasm2asm.hhttps://github.com/WebAssembly/polyfill-prototype-2https://github.com/WebAssembly/design/blob/master/FAQ.md#can-the-polyfill-really-be-efficient多くのC/C++プロジェクトは将来WebAssemblyにコンパイルされ、今後は難しくありません.
WebAssemblyもLLVMバックエンドを開発していますが、まだ成熟していませんが、将来的には非常に重要になるはずです.BinaryenもLLVMが通常
https://github.com/kripken/emscripten/wiki/WebAssembly
今大体2つの考え方があって、1本は古くて1本は新しくて、新しいのはまだ成熟していないで、しかし将来古いのに取って代わります Emscripten + asm.js backend + asm2wasm Emscripten + new WebAssembly backend + s2wasm
またFAQで興味のある内容をいくつかかき集めましたhttps://github.com/WebAssembly/design/blob/master/FAQ.md
ページに長いリストが引かれていて、よく使うデスクトップソフトが並んでいるような気がしますhttps://github.com/WebAssembly/design/blob/master/UseCases.md
最初はC/C++のためかもしれませんが、後でES 6モジュールインタフェースと統合します.C++書き込みを多重化しやすいクラスライブラリです.C++を書くのではなく、LLVMバックエンドを構築し、LLVMのClang、GCCなどをサポートします.よく知っているので、LLVMに対処します.
長期的な目標から、WebAssemblyはバイナリフォーマットを提供し、Webプラットフォームの機能を実現する.https://github.com/WebAssembly/design/blob/master/HighLevelGoals.md例えば、Webの後方互換性に対して、JavaScriptの同源戦略を継承し、非同期呼び出しと呼び出されたJavaScriptは既存のAPIにアクセスし、人間が読むことができるテキストフォーマットを提供し、ViewSource効果に対応してSource Maps、協程、マルチプロセス、4 GB以上のメモリ、最終再帰、具体的にはドキュメントを見るhttps://github.com/WebAssembly/design/blob/master/FutureFeatures.md#gcdom-integrationはノード環境にも対応しており、モバイルプラットフォーム、ネットワーク機器などもあります.https://github.com/WebAssembly/design/blob/master/NonWeb.md
Web APIについては個別のドキュメントがありますが、MVPという初歩的な段階以降にhttps://github.com/WebAssembly/design/blob/master/GC.md WebAssemblyではDOMと各種オブジェクト を直接参照する. JavaScriptではなくWeb APIに直接アクセスする WebAssemblyコードでGCオブジェクト を直接操作する
いいえ.WebAssemblyは、より多くの言語をコンパイルして実行できるようにしただけで、JavaScriptは急速に発展している言語として特権を持っており、サポートされている2つの言語は、パフォーマンスが要求されている部分がWebAssemblyであるなど、長期的に共有される可能性が高い.
WebAssemblyの生態は大きく2つの部分に分けられており,コンパイラなどのツールチェーンと実行環境の両方がspecに基づいてドッキングを完了し,デカップリングツールチェーンの部分を実現する重要な新しいプロジェクトはBinaryen,1つのコンパイラである.https://github.com/WebAssembly/binaryen実装言語はC++であり、parseとemit WebAssemblyに使用することもできるし、AST仕様に基づいていくつかの部分に基づくツールを変換することもできる.
.wast
のような実行コードをロードすることができ、これはWebAssemblyのテキストフォーマット.s
、WebAssemblyにコンパイル、LLVMベースhttp://llvm.org/devmtg/2015-10/slides/BastienGohman-WebAssembly-HereBeDragons.pdf wasm.js
BinaryenのJavaScript実装により、既存のJavaScript環境でBinaryenの紹介について、スライドがあります.その中の1ページは特に見てください.https://kripken.github.io/talks/wasm.html#/9BinaryenBinaryとEmscriptenのエンディング連載を一緒に書きます
Emscriptenについて
EmscriptenはCまたはC++をASMにコンパイルすることができる.そしてBinaryenはASMをjsはWebAssemblyにコンパイルされ、
asm2wasm
コマンドを使用するか、emcc
で直接このステップを含めることができます.emcc file.cpp -o file.js -s ‘BINARYEN=”path-to-binaryen”’
https://github.com/kripken/emscripten/wiki/WebAssembly
現在、ブラウザ環境に直接コンパイルして実行する案はまだありません.現在、測定目標は最も早く実現し、検証効果があります.ブラウザのことは後で話しますが、測定の目的のためには、個性が低いwasmがあります.jsが走ることができるのは、実行環境を初期化し、WebAssembly推定を実行することを説明することです.このスキームとCoffeeScriptの解釈実行には、いくつかの参考になる点があります.https://kripken.github.io/talks/wasm.html#/10https://github.com/WebAssembly/build-suite
現在のテストツールは、将来的に後続コードの信頼性を保証するためにも使用できます.もちろん、今後の実行性能は非常に高いものになります.https://github.com/WebAssembly/binaryen/blob/master/src/wasm2asm.hhttps://github.com/WebAssembly/polyfill-prototype-2https://github.com/WebAssembly/design/blob/master/FAQ.md#can-the-polyfill-really-be-efficient多くのC/C++プロジェクトは将来WebAssemblyにコンパイルされ、今後は難しくありません.
LLVMバックエンドについて
WebAssemblyもLLVMバックエンドを開発していますが、まだ成熟していませんが、将来的には非常に重要になるはずです.BinaryenもLLVMが通常
.s
のアセンブリ接尾辞ファイルを出力することをサポートしています.これも同様です.この結果はASTのようなサンプルではなく、少なくともこのファイルからWebAssemblyに直接変換することができます.s2wasm
を使用してコンパイルされます.詳細を見ると、このプロジェクトにはコマンドラインがあり、Emscriptenにも統合されています.emcc file.cpp -o file.js -s ‘BINARYEN=”path-to-binaryen”’ -s WASM_BACKEND=1
https://github.com/kripken/emscripten/wiki/WebAssembly
今大体2つの考え方があって、1本は古くて1本は新しくて、新しいのはまだ成熟していないで、しかし将来古いのに取って代わります
またFAQで興味のある内容をいくつかかき集めましたhttps://github.com/WebAssembly/design/blob/master/FAQ.md
シーンの使用方法
ページに長いリストが引かれていて、よく使うデスクトップソフトが並んでいるような気がしますhttps://github.com/WebAssembly/design/blob/master/UseCases.md
C/C++プログラマー向けに設計されただけですか?
最初はC/C++のためかもしれませんが、後でES 6モジュールインタフェースと統合します.C++書き込みを多重化しやすいクラスライブラリです.C++を書くのではなく、LLVMバックエンドを構築し、LLVMのClang、GCCなどをサポートします.よく知っているので、LLVMに対処します.
長期的な目標から、WebAssemblyはバイナリフォーマットを提供し、Webプラットフォームの機能を実現する.https://github.com/WebAssembly/design/blob/master/HighLevelGoals.md例えば、Webの後方互換性に対して、JavaScriptの同源戦略を継承し、非同期呼び出しと呼び出されたJavaScriptは既存のAPIにアクセスし、人間が読むことができるテキストフォーマットを提供し、ViewSource効果に対応してSource Maps、協程、マルチプロセス、4 GB以上のメモリ、最終再帰、具体的にはドキュメントを見るhttps://github.com/WebAssembly/design/blob/master/FutureFeatures.md#gcdom-integrationはノード環境にも対応しており、モバイルプラットフォーム、ネットワーク機器などもあります.https://github.com/WebAssembly/design/blob/master/NonWeb.md
Web APIについては個別のドキュメントがありますが、MVPという初歩的な段階以降にhttps://github.com/WebAssembly/design/blob/master/GC.md
JavaScriptの代わりにしたいですか?
いいえ.WebAssemblyは、より多くの言語をコンパイルして実行できるようにしただけで、JavaScriptは急速に発展している言語として特権を持っており、サポートされている2つの言語は、パフォーマンスが要求されている部分がWebAssemblyであるなど、長期的に共有される可能性が高い.