Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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までサポートされている まとめ