Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GoとWASI~超入門~
Search
sugar-cat
September 04, 2024
2
230
GoとWASI~超入門~
sugar-cat
September 04, 2024
Tweet
Share
More Decks by sugar-cat
See All by sugar-cat
ErrorTrackingとOrchestrion
sugarcat7
0
52
DiscordとCloudflare
sugarcat7
1
170
Cloudflare Workflowsを使いたい倒したい
sugarcat7
6
1.2k
tslogで実現するセキュアなメタデータ管理とロギング
sugarcat7
4
1k
最近個人開発が熱い ~モニタリング強化編v0.1.0~
sugarcat7
3
360
Honoで実現するバックエンド開発のイマ
sugarcat7
22
4.8k
最近個人開発が熱い ~多言語対応編~
sugarcat7
2
260
ボイラープレート自動生成ツールを使わなくなった話.pdf
sugarcat7
4
580
Using_Hono_in__B2B_SaaS_Application.pdf
sugarcat7
6
450
Featured
See All Featured
A designer walks into a library…
pauljervisheath
205
24k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Side Projects
sachag
452
42k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Transcript
GoとWASI ~超入門~ 2024/9/4 Go Connect #2 @sugar235711
2 sugar cat(@sugar235711) SWE || SRE パフォーマンスとセキュリティが好き 登壇者紹介
3 Agenda 1. WasmとWASI 2. GoとWASI 3. まとめ
4 スタックベースの仮想マシンのバイナリ命令フォーマット Wasmとは WasmとWASI セキュリティ ・サンドボックス環境と明示的な import ポータビリティ ・複数の言語からコンパイル可能 ・Wasmランタイムがあれば、
CPUやOSに依 存しない
5 Go 1.11以降Wasmへのビルドをサポート GoでWasmを使うには? WasmとWASI
6 ・各言語ごとに Wasmモジュールの実装がされている ・実行方法も異なる GoでWasmを扱う際の課題 WasmとWASI
7 Wasmのモジュールアクセスするための IFを標準化するための取り組み Go 1.21からWASIのPreview1がサポート WASIの登場 WasmとWASI
8 ロードマップ WasmとWASI https://bytecodealliance.org/articles/webassembly-the-updated-roadmap-for-developers
9 現在WASI Preview2まで安定版 WASIの仕様 WasmとWASI Preview1 ・主にI/O(POSIX準拠) Preview2 ・コンポーネントモデル (Wasm組み合わせて利用するた
めのABIとWIT) Preview3 ・非同期処理
10 Goは現在Preview2のサポート ...の前段階 ・GOARCH=wasm32への対応 → 未 ・go:wasmexport directive → 済
GoのWASI Preview2対応状況 GoとWASI
11 ・現状、多くのWasm環境では32bitのアドレス空間に 制限有(e.g. Fastly) ・GoのWasmは64bit前提のため、unsafe.Pointerを 使用してポインタのキャストが必要 →GCが誤ってメモリを解放してしまう可能性がある GOARCH=wasm32対応 GoとWASI
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
13 Go 1.23で追加された HostLayoutによってGoのコンパイラがわでよしなに メモリ管理してくれるようになった。 Wasm32/Wasm64を利用者側は意識 せずに済みようになるかも? HostLayout GoとWASI
14 基本はWasm利用者側でスレッドの生成を行う責務がある (ブラウザで並行処理をやる場合は Web Workerなどを組み合わせて実装 を行う必要がある ) コラム: Goroutineによる並行処理はどうなる? GoとWASI
https://github.com/WebAssembly/threads/blob/main/proposals/threads/Overview.md
15 先行してWASI Preview2をサポートされている コラム: TinyGoは? GoとWASI
16 ・WASIはWASMを統一的に扱いやすくするためのインターフェース ・WASIはPreview2まで安定版として仕様が決まっている ・Goの公式のWASIサポートは現状 Preview1 ・TinyGoは先行して Preview2までサポートされている まとめ