Slide 1

Slide 1 text

GoとWASI ~超入門~ 2024/9/4 Go Connect #2 @sugar235711

Slide 2

Slide 2 text

2 sugar cat(@sugar235711) SWE || SRE パフォーマンスとセキュリティが好き 登壇者紹介

Slide 3

Slide 3 text

3 Agenda 1. WasmとWASI 2. GoとWASI 3. まとめ

Slide 4

Slide 4 text

4 スタックベースの仮想マシンのバイナリ命令フォーマット Wasmとは WasmとWASI セキュリティ ・サンドボックス環境と明示的な import ポータビリティ ・複数の言語からコンパイル可能 ・Wasmランタイムがあれば、 CPUやOSに依 存しない

Slide 5

Slide 5 text

5 Go 1.11以降Wasmへのビルドをサポート GoでWasmを使うには? WasmとWASI

Slide 6

Slide 6 text

6 ・各言語ごとに Wasmモジュールの実装がされている ・実行方法も異なる GoでWasmを扱う際の課題 WasmとWASI

Slide 7

Slide 7 text

7 Wasmのモジュールアクセスするための IFを標準化するための取り組み Go 1.21からWASIのPreview1がサポート WASIの登場 WasmとWASI

Slide 8

Slide 8 text

8 ロードマップ WasmとWASI https://bytecodealliance.org/articles/webassembly-the-updated-roadmap-for-developers

Slide 9

Slide 9 text

9 現在WASI Preview2まで安定版 WASIの仕様 WasmとWASI Preview1 ・主にI/O(POSIX準拠) Preview2 ・コンポーネントモデル (Wasm組み合わせて利用するた めのABIとWIT) Preview3 ・非同期処理

Slide 10

Slide 10 text

10 Goは現在Preview2のサポート ...の前段階 ・GOARCH=wasm32への対応 → 未 ・go:wasmexport directive → 済 GoのWASI Preview2対応状況 GoとWASI

Slide 11

Slide 11 text

11 ・現状、多くのWasm環境では32bitのアドレス空間に 制限有(e.g. Fastly) ・GoのWasmは64bit前提のため、unsafe.Pointerを 使用してポインタのキャストが必要 →GCが誤ってメモリを解放してしまう可能性がある GOARCH=wasm32対応 GoとWASI

Slide 12

Slide 12 text

12 ABIでuintを32bitで扱うための変換をしている Fastly Compute SDK GoとWASI https://github.com/fastly/compute-sdk-go/blob/c3a63de93dcb2cf090f431846d601c1302886c3e/intern al/abi/prim/prim.go#L28-L34

Slide 13

Slide 13 text

13 Go 1.23で追加された HostLayoutによってGoのコンパイラがわでよしなに メモリ管理してくれるようになった。 Wasm32/Wasm64を利用者側は意識 せずに済みようになるかも? HostLayout GoとWASI

Slide 14

Slide 14 text

14 基本はWasm利用者側でスレッドの生成を行う責務がある (ブラウザで並行処理をやる場合は Web Workerなどを組み合わせて実装 を行う必要がある ) コラム: Goroutineによる並行処理はどうなる? GoとWASI https://github.com/WebAssembly/threads/blob/main/proposals/threads/Overview.md

Slide 15

Slide 15 text

15 先行してWASI Preview2をサポートされている コラム: TinyGoは? GoとWASI

Slide 16

Slide 16 text

16 ・WASIはWASMを統一的に扱いやすくするためのインターフェース ・WASIはPreview2まで安定版として仕様が決まっている ・Goの公式のWASIサポートは現状 Preview1 ・TinyGoは先行して Preview2までサポートされている まとめ