| パラダイム | 構造化;スタックマシン[1] |
|---|---|
| デザイン: | ウィキペディア |
| 開発者 | |
| 初登場 | 2017年3月 |
| OS | プラットフォームに依存しない |
| ライセンス | Apache ライセンス 2.0 |
| ファイル名拡張子 |
|
| Webサイト | ウェブアセンブリ |
| 影響を受けた | |
WebAssembly(Wasm)は、実行可能プログラム用のポータブル バイナリコード形式と対応するテキスト形式[2]、およびそのようなプログラムとホスト環境間の通信を容易にするためのソフトウェアインターフェイスを定義します。 [3] [4] [5] [6]
WebAssemblyの主な目的は、 Webページ上で高性能なアプリケーションを実現することですが、Web以外の環境でも使用できるように設計されています。[7]これはオープンスタンダードであり[8] [ 9] 、あらゆるオペレーティングシステム上のあらゆる言語をサポートすることを目的としており、[10]実際には最も人気のある言語の多くは、すでに何らかのレベルでサポートされています。
WebAssemblyは2015年に発表され、2017年3月に初めてリリースされ、2019年12月5日にワールドワイドウェブコンソーシアムの勧告となり[11] [12] [13]、2021年にACM SIGPLANからプログラミング言語ソフトウェア賞を受賞しました。 [14]ワールドワイドウェブコンソーシアム(W3C)は、Mozilla、Microsoft、Google、Apple、Fastly、Intel、Red Hatからの貢献により標準を維持しています。[15] [16]
歴史
WebAssembly という名前は、1950 年代初頭に登場したプログラミング言語であるアセンブリ言語と同義であるように思われるように意図されています。この名前は、アセンブリのようなプログラミングをWebに持ち込み、Web サイトのユーザーのコンピューターからユーザーのWeb ブラウザーを介してクライアント側で実行することを示しています。これを実現するには、WebAssembly は真のアセンブリ言語よりもはるかにハードウェアに依存しないようにする必要があります。
WebAssemblyは2015年に初めて発表され、[17]最初のデモではUnityのAngry BotsをFirefox、[18] Google Chrome、[19] Microsoft Edgeで実行しました。[20]先行技術はMozillaのasm.jsとGoogle Native Clientであり、[21] [22]最初の実装はasm.jsの機能セットに基づいていました。[23] asm.jsファイルはすでにネイティブコードに近い実行速度を提供し、[ 24] [25] WebAssemblyをサポートしていないブラウザやセキュリティ上の理由で無効にしているブラウザにとって実行可能な代替手段と見なすことができます。
2017年3月、MVP( Minimum Viable Product )の設計が完了したと宣言され、プレビューフェーズは終了しました。[26] 2017年9月下旬、Safari 11がサポート付きでリリースされました。2018年2月、WebAssemblyワーキンググループは、コア仕様、JavaScriptインターフェース、Web APIの3つの公開ワーキングドラフトを公開しました。[27] [28] [29] [30]
2019年6月、WebAssemblyスレッドがデフォルトで有効になったChrome 75がリリースされました。[31]
2022年4月以降、[アップデート]WebAssembly 2.0はドラフト状態にあり、[32] [33]多くのSIMD関連の命令と新しいv128データ型が追加され、関数が複数の値を返す機能と、大量のメモリの初期化/コピーが可能になりました。
実装
WebAssembly は当初、ウェブブラウザでネイティブに近いコード実行速度を実現するために設計されましたが、それ以外の、より一般的なコンテキストでも価値があると考えられてきました。[34] [35] WebAssembly のランタイム環境 (RE) は、ホストアプリケーションに組み込むことができる 低レベルの仮想スタックマシン( JVMやFlash VMに類似) であるため、一部の実装では Wasmtime や Wasmer などのスタンドアロンのランタイム環境が作成されます。[9] [10] WebAssembly ランタイム環境は、アプリケーションサーバーに埋め込まれて「サーバー側」の WebAssembly アプリケーションをホストしたり、他のアプリケーションに埋め込まれてプラグインベースのソフトウェア拡張アーキテクチャをサポートしたりします。たとえば、「WebAssembly for Proxies」(proxy-wasm) は、プロキシサーバーを拡張するためのWebAssembly ベースのABIを指定します。[36] [37]
ウェブブラウザ
2017年11月、MozillaはEdge 16でWebAssemblyがデフォルトで有効化された後、「すべての主要ブラウザで」サポートすると宣言した。[38]このサポートには、iOSおよびAndroidのモバイルウェブブラウザも含まれる。2024年3月現在、[アップデート]追跡対象となったウェブブラウザの99%がWebAssembly(バージョン1.0)をサポートしており、[40]その前身であるasm.jsよりも高い。[41] 一部の拡張機能については、2.0ドラフト標準からのサポートは低くなる可能性があるが、参照型拡張機能など、90%以上のウェブブラウザが既にサポートしている可能性がある。[42]
コンパイラ
WebAssemblyの実装では通常、事前コンパイル(AOT)またはジャストインタイムコンパイル(JIT)が使用されますが、インタープリタが使用されることもあります。最初の実装はウェブブラウザで導入されましたが、Wasmer、 [10] Wasmtime [43]またはWAMR、[16] wasm3、WAVMなど、汎用的な使用を目的とした非ブラウザ実装も存在します。 [44]
WebAssembly実行ファイルはプリコンパイルされているため、さまざまなプログラミング言語を使用して作成できます。[45]これは、Wasmへの直接コンパイル、またはWasm内の対応する仮想マシンの実装によって実現されます。約40のプログラミング言語がコンパイルターゲットとしてWasmをサポートしていると報告されています。[46]
Emscriptenは、 BinaryenとLLVMをバックエンドとして使用し、 CとC++をWasm [26]にコンパイルします。 [47] Emscripten SDKは、LLVMでサポートされている言語(C、C++、Rustなど)のソースコードを、 JavaScriptコードと同じサンドボックスで実行されるバイナリファイルにコンパイルできます。 [注1] Emscriptenは、 WebGLなどの一般的に使用される環境インターフェースのバインディングを提供します。
バージョン8の時点では、スタンドアロンのClangでCとC++をWasmにコンパイルできます。 [52] 当初の目的はCとC++からのコンパイルをサポートすることでしたが、[53] Rust、.NET言語[54] [55] [46] AssemblyScript [56] ( TypeScriptのような)などの他のソース言語のサポートも登場しています。
MVPリリース後、WebAssemblyはマルチスレッドとガベージコレクションのサポートを追加しました[57]。これにより、 C#(Blazor経由でサポート)、F#(Blazorの助けを借りてBolero [58]経由でサポート)、Pythonなどのガベージコレクションプログラミング言語のコンパイルがより効率的にできるようになりました[59]。
Python [ 60 ] 、[61]、[62]、[63] 、[ 64]、[ 65]、[66]など、他の多くの言語でもサポートされています。
Javaや他のJVM言語をJavaScriptやWebAssemblyにコンパイルできるシステムは数多くあります。これらにはCheerpJ [67] 、 JWebAssembly [68]、TeaVM [69]などがあります。Kotlin はWebAssemblyを直接サポートしています。[70] [71]
制限事項
Web ブラウザはWebAssembly コードがDocument Object Model を直接操作することを許可していません。Wasm コードはこれをJavaScriptに委ねる必要があります。[注 2]
2023年10月に開発者を対象に実施された調査では、303人の参加者のうち半数以下がWebAssemblyの現状に満足していた。大多数がWASI、デバッグサポート、JavaScriptおよびブラウザAPIとの統合、ビルドツールの4つの分野で改善の必要性を挙げた。[74]
WebAssembly でのメモリを大量に消費する割り当てには、「多くのアプリケーションをモバイル ブラウザーに確実にデプロイすることを不可能にする重大な制限があります。[...] 現在、Android の Chrome では Chrome 固有の回避策に頼らない限り、約 300 MB を超えるメモリを割り当てることは信頼できません。また、iOS の Safari でも信頼できません。」[75]
すべての主要ブラウザは、Content-Security-Policyが指定されていない場合、または「unsafe-eval」が使用されている場合にWebAssemblyを許可しますが、それ以外の場合は動作が異なります。[76] Chromeでは「unsafe-eval」が必要ですが、[77] [78]ワーカースレッドで回避できます。[78]
セキュリティに関する考慮事項
2018年6月、セキュリティ研究者は、共有メモリを持つスレッドのサポートが追加されると、WebAssemblyを使用してSpectreおよびMeltdownセキュリティ脆弱性に対するブラウザの緩和策を回避する可能性を示しました。この懸念のため、WebAssembly開発者はこの機能を保留にしました。 [79] [80] [81]しかし、これらの将来の言語拡張を調査するために、Google Chromeは2018年10月にWebAssemblyスレッド提案の実験的なサポートを追加しました。[82]
WebAssemblyは、マルウェア作成者、詐欺師、フィッシング攻撃者が証拠を隠すのを容易にすると批判されてきた。WebAssemblyはコンパイルされた形式でのみユーザーのマシンに存在するため、「[マルウェアの]検出が困難になる」。[83] WebAssemblyのスピードと隠蔽の容易さから、ウェブサイト訪問者のデバイス内で隠れた暗号マイニングに使用されるようになった。 [83] [84] [79]ウェブサイト訪問者のブラウザで暗号通貨マイニングを可能にする、現在は廃止されたサービスで あるCoinhiveは、「マイナーはWebAssemblyを使用し、ネイティブマイナーの約65%のパフォーマンスで動作する」と主張している。[79]ブラウンシュヴァイク工科大学の2019年6月の研究では、Alexaのトップ100万のウェブサイトでのWebAssemblyの使用状況を分析したところ、悪意のある暗号マイニングによく使用されており、調査したWebAssemblyを使用しているウェブサイトの半分以上がマルウェアであることが判明した。[85] [86] 2021年4月にシュトゥットガルト大学が実施した調査によると、それ以来、暗号通貨マイニングは周辺化しており、Alexaのトップ100万のウェブサイトを含む幅広いソースから収集されたすべてのWebAssemblyモジュールの1%未満にまで減少していることがわかりました。[87]
WebAssemblyは構造化された制御フローのみをサポートしているため、シンボリック実行を含むセキュリティ検証技術に適しています。[88]
ワシ
WebAssembly System Interface (WASI)は、 Mozillaが設計した、あらゆるプラットフォームに移植可能なシンプルなインターフェース(ABIとAPI )です。 [89]機能ベースのセキュリティによって制約されたファイルI/OなどのPOSIXライクな機能を提供します。[90] [91]追加のABI/APIが提案されています。[92] [93]
WASI はCloudABIとCapsicumの影響を受けています。[誰によると? ]
Dockerの共同創設者であるソロモン・ハイクスは2019年に「WASM+WASIが2008年に存在していたら、Dockerを作る必要はなかったでしょう。それほど重要なのです。サーバー上のWebAssemblyはコンピューティングの未来です。」と書いています。[94]
仕様
ホスト環境
一般標準では、JavaScript APIのコア仕様と埋め込みの詳細が規定されています。[5]
仮想マシン
Wasmコード(バイナリコード、つまりバイトコード)は、ポータブルな仮想スタックマシン(VM)上で実行されるように設計されています。[95] VMはJavaScriptよりも解析と実行が高速で、コンパクトなコード表現を持つように設計されています。[53] Wasmバイナリコードで期待される外部機能(システムコールなど)は、標準では規定されていません。むしろ、VMが実行されるホスト環境によってモジュールを介してインターフェイスを提供する方法を提供します。[96] [9]
Wasmプログラム
Wasmプログラムは、さまざまなWasm定義値とプログラム型定義のコレクションを含む独立したモジュールとして設計されています。これらは、共通の構造を持つバイナリ形式またはテキスト形式(以下を参照)で提供されます。[97]このようなモジュールは、wasmバイナリのインスタンス化時に実行される開始関数を提供する場合があります。
命令セット
Wasmプログラムのバイナリ形式のコア標準は、VMによって実行される操作の種類の特定のバイナリエンコードで構成される命令セットアーキテクチャ(ISA)を定義します(具体的にどのように実行する必要があるかは指定されていません)。 [98]命令のリストには、標準のメモリロード/ストア命令、数値、パラメトリック、フロー制御命令タイプ、およびWasm固有の変数命令が含まれます。[99]
元の標準 (MVP) で使用されていたオペコードの数は、256 個の可能なオペコードのうち 200 個より少し少なかったです。WebAssembly の以降のバージョンでは、オペコードの数が 200 個を少し超えました。WebAssembly SIMD提案 (並列処理用) では、 128 ビットSIMD 用の代替オペコード プレフィックス (0xfd) が導入されています。SIMD プレフィックスと、SIMD プレフィックスの後に有効なオペコードを連結すると、SIMD オペコードが形成されます。SIMD オペコードにより、「最小限の実行可能な製品」(MVP) SIMD 機能用に 236 個の追加の命令が追加されます (合計で約 436 個の命令)。[100] [101]これらの命令、「確定オペコード」[102]は、 GoogleのV8(Google Chrome内)、Mozilla FirefoxのSpiderMonkeyエンジン、AppleのSafariのJavaScriptCoreエンジンでデフォルトで有効になっています[103]。また、後の「ポストSIMD MVP」用の命令の追加提案もあり、別の「relaxed-simd」提案も検討されています。[104]
これらのSIMDオペコードは移植性もあり、x64やARMなどのネイティブ命令セットに変換されます。対照的に、JavaのJVMもCILも、オペコードレベル、つまり標準ではSIMDをサポートしていません。どちらもSIMDの高速化を提供するいくつかの並列APIを備えています。Javaにはx64 SIMD用の組み込み関数を追加する拡張機能がありますが、[105]移植性がなく、ARMやスマートフォンでは使用できません。スマートフォンは、SIMDを使用してアセンブリコードを呼び出すことでSIMDをサポートでき、C#にも同様のサポートがあります。
コード表現
2017年3月、WebAssemblyコミュニティグループは、最初の(MVP)バイナリ形式、JavaScript API、およびリファレンスインタープリターについて合意に達しました。[106]これは、人間が使用することを目的としていないWebAssemblyバイナリ形式(.wasm)と、S式と従来のアセンブリ言語を組み合わせたような、人間が読めるWebAssemblyテキスト形式(.wat)を定義します。
以下の表は、 Cで記述された階乗関数と、コンパイル後の対応する WebAssembly コードの例を示しています。このコードは、Web ブラウザまたは WebAssembly をサポートするランタイム環境によって実行される、 .watテキスト形式 (WebAssembly の人間が読めるテキスト表現) と.wasmバイナリ形式 (以下で16 進数で表現される生のバイトコード) の両方 で示されています。
すべての整数定数は、スペース効率の高い可変長LEB128エンコーディングを使用してエンコードされます。[107]
WebAssemblyテキスト形式は、 S式を使用した折り畳み形式でより標準的に記述されます。命令と式の場合、この形式は純粋に構文上の糖衣であり、線形形式と動作上の違いはありません。[108]を通じてwasm2wat、上記のコードは次のように逆コンパイルされます。
( module
( type $t0 ( func ( param i64 ) ( result i64 )))
( func $f0 ( type $t0 ) ( param $p0 i64 ) ( result i64 )
( if $I0 ( result i64 ) ;; $I0 は未使用のラベル名です
( i64.eqz
( local.get $p0 )) ;; 名前 $p0 はここでは 0 と同じです
( then
( i64.const 1 ))
( else
( i64.mul
( local.get $p0 )
( call $f0 ;; 名前 $f0 はここでは 0 と同じです
( i64.sub
( local.get $p0 )
( i64.const 1 ))))))))
モジュールはコンパイラによって暗黙的に生成されます。関数はバイナリ内の型テーブルのエントリによって参照され、したがって型セクションとtype逆コンパイラによって出力されます。[109]コンパイラと逆コンパイラはオンラインでアクセスできます。[110]
参照
注記
参考文献
- ^ "WebAssembly/design/Semantics.md". GitHub . 2021年2月23日閲覧。
WebAssemblyコードは、構造化スタックマシンと考えることができます。これは、ほとんどの計算で値のスタックを使用するマシンですが、制御フローはブロック、if、ループなどの構造化された構成要素で表現されます。実際には、実装では実際の値スタックや制御用の実際のデータ構造を維持する必要はなく、そうしているかのように動作するだけで済みます。
- ^ Mozilla. 「WebAssembly テキスト形式を理解する」MDN Web Docs . 2019 年12 月 9 日閲覧。
- ^ 「Introduction — WebAssembly 1.0」。webassembly.github.io 。2019年6 月 18 日閲覧。WebAssembly
はオープン スタンダードです...
- ^ 「Introduction — WebAssembly 1.0」。webassembly.github.io 。 2019年6月18日閲覧。WebAssembly
は...コード形式です。
- ^ ab "Conventions — WebAssembly 1.0". webassembly.github.io . 2019 年5 月 17 日閲覧。
WebAssembly は、複数の具体的な表現 (バイナリ形式とテキスト形式) を持つプログラミング言語です。どちらも共通の構造にマップされます。
- ^ 「Introduction — WebAssembly 1.0」。webassembly.github.io 。 2019年6月18日閲覧。...
この仕様は、Webなどの特定の埋め込み環境へのインターフェースを定義する追加のドキュメントによって補完されます。これらはそれぞれ、特定の環境に適したWebAssemblyアプリケーションプログラミングインターフェース(API)を定義します。
- ^ “Introduction — WebAssembly 1.1”. webassembly.github.io . 2021年2月19日閲覧。
その主な目的は、Web上で高性能なアプリケーションを実現することですが、Web固有の仮定を立てたり、Web固有の機能を提供したりすることはないため、他の環境でも採用できます。
- ^ Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (2017 年 6 月 14 日). 「WebAssembly で Web をスピードアップ」. SIGPLAN Notices . 52 (6): 185–200. doi : 10.1145/3140587.3062363 . ISSN 0362-1340.
Web は WebAssembly の主な目的ですが、その設計は Web や JavaScript 環境に依存していません。これは複数のコンテキストに埋め込むために特別に設計されたオープン スタンダードであり、将来的にはスタンドアロン実装が利用可能になると期待されています。
- ^ abc 「ウェブの外側: Emscripten · V8 を使用したスタンドアロンの WebAssembly バイナリ」。v8.dev。2020年7 月 28 日閲覧。
- ^ abc 「Wasmer - The Universal WebAssembly Runtime」。wasmer.io 。 2021年2月19日閲覧。
すべてをWebAssemblyにコンパイルします。任意のOSで実行したり、他の言語に埋め込んだりできます。
- ^ World Wide Web Consortium. 「WebAssembly Core 仕様」. World Wide Web Consortium (W3) . 2019 年12 月 9 日閲覧。
- ^ Couriol, Bruno. 「WebAssembly 1.0 が W3C 勧告となり、ブラウザーでネイティブに実行できる 4 番目の言語に」。infoq.com。2019年12 月 9 日閲覧。
- ^ 「WebAssembly 仕様 — WebAssembly 1.1」。webassembly.github.io 。2021年3 月 22 日閲覧。
- ^ 「プログラミング言語ソフトウェア賞」www.sigplan.org。
- ^ Bright, Peter (2015 年 6 月 18 日). 「Web にバイトコードが登場: WebAssembly」. Ars Technica . Condé Nast .
- ^ ab 「新しいバイトコードアライアンスが、ウェブのセキュリティ、ユビキタス性、相互運用性をパーベイシブコンピューティングの世界にもたらす」。Mozilla 。 2019年11月12日。 2019年5月27日閲覧。
- ^ 「ローンチバグ」。GitHub / WebAssembly / design。2015年6月11日。
- ^ Wagner, Luke (2016 年 3 月 14 日)。「WebAssembly のマイルストーン: 複数のブラウザーでの実験的なサポート」。Mozilla Hacks。
- ^ Thompson, Seth (2016 年 3 月 15 日)。「V8 での WebAssembly の実験的サポート」。V8 ブログ。
- ^ Zhu, Limin (2016 年 3 月 15 日)。「Microsoft Edge での WebAssembly 実験のプレビュー」。Microsoft Edge 開発者ブログ。
- ^ Lardinois, Frederic (2015 年 6 月 17 日). 「Google、Microsoft、Mozilla などが協力して Web 用の新しいバイナリ形式 WebAssembly を発表」. TechCrunch . 2017 年12 月 24 日閲覧。
- ^ Avram, Abel (2017 年 5 月 31 日)。「Google が PNaCl のサポートを削除」。InfoQ。2017年12 月 22 日閲覧。
- ^ 「WebAssembly: Web 用のバイナリ形式」。②ality – JavaScript など。 2015 年 6 月 18 日。
- ^ 「Staring at the Sun: Dalvik vs. ASM.js vs. Native」。blog.mozilla.org。2013 年 8 月。2019年12 月 7 日閲覧
。asm.js の方が優れたスコアを示した 1 つのスコアを除いても、ネイティブ C++ コードの約 70% の速度で実行されます。
- ^ Arjun、Jangda、Abhinav Powers、Bobby Berger、Emery Guha (2019 年 1 月 25 日)。Not So Fast: WebAssembly とネイティブ コードのパフォーマンスの分析。OCLC 1106328738 。
{{cite book}}: CS1 maint: 複数の名前: 著者リスト (リンク) - ^ ab Krill, Paul (2017 年 3 月 6 日). 「WebAssembly がブラウザーで使用できるようになりました」. InfoWorld . 2017 年12 月 23 日閲覧。
- ^ 「WebAssembly First Public Working Drafts」W3C、2018年2月15日。 2018年4月20日閲覧。
- ^ 「WebAssembly Core 仕様」。W3C。2018 年 2 月 15 日。2018年4 月 20 日閲覧。
- ^ 「WebAssembly JavaScript Interface」。W3C。2018年2月15日。 2018年4月20日閲覧。
- ^ 「WebAssembly Web API」。W3C。2018年2月15日。 2018年4月20日閲覧。
- ^ 「WebAssembly ワーカー ベース スレッド - Chrome プラットフォームのステータス」。chromestatus.com。2022年2月 19 日閲覧。
- ^ 「WebAssembly仕様 — WebAssembly 2.0(ドラフト2022-09-01)」。webassembly.github.io 。 2022年9月9日閲覧。
- ^ 「WebAssembly 2.0 最初の公開ワーキングドラフト | W3C ニュース」。2022 年 4 月 19 日。2022年9 月 9 日閲覧。
- ^ 「非 Web 埋め込み」。WebAssembly。2019年5 月 15 日閲覧。
- ^ 「非 Web 埋め込み」。GitHub / WebAssembly。2019年5 月 15 日閲覧。
- ^ Freese, Danny (2023 年 10 月 3 日)。「Proxy-Wasm: プロキシ用の WebAssembly」。ブログ。Kong。2024年5 月 6 日閲覧。
- ^ 「proxy-wasm/spec: WebAssembly for Proxies (ABI 仕様)」。GitHub。2024年5 月 6 日閲覧。
- ^ 「WebAssembly のサポートがすべての主要ブラウザに導入されました」。Mozillaブログ。2017 年11 月 21 日閲覧。
- ^ 「EdgeHTML 16 での新しい JavaScript 最適化、WebAssembly、SharedArrayBuffer、Atomics の導入」。Microsoft Edge 開発者ブログ。2017 年 10 月 31 日。2017年11 月 21 日に閲覧。
- ^ 「WebAssembly | 使えますか... HTML5、CSS3 などのテーブルをサポートします」。canIuse.com 。2024 年3 月 1 日閲覧。
- ^ 「asm.js | 使用できますか... HTML5、CSS3 などのテーブルをサポートします」。caniuse.com 。2024 年9 月 29 日閲覧。
- ^ 「WebAssembly 参照型 | 使用できますか... HTML5、CSS3 などのサポート テーブル」caniuse.com 。 2024 年3 月 3 日閲覧。
- ^ 「Wasmtime — WebAssemblyとWASIのための小型で効率的なランタイム」wasmtime.dev . 2020年12月18日閲覧。
- ^ 「ロードマップ」 。 2021年12月7日閲覧。
- ^ Ball, Kevin (2018年6月26日). 「WebAssemblyがWeb開発の未来を加速させる方法」。2019年2月12日時点のオリジナルよりアーカイブ。2018年10月22日閲覧。
- ^ ab "Awesome WebAssembly Languages". GitHub . 2018年6月26日. 2022年2月15日閲覧。
- ^ Zakai, Alon [@kripken] (2019年10月21日). 「EmscriptenはデフォルトでアップストリームのLLVM wasmバックエンドに切り替わりました! / 詳細:https://groups.google.com/forum/#!topic/emscripten-discuss/NpxVAOirSl4」 (ツイート) . 2019年10月22日閲覧– Twitter経由。
- ^ 「開発者ガイド - WebAssembly」。webassembly.org 。2019年6月10日閲覧。
- ^ 「新しい C/C++ モジュールを WebAssembly にコンパイルする」。MDN Web Docs。2019年6 月 10 日閲覧。
- ^ 「WebAssembly へのビルド — Emscripten 1.38.33 ドキュメント」。emscripten.org。2019年6 月 10 日閲覧。
- ^ 「C ライブラリを Wasm に Emscripting する | Web」。Google Developers。2019年6 月 10 日閲覧。
- ^ 「LLVM 8.0.0 リリースノート — LLVM 8 ドキュメント」releases.llvm.org . 2019 年10 月 22 日閲覧。
- ^ ab "WebAssembly High-Level Goals". GitHub / WebAssembly / design . 2015 年 12 月 11 日。
- ^ Krill, Paul (2017 年 11 月 29 日). 「Rust 言語に WebAssembly の直接コンパイルが登場」. InfoWorld . 2017 年12 月 24 日閲覧。
- ^ 「Blazor に関するよくある質問 (FAQ)」。blazor.net。2018年6 月 18 日閲覧。
- ^ AssemblyScript/assemblyscript、The AssemblyScript Project、2020年9月9日、 2020年9月9日閲覧
- ^ 「WebAssembly ガベージ コレクション (WasmGC) が Chrome でデフォルトで有効になりました | ブログ」。Chrome for Developers 。2023 年12 月 11 日閲覧。
- ^ 「Bolero: WebAssembly での F#」fsbolero.io . 2019 年7 月 25 日閲覧。
- ^ 「ガベージコレクションされたプログラミング言語をWebAssembly・V8に効率的に導入する新しい方法」v8.dev 。 2023年12月11日閲覧。
- ^ 「Pyodide: 科学的Pythonスタックをブラウザに導入 – Mozilla Hacks - Web開発者ブログ」。Mozilla Hacks – Web開発者ブログ。 2020年9月9日閲覧。
- ^ 「Julia in the Browser」. nextjournal.com . 2019年4月9日閲覧。
- ^ 「WebAssembly プラットフォーム by tshort · プルリクエスト #2 · JuliaPackaging/Yggdrasil」。GitHub。2019年4 月 9 日閲覧。
- ^ Fischer, Keno (2019 年 7 月 22 日)、GitHub - Keno/julia-wasm: Wasm で julia を実行する。、2019 年7 月 25 日閲覧
- ^ 「MRuby in Your Browser」ruby.dj . 2019年7月25日閲覧。
- ^ Paul Krill (2020年8月24日). 「Ring言語のアップグレードはWebAssemblyに焦点を当てています」. InfoWorld .
- ^ 「ウェブブラウザでリング」 。 2024年8月17日閲覧。
- ^ 「JavaからWebAssemblyへのコンパイラ - CheerpJ」 。 2023年4月27日閲覧。
- ^ JWebAssembly、2023年4月27日 – GitHub経由
- ^ 「TeaVM — 概要」www.teavm.org . 2023年4月27日閲覧。
- ^ 「Kotlin を Web に導入する」 。2023年12 月 11 日閲覧。
- ^ Deleuze, Sébastien (2023年2月13日). 「Kotlin/Wasmの大きな可能性」. seb.deleuze.fr . 2023年12月11日閲覧。
- ^ "stdweb - Rust". docs.rs . 2019 年6 月 5 日閲覧。
このクレートの目標は、Web API への Rust バインディングを提供し、Rust と JavaScript 間の高度な相互運用性を実現することです。
- ^ "web_sys - Rust". docs.rs . 2019 年6 月 5 日閲覧。Web
API の生の API バインディング。これは、ブラウザーが Web 上で提供するすべての API へのバインディングを提供する、ブラウザー WebIDL から手続き的に生成されたクレートです。
- ^ 「The State of WebAssembly 2023」。スコット・ロジック。2023年10月18日。 2024年3月14日閲覧。
- ^ 「Wasm にはより優れたメモリ管理ストーリーが必要です · Issue #1397 · WebAssembly/design」。GitHub。2021年2月 15 日閲覧。
- ^ “WebAssembly/content-security-policy”. GitHub . 2021年2月17日閲覧。
- ^ 「948834 - chromium - Web の前進を支援するオープンソース プロジェクト。 - Monorail」。bugs.chromium.org。2021年2 月 17 日閲覧。
- ^ ab 「'unsafe-eval' なしで Chrome で WebAssembly を使用する方法はありません · Issue #7 · WebAssembly/content-security-policy」。GitHub。2021年2月 17 日閲覧。
- ^ abc Neumann, Robert; Toro, Abel (2018年4月19日). 「ブラウザ内マイニング: Coinhive と WebAssembly」. Forcepoint . 2019年6月8日閲覧。
- ^ Cimpanu、Catalin (2018 年 6 月 24 日)。「WebAssembly の変更により、Meltdown および Spectre ブラウザ パッチが役に立たなくなる可能性があります」。Bleeping Computer。2019年6 月 8 日閲覧。
- ^ Sanders, James (2018年6月25日). 「不透明なWebAssemblyコードがオンラインでのSpectre攻撃のリスクを高める可能性」. Tech Republic . 2019年6月9日閲覧。
- ^ R, Bhagyashree (2018年10月30日). 「Google Chrome 70 は、マルチスレッド Web アプリケーションを構築するために WebAssembly スレッドをサポートするようになりました」. Packt Pub . 2019年6月9日閲覧。
- ^ ab ロンカー、アイシュワリヤー;シッデシュのチャンドラヤン(2018年10月)。 「WebAssembly の暗い側面」。ウイルス速報。2019 年6 月 8 日に取得。
- ^ Segura, Jérôme (2017年11月29日). 「あなたの近くのブラウザに永続的なドライブバイ暗号マイニングがやってくる」Malwarebytes . 2019年6月8日閲覧。
- ^ 「最近の調査では、WebAssembly を使用している Web サイトの 50% が悪意のある目的でそれを適用していると推定されています」。InfoQ。2019年11 月 3 日閲覧。
- ^ Musch, Marius; Wressnegger, Christian; Johns, Martin; Rieck, Konrad (2019 年 6 月)。「Web の新参者: WebAssembly の普及状況に関する調査」。侵入とマルウェアの検出、および脆弱性評価(PDF)。コンピュータ サイエンスの講義ノート。第 11543 巻。侵入とマルウェアの検出、および脆弱性評価。pp. 23–42。doi : 10.1007 /978-3-030-22038-9_2。ISBN 978-3-030-22037-2. S2CID 184482682. 2022年7月26日時点の オリジナル(PDF)からアーカイブ。2022年2月15日閲覧。スライド (PDF) 2019年11月3日にWayback Machineにアーカイブされました
- ^ Aaron Hilbig、Daniel Lehmann、Michael Pradel (2021 年 4 月)。「現実世界の WebAssembly バイナリの実証的研究: セキュリティ、言語、ユースケース」(2021 年 4 月アーカイブ) https://software-lab.org/publications/www2021.pdf
- ^ Watt, Conrad (2018 年 1 月 8 日)。 「 WebAssembly 仕様の機械化と検証」。第 7 回 ACM SIGPLAN 国際認定プログラムおよび証明会議の議事録。CPP 2018。ロサンゼルス、カリフォルニア州、米国: ACM。pp. 53–65。doi :10.1145/ 3167082。ISBN 978-1-4503-5586-5. S2CID 9401691。
- ^ 「 WebAssembly System Interface Repo」。GitHub / WebAssembly。2020年2月10日。
- ^ 「Capabilities に関する追加の背景情報」。GitHub。bytecodealliance。2022年 3 月 4 日。
- ^ 「WASI の標準化: Web 外で WebAssembly を実行するためのシステム インターフェース - Mozilla Hacks - Web 開発者ブログ」。Mozilla Hacks - Web 開発者ブログ。
- ^ 「 reference-sysroot リポジトリ」。GitHub / WebAssembly。2020年1月12日。
- ^ 「 wasm-c-api リポジトリ」。GitHub / WebAssembly。2020年2月3日。
- ^ Hykes, Solomon (2019年3月27日). “Solomon Hykes on X”. Twitter . 2024年9月29日閲覧。
{{cite web}}: CS1 maint: url-status (リンク) - ^ 「設計の根拠」。GitHub / WebAssembly / design。2016年 10 月 1 日。
- ^ 「Portability - WebAssembly」. webassembly.org . 2020年7月28日閲覧。
- ^ 「Conventions — WebAssembly 1.0」。webassembly.github.io 。 2019年11月12日閲覧。
- ^ 「Introduction — WebAssembly 1.0」。webassembly.github.io 。 2019年5月17日閲覧。
- ^ 「Instructions — WebAssembly 1.0」。webassembly.github.io 。 2019年11月12日閲覧。
- ^ Lively, Thomas (2021年2月19日) [2021年2月5日にプルリクエストがオープンされました]。「tlivelyによる最終オペコード · プルリクエスト#452 · WebAssembly/simd · GitHub」。Bytecode Alliance 。 2021年5月12日閲覧– GitHub経由。
- ^ Delendik, Yury (2021年2月19日) [SIMDの変更は2021年2月19日にコミットされました]。「ファイル wasm-tools/expr.rs at b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub」。Bytecode Alliance 。 2021年5月12日取得– GitHub経由。
- ^ 「ngzhianによる最終オペコードでインタープリターとテキストを更新 · Pull Request #486 · WebAssembly/simd」。GitHub 。 2021年5月14日閲覧。
- ^ “WebAssembly/simd”. GitHub . 2021年5月14日閲覧。
- ^ WebAssembly/relaxed-simd、WebAssembly、2021年5月3日、 2021年5月14日閲覧
- ^ 「JVM を 40 倍高速化した方法」astojanov.github.io . 2021 年2 月 17 日閲覧。
- ^ 「ロードマップ」。WebAssembly。2017年3月。
- ^ WebAssembly Community Group (2020 年 1 月)。「WebAssembly 仕様リリース 1.0」。2020 年1 月 13 日閲覧。
- ^ 「折りたたまれた手順」。GitHub。/ WebAssembly / 仕様
- ^ 「モジュール (バイナリ)」。WebAssembly 1.0。
- ^ 「WebAssembly Binary Toolkit (wabt) デモ」。webassembly.github.io。
この記事には、フリー コンテンツ作品 からのテキストが組み込まれています。Apache License 2.0 (ライセンス ステートメント/許可) に基づいてライセンスされています。テキストは Text Format、jfbastien、rossberg-chromium、kripken、titzer、s3ththompson、sunfishcode、lukewagner、flagxor、enricobacis、c3d、binji、andrewosh、GitHub から取得されました。WebAssembly/デザイン。
外部リンク
- 公式サイト
- W3C コミュニティ グループ
- WebAssembly 仕様
- WebAssembly 設計ドキュメント
- 「WebAssembly」、MDN Web ドキュメント – ブラウザの互換性と仕様に関する情報(WebAssembly JavaScript API)
