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は、解釈器が使用する接尾辞.wastのような実行コードをロードすることができ、これはWebAssemblyのテキストフォーマット
  • である.
  • asm2wasm ASM.jsはWebAssembly
  • にコンパイルされた
  • wasm 2 asm WebAssemblyはASMにコンパイルする.js(まだ完成していない)
  • s 2 wasmアセンブリファイル、接尾辞.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本は新しくて、新しいのはまだ成熟していないで、しかし将来古いのに取って代わります
  • 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++プログラマー向けに設計されただけですか?


    最初は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オブジェクト
  • を直接操作する

    JavaScriptの代わりにしたいですか?


    いいえ.WebAssemblyは、より多くの言語をコンパイルして実行できるようにしただけで、JavaScriptは急速に発展している言語として特権を持っており、サポートされている2つの言語は、パフォーマンスが要求されている部分がWebAssemblyであるなど、長期的に共有される可能性が高い.