このプロジェクトについて

Wagoは、完全にGoで記述されたWebAssemblyランタイムです。Wasmをインタープリタで実行するのではなく、モジュールを直接ネイティブマシンコードにコンパイルするため、CGOなしでGoプログラムに組み込むことができ、通常のGoビルドやクロスコンパイルを簡素に保つことができます。このプロジェクトは、高速、コンパクト、かつ拡張可能であることを特徴として掲げており、現在はベータ版であるため、APIや生成される.wagoアーティファクトが変更される可能性があるとしています。 プロジェクトが強調している特徴は以下の通りです: - 純粋なGo:組み込みにCツールチェーンを必要としません。 - 標準重視:ランタイムは公式のWebAssemblyテストスイートに加え、ファジングや実世界のコーパスに合格しているとされています。 - 拡張性:WASI、コンポーネントモデル、およびその他のホスト機能は、コアランタイムの外にプラグインとして存在します。 - スタンドアロン実行ファイル:.wasmファイルを小型のネイティブバイナリにコンパイルでき、READMEではCLIツールに有用であると提案されています。 - プラットフォーム:amd64およびarm64のLinux、macOS、Windowsに対応しており、WebAssemblyの機能カバー範囲はバックエンドによって異なります。詳細なカバー範囲は機能マトリクスファイルに記載されています。 インストール macOSとLinuxでは、ドキュメントにあるワンライナーでインストーラー形式のスクリプトをダウンロードしてshにパイプします。WindowsのPowerShellユーザーは、同等のirmコマンドを実行します。これによりマネージャーがインストールされ、その後ランタイムがインストールされます。ドキュメントサイトでは、代替のインストール方法、リリースチャネル、ソースからのビルドについて説明されています。 モジュールの実行 インストール後、モジュールを直接実行できます。例えば、引数を指定して小さなFibonacci Wasmファイルを実行すると、期待される結果が出力されます。スタンドアロンバイナリを作成するには、compileサブコマンドに.wasm入力と出力パスを指定します。生成された実行ファイルは、同じ引数を受け付けます。 GoからのWagoの利用 Go開発者は、go get github.com/wago-org/wago でモジュールを追加します。リポジトリには番号付きの例が含まれており、モジュールをコンパイルし、インスタンスを作成してエクスポートされた関数を呼び出す型付きランタイムの例などがあります。また、WagoをGoに組み込むための個別のドキュメントガイドが用意されています。 ホスト機能とプラグイン ホスト統合は意図的にコアランタイムの外に置かれています。プロジェクトはinitコマンドで初期化でき、WASI実装などのプラグインは wago-org/wasi のように名前で追加します。利用可能なプラグインを閲覧するためのプラグインレジストリサイトが提供されています。 パフォーマンス READMEによると、Wagoは数キロバイトのRAMを使用し、コンパイル時間はwazeroより約3倍速く、実行速度は約40%速いと主張しています。プロジェクトはベンチマークページとリポジトリ内のベンチマークディレクトリへのリンクを提供しています。これらの数値はメンテナー自身の測定結果であるため、実際に利用する前に自身のワークロードで確認する必要があります。 プロジェクトのステータスとライセンス WagoはApache License 2.0の下でリリースされており、無料で開発されています(スポンサーシップが推奨されています)。リポジトリには、ドキュメント、例、機能マトリクス、アーキテクチャ文書、ロードマップ、貢献ガイドライン、およびイシュートラッカーが含まれています。 全体として、WagoはCへの依存なしにWebAssemblyを実行または組み込みたいGo開発者や、ホスト機能をプラグイン経由で追加できる小型のランタイムコアを好む開発者をターゲットにしています。ベータ版であること、およびベンチマーク数値がプロジェクト自身によるものであることが、導入前に検討すべき主なポイントです。