1. WebAssembly入門 MOC

2. WebAssemblyのコア技術 MOC

2.1. WebAssemblyモジュール (Wasm Module) MOC

2.2. WebAssemblyのフォーマット MOC

  • WebAssemblyバイナリフォーマット (.wasm) MOC
    • [[バイナリフォーマットの構造 (マジックナンバー, バージョン, セクション)]]
    • [[コンパクトさと高速なデコード]]
    • [[LEB128エンコーディング]]
  • WebAssemblyテキストフォーマット (.wat) MOC
    • [[WATの定義 (人間が読めるS式形式のテキスト表現)]]
    • [[WATの構文 (module, func, import, export, memory, tableなど)]]
    • [[WATの役割 (デバッグ、学習、手書きでの最適化)]]
    • [[WATとWasm間の相互変換ツール (wat2wasm, wasm2wat)]]

2.3. WebAssemblyの実行モデル MOC

2.4. WebAssemblyのメモリモデル MOC

2.5. WebAssemblyのテーブルと関数参照 MOC

3. WebAssemblyの開発と利用 MOC

3.1. Wasm Interoperability) MOC

  • Wasmモジュールのロードとインスタンス化
    • [[WebAssembly JavaScript API]]
    • [[WebAssembly.instantiateStreaming() (推奨)]]
    • [[WebAssembly.instantiate()]]
    • [[WebAssembly.compileStreaming()/compile()WebAssembly.instantiate() の組み合わせ]]
    • [[インポートオブジェクトの提供]]
  • Wasm関数の呼び出し
    • [[エクスポートされた関数をJavaScriptから呼び出す]]
  • JavaScript関数の呼び出し
    • [[インポートオブジェクトを通じてJavaScript関数をWasmから呼び出す]]
  • データの受け渡し
    • [[数値型 (i32, i64, f32, f64) の直接的な受け渡し]]
    • [[複雑なデータ型 (文字列、配列、オブジェクト) の受け渡し]]
      • [[線形メモリを介したデータ共有]]
      • [[文字列のエンコード/デコード (UTF-8, UTF-16)]]
      • [[データのシリアライズ/デシリアライズ (JSONなど)]]
  • Glue Code (グルーコード) の役割

3.2. C++からWebAssemblyへのコンパイル MOC

  • Emscriptenツールチェイン MOC
    • C++からWasmへのコンパイラ)
    • [[Emscriptenのインストールと設定]]
    • [[コンパイルコマンド (emcc)]]
      • [[基本的なコンパイルオプション]]
      • [[出力形式 (.js+.wasm, スタンドアロンWasm)]]
      • [[最適化レベル (-O1, -O2, -O3)]]
    • Emscriptenが提供する機能
      • [[ファイルシステムエミュレーション (MEMFS, NODEFS)]]
      • [[C標準ライブラリ (libc) のサポート]]
      • [[C++標準ライブラリ (libc++) のサポート]]
      • [[SDL, OpenGL (WebGL経由) などのライブラリサポート]]
      • [[EmbindWebIDL Binder (C++とJSの連携)]]`
    • [[EmscriptenにおけるJSとC/C++の相互呼び出し]] (emscripten_run_script, EM_JSマクロ)
  • [[既存のC/C++プロジェクトのWasmへの移植]]

3.3. RustからWebAssemblyへのコンパイル MOC

  • RustとWebAssemblyの親和性 (メモリ安全性、パフォーマンス、低レベル制御)
  • Rust Wasmツールチェイン MOC
    • [[wasm32-unknown-unknown ターゲット]]
    • [[wasm-pack の役割と使い方 (ビルド、テスト、パッケージング)]]
    • [[cargo-generate を用いたプロジェクトテンプレート]]
  • wasm-bindgen MOC
    • [[wasm-bindgenの役割 (RustとJavaScript間の高レベルな相互作用)]]
    • [[#[wasm_bindgen] アトリビュート]]
    • [[Rustの構造体とJSのクラスのマッピング]]
    • [[文字列、ベクタ、クロージャなどのデータ型の扱い]]
    • [[DOM APIやWeb APIへのアクセス]]
  • [[Rust Wasmプロジェクトのビルドとnpmパッケージとしての公開]]
  • [[Rustにおけるパフォーマンスとコードサイズの最適化 (wee_alloc, LTO, etc.)]]

3.4. GoからWebAssemblyへのコンパイル MOC

3.5. その他の言語からWebAssemblyへ MOC

  • [[AssemblyScript (TypeScriptライクな言語)]]
  • [[Blazor (C#net|/.NET)]]
  • [[Pyodide (Python)]]
  • [[SwiftWasm (Swift)]]

3.6. WebAssembly System Interface (WASI) MOC

3.7. WebAssemblyのデバッグ手法 MOC

4. WebAssemblyのパフォーマンス MOC

  • Wasmが高速な理由
    • [[高速なパースとデコード]] (バイナリフォーマット)
    • [[コンパイルと最適化の効率]] (静的型付け、シンプルな命令セット)
    • [[ネイティブに近い実行速度]]
    • [[ガベージコレクションの不在 (コア仕様)]]
  • WasmとJavaScriptのパフォーマンス比較
  • パフォーマンス最適化
    • [[コンパイラ最適化フラグの活用]]
    • [[コードサイズの削減 (Dead Code Elimination)]]
    • [[JS/Wasm間の呼び出し回数の最小化]]
    • [[メモリ管理の最適化]]
    • [[SIMDの活用 (将来機能)]]
    • [[ストリーミングコンパイルとインスタンス化]]

5. WebAssemblyのセキュリティ MOC

6. WebAssemblyのユースケースと応用分野 MOC (再掲・詳細)

  • [[Web上での高性能ゲーム (Unity, Unreal Engine)]]
  • [[クリエイティブツール (Figma, AutoCAD Web, Adobe Photoshop Web)]]
  • [[動画・音声処理 (Zoom, Google Meetの背景ぼかし)]]
  • [[データ圧縮・解凍ライブラリ]]
  • [[暗号化・ハッシュ計算ライブラリ]]
  • [[物理シミュレーションと科学技術計算]]
  • [[レガシーアプリケーションのWeb移植]]
  • [[サーバーレスコンピューティング (Cloudflare Workers, Fastly Compute@Edge)]]
  • [[ブロックチェーンとスマートコントラクト]]
  • [[プラグインシステム (Envoy ProxyのWasmフィルタ)]]
  • [[IoTデバイスでの利用]]

7. WebAssemblyのエコシステムとツール MOC

  • コンパイラとツールチェイン (再掲・集約)
    • [[Emscripten (C/C++)]]
    • [[Rust Wasm toolchain (wasm-pack, wasm-bindgen)]]
    • [[TinyGo (Go)]]
    • [[AssemblyScript (TypeScript-like)]]
  • Wasmランタイム (再掲・集約)
    • [[ブラウザ内蔵エンジン]]
    • [[Wasmtime]]
    • [[Wasmer]]
    • [[WAVM]]
    • [[Node.js]]
  • 関連ライブラリとフレームワーク
    • [[WASIライブラリ]]
    • [[JS連携を容易にするライブラリ]]
  • デバッグとプロファイリングツール
  • パッケージレジストリ ([[WAPM (WebAssembly Package Manager)]]など)
  • オンラインWasm/WATプレイグラウンド (WABT, WebAssembly Studioなど)

8. WebAssemblyの将来と高度なトピック MOC