WebAssembly: 意味、利点、ユースケースなど
WebAssembly または Wasm は、任意のコンピューター アーキテクチャで実行できるプログラムを作成するためのバイナリ コード形式です。
このシステムは、仮想マシンと、コンピュータ コードを C や C++ などのプログラミング言語から人間が読める .wat およびバイナリ .wasm 形式に変換するコンパイラで構成されます。
WebAssembly の当初の目標は、ブラウザー内でネイティブに近い実行速度を可能にすることで、プログラマーが Web ページ用の高性能アプリケーションを開発できるようにすることでした。 しかし、この技術は現在、ブラウザーを超えてクラウドへと進化しているようです。
このガイドでは、この進化するテクノロジ、その長所と短所、および将来の可能性について知っておく必要があるすべてを示します。
WebAssembly とは?
WebAssembly 仮想マシン上で実行され、さまざまな言語がコンパイルできるバイナリ コード形式です。 移植できるように設計されており、Web ブラウザーまたはサーバー アプリケーションとして実行できます。
2017 年に最初にリリースされた WebAssembly は、3 年以来 W2019C の推奨事項であり、Mozilla、Google、Microsoft、Red Hat などを含む多数の貢献者によって維持されています。
当初の目標は、ブラウザー内の C/C++ アプリケーションで見られるように、ネイティブに近い実行速度を開発することでした。 また、下位互換性があり、JavaScript に準拠している、安全で、オープン スタンダードで、デバッグ可能で、バージョンのない Web 標準であることも意図されています。
WebAssembly はどのように機能しますか?
WebAssembly は、Java や JavaScript などのランタイム エンジンとして設計されており、ブラウザーやサーバー環境に埋め込んで、.wasm バイナリまたは .wat テキスト形式でコンパイルされたコンピューター コードを実行できます。
WebAssembly を実行するためのコードを記述するために、開発者はサポートされている多数の言語のいずれかでプログラムを記述します。 次に、WebAssembly コンパイラを使用して、AOT (Ahead of Time) または JIT (Just In Time) でコンパイルします。
このコードは、実行環境でほとんどの作業を行うことができますが、ブラウザーの DOM オブジェクトにアクセスしたり変更したりすることはできません。 このような対話は、JavaScript を通過する必要があります。
サンプル WebAssembly アプリケーションの作成方法
以下に示すように、わずか数ステップで Web ブラウザ用のシンプルな Wasm アプリケーションを作成できます。
- ダウンロードしてインストール エムスクリプトSDK.
- サンプルを書く helloworld.c コーディングするか、必要に応じて C++/Rust で実行します。
- ラン emcc helloworld.c -s WASM=1 -s helloworld.html ターミナルで Emscripten を使用してコードを WebAssembly にコンパイルします。 必要な Wasm バイナリ、HTML、および JavaScript ファイル (グルー コード) が作成されます。
- Web ブラウザーを介して helloworld.html ページを提供します。
WebAssembly の利点
WebAssembly とその関連技術を採用する理由は数多くあります。
- ネイティブに近いパフォーマンス – WebAssembly には、C や C++ などの低レベル言語と同様のパフォーマンスを提供するような低レベルの設計があります。
- セキュリティ – システムは、システムへのアクセスが制限された仮想環境で分離することにより、安全になるように設計されています。
- オープンスタンダード – 多くの組織や個人が WebAssembly に貢献しており、これは W3C の公式勧告です。
- 軽量 – WebAssembly は、仮想マシンで実行されるバイナリ コードにコンパイルされます。 このコードは移植可能であり、システム ファイルを必要とせず、付属していません。
- 多言語サポート – 50 以上の言語を WebAssembly にコンパイルできます。
- プラットフォームに依存しない – WebAssembly 仮想マシンは、各アーキテクチャが同じランタイム環境を提供するように設計されています。 開発者がしなければならないことは、WebAssembly のコードを記述することだけです。
WebAssembly の限界
- 編集中です – 標準はまだ開発中であるため、多くの機能と改善がまだ行われていません。
- ガベージコレクションなし – WebAssembly にはまだガベージ コレクションがありませんが、間もなく実装される可能性があります。
- DOM アクセスなし – WebAssembly から Web ブラウザーの DOM に直接アクセスすることはできません。JavaScript を経由する必要があります。
WebAssembly 対 Java
Java は、WebAssembly の最も初期の実装の一種です。 一度書けばどこでも実行できる言語として設計されましたが、途中で多くの問題が発生しました。
Java と同様に、WebAssembly は RE (ランタイム環境) を使用してコードを実行しますが、Java とは異なり、選択した言語で WebAssembly を作成できます。
WebAssembly 対 JavaScript
WebAssembly はブラウザーまたは他のホスト環境で実行されます。 JavaScriptを. ただし、JavaScript がテキスト形式で実行環境に配信され、ジャスト イン タイムでコンパイルされる場合、WebAssembly にはテキスト形式とバイナリ形式の両方があります。
Web ブラウザー内では、JavaScript は DOM にアクセスできますが、WebAssembly はアクセスできません。 ただし、実行速度に関しては、WebAssembly はネイティブ コードに近い実行速度で JavaScript を上回っています。
速度は WebAssembly の優れた点であり、WebAssembly が非常に多くの用途に理想的である理由です。 JavaScript を使用して WebAssembly をブラウザーにロードすると、XNUMX つのコードを一緒に実行してリソースを共有できます。
WebAssembly 対 Docker 対 Kubernetes
DockerとKubernetesはクラウドを支える人気の技術の2つです コンピューティングDocker は、開発者がアプリケーションとそのすべてのシステム依存関係を 1 つのパッケージにパッケージ化できるようにするコンテナ テクノロジです。これにより、1 秒以内に任意のクラウド環境にアプリケーションを簡単に展開できます。
一方Kubernetesは オープンソースの Docker、CRI-O、containerd、Kubernetes CRI (Container Runtime Interface) 実装などのコンテナ化されたアプリケーションを管理および展開するためのシステム。Kubernetes を使用すると、複数のサーバーまたは仮想マシンにわたるクラウド展開の拡張も簡単になります。
この観点から、WebAssembly は Docker に似ており、Kubernetes を使用してコンテナー化されたクラウド アプリケーションとして実行することができます。 また、Docker よりも多くの利点がありますが、おそらくそれに取って代わるものではありません。
ブラウザを超えて
当初、Web サーバーがありました。 フル マシンをサーバー専用にする必要がありました。 次に、サーバーを XNUMX つまたは複数の CPU スレッドで実行できるようにする仮想マシン (VM) が登場しました。 それでも、専用の VM が必要でした。
クラウド·コンピューティング アプリケーションをコンテナ化することで、必要なときにだけサーバーを起動して実行できるようにしました。 これにより、使用した分だけ支払う必要があり、専用のマシンが不要になるため、コストの削減につながりました。 しかし、まだいくつかの問題があります。
まず、dockerファイルは数ギガバイトの大きさになる可能性があり、これは スタートアップ およびその他の管理上の問題があります。ただし、同様の Wasm ファイルは、プリコンパイルされたバイナリであるため、数 MB しか大きくなりません。これにより、Docker よりも起動時間がはるかに速くなり、特定の時間重視のアプリケーションに最適です。
第二に、WebAssembly の設計は、開発者がシステム リソースを管理および割り当てる必要がないことを意味します。開発者は、選択したプログラミング言語を使用して簡単に要点をつかむことができます。
これらの機能により、WebAssembly はクラウド マイクロ サービスの実行に最適ですが、オペレーティング環境とファイル システムをより詳細に制御する必要があるアプリケーションには、Docker アプリケーションが依然として適しています。
詳細については、次のようなプロジェクト ワスムクラウド • ワズムエッジ WebAssembly を実行可能なコンピューティング プラットフォームに開発中です。
Wasm ユースケース
WebAssembly には、その独特の性質を考えると、多くのユース ケースがあります。 それらは XNUMX つの主要なグループに分けることができます。 ブラウザー内、ブラウザー外、およびハイブリッドのセットアップ。
ブラウザ内タイプは自明であり、ブラウザ外は主にサーバー、IoT、およびクラウドの展開を指しますが、ハイブリッドは XNUMX つの組み合わせを指します。
以下は、Wasm が優れているユースケースです。
- すでに存在する高性能コード – WebAssembly に移植できる古いが素晴らしいコード。
- 新しい高性能コード – ゼロから設計して実装する必要があるもの。
- デスクトップ アプリケーションを Web に移植する – これにより、次のような新しい種類の Web ベースのデスクトップ ソリューションが開かれる可能性があります。 ウェブベースのビデオ編集.
- クラウド·コンピューティング – 新しい機会のために Docker と Kubernetes と一緒に実行します。
以下は、Wasm が優れている特定のアプリケーションとシナリオを示しています。
- ビデオと画像編集
- ゲームデザイン
- AI
- 仮想および拡張現実アプリケーション
- 音楽アプリケーション
- P2Pアプリケーション
- サーバー側アプリケーション
- クラウド/クラスター計算
- コンピュータ支援設計
- OS プラットフォームのシミュレーション
- Encryption
- ローカル Web サーバー
- リモート デスクトップ アプリケーション
- 科学的な視覚化
- スマートフォンのハイブリッド ネイティブ アプリ
- IoT デバイス上
サポートされている言語とフレームワークのリスト
50 を超える言語が WebAssembly にコンパイルされます。最も人気のある言語の一部を次に示します。
- C
- C + +
- R
- ルビー
- スウィフト
- Go
- コトリン
- さび
- PHP
- ブレイザー – .NET 開発者向けのフレームワーク。
- Jwebアセンブリ – Java バイトコードと、JRuby、Jython、Groovy、Scala、Kotlin などの関連言語のコンパイラ。
- イチイ – WebAssembly を使用してマルチスレッド Web アプリを作成するための Rust フレームワーク。
- アセンブリスクリプト – WebAssembly コードを作成するために特別に設計された言語。
- 穀物 – 強く型付けされた関数型言語。
- 元子
より多くの言語を見つけることができます (茶事の話はこちらをチェック).
WebAssembly ランタイムとツールのリスト
- 主要なブラウザーはすべて Wasm をサポートしています
- ピオダイド – Pandas、NumPy、SciPy などの Python 科学スタックを備えたブラウザー上の Python ランタイム。
- ワーム
- わぎ – マイクロサービスと Web アプリ向け
- ワシ – モジュラー システム インターフェイス
- ワズムタイム – 高速で安全な WebAssembly ランタイム。
- ワスマー
- ルセット
- ワズムクラウド – クラウド環境
- クラスレット – Rust で記述された、Wasm を実行するための Kubernetes kublete。
- ワズムエッジ – クラウドおよびエッジ ランタイム環境
まとめ
WebAssembly とそれがコンピューティングにもたらすものへの旅の終わりに来ました。 ご覧のとおり、多くの可能性が秘められています。
それはまだ進行中の作業ですが、絶え間なく開発されています。 興味のある方は、さらに詳しい情報をご覧ください。 (茶事の話はこちらをチェック), (茶事の話はこちらをチェック), (茶事の話はこちらをチェック).