Skip to content

Latest commit

 

History

History
44 lines (38 loc) · 3.09 KB

_wasm.md

File metadata and controls

44 lines (38 loc) · 3.09 KB

WebAssembly (WASM) / WASI

WebAssembly (WASM)

  • Webブラウザで高速、安全に実行で可能なバイナリソフトウェアフォーマット
  • 高級言語で開発したプログラムをコンパイルすることでバイナリを生成できる
  • 元々Webブラウザ上で高速、安全に実行可能なバイナリフォーマットとして開発されたが WASIの策定とブラウザから独立したランタイムの開発によりあらゆる環境にて 共通のバイナリで実行可能なバイナリフォーマットとなった
  • W3CのWebAssembly Community Groupが標準化を行う

WASI (WebAssembly System Interface)

  • WebAssemblyをブラウザを介さずクロスプラットフォームで実行できるようにするためのインターフェース仕様
  • WASMアプリケーションに対してOSのシステムコールを抽象化することでOS依存をなくし、 ポータブルなWASMアプリケーションを実現する
  • WASIに従って開発されたWebAssemblyアプリケーションはいずれのWASIに対応したWebAssemblyランタイムで実行可能
  • ByteCode Allianceが標準化を行う

アセンブリ言語との違い

  • アセンブリ言語は各プロセッサ・アーキテクチャごとに対応する
  • WASMは特定のプロセッサ・アーキテクチャではなくWASIに対応する

WebアプリケーションとしてのWASMコード実行

  1. 高級言語でソースプログラムを記述する
  2. ソースプログラムをコンパイルし、WebAssemblyバイトコード (WASMコード) を生成する
    • C/C++ -> LLVMベースのコンパイラ基盤やEmscriptenなどをコンパイルに使用する
    • Rust -> rustcをコンパイルに使用する
  3. WebアプリケーションにWASMコードをロードする
  4. WebブラウザがWASMを解釈し実行する
    • JSと並行して動作する
    • JSからWASMを呼び出したりWASMからJSを呼び出すこともできる

代表的なWebAssemblyランタイム

  • WasmTime (ByteCode Allianceによる) - 事実上のリファレンス実装
  • WasmEdge (Second Stateによる) - Dockerコンテナの業界標準であるOCIに対応

Binaryen

  • Binaryen
  • WASM向けのコンパイラ/ツールチェインインフラストラクチャ
  • LLVMによる出力をWASMにコンパイルする

参照