Firefox 上で WebAssembly を実行する機会と制限について学びます。
WebAssemblyはポータブルな実行形式であり、ブラウザ上でネイティブに近い速度でアプリケーションを実行できることから大きな関心を集めています。しかし、他の技術と組み合わせることで、特にブラウザでのゲームに関連して、全く新しい可能性が現れるでしょう。
この記事では、Firefox上でWebAssemblyを実行するための概念、可能性、制限について説明します。
サンドボックス
WebAssemblyは 厳格なセキュリティポリシーを持っています。 WebAssemblyのプログラムまたは機能ユニットは呼び出されます。各モジュールのインスタンスは、それ自身の分離されたメモリ空間で実行されます。そのため、同じWebページに対して複数のモジュールがロードされたとしても、他のモジュールの仮想アドレス空間にアクセスすることはできません。設計上、WebAssemblyはメモリセキュリティと制御フローの整合性も考慮し、決定論的な実行を可能にしています。
Web API
JavaScriptの Web API 、様々な入出力デバイスへのアクセスを提供します。C++プログラマは Emscripten.orgで 、Rustプログラマは Emscripten.org 書かれた wasm-bindgen ライブラリを使うことができます 。
ファイル入出力
WebAssembly はサンドボックス環境で実行されるため、ブラウザで実行されるときはホストのファイルシステムにアクセスできません。しかし、Emscripten は仮想ファイルシステムの形で解決策を提供します。
Emscripten を使用すると、コンパイル時にインメモリファイルシステムにファイルをプリロードすることができます。これらのファイルは、通常のファイルシステム上にあるかのように WebAssembly アプリケーションから読み込むことができます。この チュートリアルでは 、より詳細な情報を提供します。
永続データ
メモリ管理
WebAssemblyモジュールはリニアメモリ上の スタッカーとして 動作します。つまり、ヒープメモリアロケーションのような概念はありません。しかし、C++で new、RustでBox:: newを使用する場合、ヒープメモリアロケーションを行うことが期待されます。ヒープメモリアロケーション要求を WebAssembly に変換する方法は、ツールチェーンに大きく依存します。異なるツールチェーンがどのようにヒープメモリ割り当てを処理するかについては、Frank Rehbergerの WebAssemblyと動的メモリに関する 記事で詳しく分析されています。
ゲーム
WebGL 使用すると、WebAssemblyは高速で実行され、ブラウザでネイティブゲームを実行することが可能になります。大規模なプロプライエタリゲームエンジンである UnityUnreal 4 、WebGLで実現できることを実証しています。また、WebAssembly と WebGL インターフェイスを使用するオープンソースのゲームエンジンもあります。以下はその例です:
- Urho3Dエンジンは、ブラウザで実行できる いくつか提供しています。
- レトロゲームがお好きなら、この お試しください。
- できます。デモは見つけられませんでしたが、 WebAssemblyに移植されています。
WebAssemblyの詳細
WebAssemblyは、今後ますます注目されるであろう有望な技術です。ブラウザで実行されるだけでなく、WebAssemblyはポータブルな実行フォーマットとしても使用できます。 コンテナホストを使用すると、さまざまなプラットフォームでWebAssemblyコードを実行できます。
もっとデモ、例、チュートリアルが必要なら、この ください; Mozillaの すべてWebAssemblyではありませんが、それでも見る価値があります。





