⚙️
WebAssemblyとWasmerでHello, world!
WebAssemblyとは
- ウェブブラウザで動く新種のバイナリコード(仕様)
- サーバー側でも動くようにしようとしている(既に動く)
- 直接WebAssembly(以下Wasm)をコーディングする必要はない
- 様々な言語(C,C++,Rust等)からWasmにコンパイルして使う
https://developer.mozilla.org/ja/docs/WebAssembly/Concepts
Wasmer
Wasmをあらゆる環境で実行できるようにするもの(ランタイム)
- WASIとEmscriptenと互換性がある
- Wasmer以外に有名なランタイムはwasmtime
- 理想的にはどこでも動作するネイティブバイナリを生成することができる(3.0.0-beta)
https://wasmer.io/posts/wasm-as-universal-binary-format-part-1-native-executables
Let's try
環境
Wasmへのコンパイル
以前はemscriptenを使って、C/C++をwasmにコンパイルしていたが、zigがwasmへのコンパイルをサポートしているので、zigを利用する(便利!)。
zigのインストール 👉https://ziglang.org/learn/getting-started/#installing-zig
homebrewでzigをインストールできる。
brew install zig
hello.c
#include <stdio.h>
int main() {
printf("Hello world!\n");
}
wasmにコンパイル
zig build-exe -O ReleaseSmall -target wasm32-wasi hello.c -lc
Wasmの実行
wasmのランタイムには、wasmerを利用する。
wasmerのインストール 👉https://wasmer.io/
curl https://get.wasmer.io -sSfL | sh
wasmerで実行
wasmer hello.wasm
出力結果
Hello, world!
Discussion