C#からWebAssembly/WASIバイナリ生成可能に、.NET 8 SDKで実験的実装
マイクロソフトは、C#のコードからWASIに対応したWebAssemblyバイナリの生成を.NET 8 SDKで可能にする実験的実装「wasi-experimental」が追加されたと、ブログ「Extending WebAssembly to the Cloud with .NET」で明らかにしました。
WebAssembly System Interface provides a way for WebAssembly code to call and implement arbitrary APIs, safely and across languages.
— .NET (@dotnet) December 12, 2023
... and now, you can create WASI apps with #dotNET using the wasi-experimental workload in .NET 8. Learn more. https://t.co/fbr5t7X1nS pic.twitter.com/HLeXnqKAf4
WASI(WebAssembly System Interface)は、WebAssemblyバイナリをWebブラウザ上ではなくOS上のWebAssemblyランタイムで実行する際に、WebAssemblyからOSへのシステムコールを抽象化するための業界標準の仕様です。これにより、ファイスシステムの呼び出しなどOSの主要なシステムコールが抽象化されるため、WASIに対応したWebAssemblyバイナリはクロスプラットフォーム対応となります。
つまりwasi-experimentalによって、C#のコードからWindowsやmacOSやLinuxなどのさまざまOSおよびオンプレミスやクラウドなどの実行環境を問わない、さまざまな環境で実行可能なWebAssemblyバイナリが生成できることになります。
wasi-experimentalをインストール
具体的には.NET 8 SDKをインストールした後、wasi-experimentalをインストール。
dotnet workload install wasi-experimental
サンプルとして用意されている「wasi-console」テンプレートを試してみる。単純に「Hello, WASI Console!」を出力するコード。
$ dotnet new wasiconsole -o wasiconsole
$ cd wasiconsole
$ cat Program.cs
using System;
Console.WriteLine("Hello, WASI Console!");
WebAssemblyランタイムのwasmtimeを用意しておき、dotnet runコマンドで追加情報を与えつつ実行。
$ dotnet run
WasmAppHost --runtime-config /Users/rich/wasiconsole/bin/Debug
/net8.0/wasi-wasm/AppBundle/wasiconsole.runtimeconfig.json
Running: wasmtime run --dir . -- dotnet.wasm wasiconsole
Using working directory: /Users/rich/wasiconsole/bin/Debug
/net8.0/wasi-wasm/AppBundle
Hello, WASI Console!
このようにWebAssembly/WASIバイナリとしてアプリケーションが実行されています。
.NET 8ではWebAssembly/WASIに対応した実験的実装ですが、来年(2024年)登場予定の.NET 9では、コンポーネントモデルなどを実現する「WASI Preview 2」に対応する見通しだと説明されています。
あわせて読みたい
Google、AIによるコード補完やコード生成を実現する「Duet AI for Developers」正式リリース。数週間以内にGeminiを採用へ
≪前の記事
WASIのフルスペルを「WebAssembly System Interface」から「WebAssembly Standard Interface」へ変更しようという提案は延期に