⚙️

WebAssemblyとWasmerでHello, world!

2022/09/06に公開

WebAssemblyとは

  • ウェブブラウザで動く新種のバイナリコード(仕様)
  • サーバー側でも動くようにしようとしている(既に動く)
  • 直接WebAssembly(以下Wasm)をコーディングする必要はない
  • 様々な言語(C,C++,Rust等)からWasmにコンパイルして使う

https://developer.mozilla.org/ja/docs/WebAssembly/Concepts

Wasmer

https://github.com/wasmerio/wasmer
Wasmをあらゆる環境で実行できるようにするもの(ランタイム

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