作って学ぶWebAssembly ーTypeScriptとDenoで作るWasmランタイムー
- ¥ 1,500
サイズ:A5 ページ数:169ページ
目次
第1章 はじめに 1.1 WebAssembly 1.2 Deno 1.3 雛形の作成 第2章 wasmを読み込む 2.1 もっとも単純なモジュール 2.2 定数 2.3 変数 2.4 算術演算 2.5 条件分岐 2.6 繰り返し 2.7 関数呼び出し 第3章 wasmを生成する 3.1 もっとも単純なモジュール 3.2 定数 3.3 変数 3.4 算術演算 3.5 条件分岐 3.6 繰り返し 3.7 関数呼び出し 3.8 wasmを書き換える 第4章 wasmを実行する 4.1 スタックマシン 4.2 設計 4.3 準備 4.4 単純な命令 4.5 制御命令 4.6 ユークリッドの互除法 第5章 拡張のヒント 5.1 命令の追加 5.2 データ型の追加 5.3 JSとのやり取り 5.4 タイプの追加 付録A watを読み込む
説明
TypeScriptとDenoを使用して簡易的なWebAssemblyランタイムを実装し、最終的には以下のwatをコンパイルしたwasmを実行して2数の最大公約数を求められるようになります。 (module (func (export "gcd") (param $small i32) (param $large i32) (result i32) (local $rem i32) (local $tmp i32) ;; $large must be larger than $small (if (i32.lt_s (local.get $large) (local.get $small)) (then ;; swap (local.set $tmp (local.get $large)) (local.set $large (local.get $small)) (local.set $small (local.get $tmp)) ) ) ;; gcd (block $block (loop $loop (local.set $rem (i32.rem_s (local.get $large) (local.get $small))) (local.get $rem) (br_if $block (i32.eqz)) (local.set $tmp (local.get $large)) (local.set $large (local.get $small)) (local.set $small (local.get $rem)) (br $loop) )) (local.get $small) ) )