WebAssembly ベースのアプリケーションを構築するためのツールキットである Wasmer 3.0 が利用可能になりました

Wasmer プロジェクトの XNUMX 番目のメジャー リリースが導入され、WebAssembly モジュールを実行するためのランタイムが開発されます。このランタイムは、さまざまなオペレーティング システム上で実行できるユニバーサル アプリケーションの作成や、信頼できないコードを分離して実行するために使用できます。 プロジェクト コードは Rust で書かれており、MIT ライセンスに基づいて配布されます。

XNUMX つのアプリケーションを異なるプラットフォームで実行する機能は、コードを低レベルの WebAssembly 中間コードにコンパイルすることによって提供されます。このコードは、任意の OS 上で実行したり、他のプログラミング言語のプログラムに埋め込んだりできます。 これらのプログラムは、WebAssembly 疑似コードを実行する軽量のコンテナーです。 これらのコンテナーはオペレーティング システムに関連付けられておらず、もともと任意のプログラミング言語で記述されたコードを含めることができます。 Emscripten ツールキットを使用して、WebAssembly にコンパイルできます。 WebAssembly を現在のプラットフォームのマシン コードに変換するために、さまざまなコンパイル バックエンド (Singlepass、Cranelift、LLVM) とエンジン (JIT またはマシン コード生成を使用) の接続がサポートされています。

アプリケーションはサンドボックス環境のメイン システムから分離されており、宣言された機能 (各リソース (ファイル、ディレクトリ、ソケット、システム コールなど) に対するアクションの機能管理に基づくセキュリティ メカニズム) にのみアクセスできます。アプリケーションには適切な権限を与える必要があります)。 アクセス制御とシステムとの対話は、WASI (WebAssembly System Interface) API を使用して提供されます。この API は、オペレーティング システムが提供するファイル、ソケット、その他の機能を操作するためのプログラミング インターフェイスを提供します。

このプラットフォームを使用すると、ネイティブ アセンブリに近いアプリケーション実行パフォーマンスを実現できます。 WebAssembly モジュールのネイティブ オブジェクト エンジンを使用すると、マシン コード (プリコンパイルされた .so、.dylib、および .dll オブジェクト ファイルを生成する「wasmer combile -native」) を生成できます。実行に必要なランタイムは最小限ですが、すべてのサンドボックス分離は保持されます。特徴。 Wasmer が組み込まれたプリコンパイル済みプログラムを提供することが可能です。 Rust API と Wasm-C-API は、アドオンと拡張機能を作成するために提供されています。

WebAssembly コンテナを起動するには、外部依存関係なしで Wasmer をランタイム システムにインストールし (「curl https://get.wasmer.io -sSfL | sh」)、必要なファイル (「wasmer test.wasm」) を実行するだけです。 )。 プログラムは通常の WebAssembly モジュールの形式で配布され、WAPM パッケージ マネージャーを使用して管理できます。 Wasmer は、WebAssembly コードを Rust、C/C++、C#、D、Python、JavaScript、Go、PHP、Ruby、Elixir、Java プログラムに埋め込むために使用できるライブラリとしても利用できます。

Wasmer 3.0 の主な変更点:

  • 任意のプラットフォーム用のネイティブ実行可能ファイルを作成する機能が追加されました。 「wasmer create-exe」コマンドは、WebAssembly 中間コード ファイルを、Wasmer 自体をインストールしなくても実行できる Linux、Windows、および macOS プラットフォーム用の自己完結型実行可能ファイルに変換するように完全に再設計されました。
  • 「wasmer run」コマンドを使用して、wapm.io ディレクトリにある WAPM パッケージを起動できます。 たとえば、「wasmer run python/python」を実行すると、wapm.io リポジトリから Python パッケージがダウンロードされ、実行されます。
  • Wasmer Rust API は完全に再設計され、メモリの操作スタイルが変更され、Wasm オブジェクトをストア構造に安全に保存する機能が提供されました。 リニアメモリ領域へのデータの読み書きを可能にする新しい MemoryView 構造が提案されました。
  • Web ブラウザーで Wasmer を実行し、wasm-bindgen ライブラリーを使用して JavaScript からそれと対話するために、一連の wasmer-js コンポーネントが実装されました。 wasmer-js の機能は、通常のオペレーティング システム上で Wasmer を実行するように設計された wasmer-sys コンポーネントに対応します。
  • エンジンは簡素化されています。 JIT、動的リンク、静的リンク (Universal、Dylib、StaticLib) 用の個別のエンジンの代わりに、XNUMX つの共通エンジンが提供されるようになり、コードの読み込みと保存はパラメータ設定のレベルで制御されます。
  • アーティファクトを逆シリアル化するには、rkyv フレームワークが使用されます。これにより、ゼロコピー モードでの動作が保証されます。 これには追加のメモリ割り当ては必要なく、最初に提供されたバッファのみを使用して逆シリアル化が実行されます。 rkyv を使用すると起動速度が大幅に向上しました。
  • Singlepass シングルパス コンパイラが改良され、複数値関数のサポートが追加され、信頼性が向上し、例外処理フレームのサポートが追加されました。
  • WASI (WebAssembly System Interface) API の実装が改善されました。 ファイル システムを操作するための WASI ソフトウェア インターフェイスの問題は解決されました。 内部型は WAI (WebAssembly Interface) を使用して再設計されており、将来的には一連の新機能が可能になります。

出所: オープンネット.ru

コメントを追加します