Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
WASI 0.2のinit処理
Search
asuka
February 28, 2025
Technology
250
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WASI 0.2のinit処理
新宿御苑.wasm #2025.2.28
https://shinjukugyoen.connpass.com/event/342134/
asuka
February 28, 2025
More Decks by asuka
See All by asuka
GoとSIMDとWasmの今。
askua
3
640
2025年ふりかえり
askua
1
250
ライブラリを公開してメンテナンスした一年
askua
0
120
Wasmの気になる最新情報
askua
1
420
Wasmのエコシステムを使った ツール作成方法
askua
0
470
Pure Goで体験するWasmの未来
askua
1
1.1k
Wasmで社内ツールを作って配布しよう
askua
0
340
Wasm元年
askua
0
420
wstdなんだか良さそう
askua
0
160
Other Decks in Technology
See All in Technology
20年間 SNS サービス「GREE」 を支えた技術の刷新と、長期運用サービスの Kubernetes へのリアーキテクト
gree_tech
PRO
0
110
ガチで放置できるClaude Code実行環境の作り方.pdf
lamaglama39
1
5.9k
LLM-as-a-Judgeは本当に信頼できるのか――評価器を評価する話
taka_aki
3
1k
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
780
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
350
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
3
250
~最速でビジネスインパクトを創出する~ Sansanのデータ基盤と活用事例
sansantech
PRO
0
120
AWSセキュリティで活用するAI機能
cmusudakeisuke
1
200
AIネイティブ企業への変革。パーソルキャリアが挑む「データメッシュ×ガバナンス」のアーキテクチャ戦略
techtekt
PRO
0
120
その Valkey 使いこなしていますか?
onk
PRO
5
1.9k
LLM Content Moderationを支える評価・改善ループの実践
suikabar
2
300
AI時代のGraphQL
joere
3
350
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Deep Space Network (abreviated)
tonyrice
0
380
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
KATA
mclloyd
PRO
35
16k
The Language of Interfaces
destraynor
162
27k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
560
WENDY [Excerpt]
tessaabrams
14
40k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
How GitHub (no longer) Works
holman
316
150k
Transcript
WASI 0.2のinit処理 新宿御苑.wasm #2025.2.28
前提の話 2 • WASI → WebAssembly System Interface • WASI
0.1 (プレビュー1) ◦ コマンドとリアクター (ライブラリ)の2つのモジュール • WASI 0.2 (プレビュー2) ◦ 機能ごとのコンポーネント WASIに関する情報がまとまってます
WASI 0.1 (プレビュー1) • コマンドモジュール ◦ プログラムを実行するためのモジュール ◦ エントリポイント :
_start • リアクターモジュール ◦ コマンドモジュールが利用する (ライブラリ)モジュール ◦ エントリポイント : _initialize 3 ランタイム (wasmtime) コマンドモジュール cli.wasm リアクターモジュール lib.wasm $ wasmtime run --preload lib=./lib.wasm cli.wasm _start = main関数 (ランタイムが実行する ) _initialize = init関数 (ランタイムが実行する ) 利用
ランタイム (wasmtime) WASI 0.2 (プレビュー2) • コンポーネントモデルをベースにAPIを再定義 ◦ wasi:cli プログラムのエントリーポイントの定義
◦ wasi:filesystem ファイル操作に関するコンポーネント ◦ wasi:clocks 時刻に関するコンポーネント ◦ wasi:random 乱数に関するコンポーネント ◦ wasi:http HTTPサーバーのエントリーポイントの定義 4 コンポーネント wasi:cli コンポーネント wasi:filesystem 利用 run = main関数 incoming-handler ≒http.Handler (Go)
そういえば... WASI 0.2の仕様には コンポーネントの初期化に関する説明がない 5
• コンポーネントモデル をベースにAPIを再定義 ◦ WASI 0.2以降の仕様 : https://wa.dev/wasi WASI 0.2
(プレビュー2) 6 コンポーネントモデルではWasmのABIについて定義されている 初期化の情報はコンポーネントモデルにあるはず
コンポーネント import コンポーネントモデルの初期化処理 • コンポーネント内でモジュールを実行用のインスタンスに変換する時にWasmの start関数が実行される 7 モジュールB (start $func)
モジュールA (start $func) インスタンスA インスタンスB start関数を実行 start関数を実行 実行 Wasmに元々ある機能 (module (func $start) (start $start) ) モジュールのwat例
コンポーネント import コンポーネントモデルの初期化処理 • コンポーネント内でモジュールを実行用のインスタンスに変換する時にWasmの start関数が実行される 8 モジュールB (start $func)
モジュールA (start $func) インスタンスA インスタンスB start関数を実行 start関数を実行 実行 1. 複数のモジュールを内包できる 2. インスタンス化の方法を定義できる (component (core module $ModA (start $start)) (core module $ModB (start $start)) (core instance $mod_a (instantiate $ModA)) (core instance $mod_b (instantiate $ModB (with "mod_a" (instance $mod_a)))) ) コンポーネントのwat例
WASI 0.1ではなぜ_initialize関数を用意したのか • start関数は元々Wasmにある機能 おそらく... モジュールを合成しようとした時の名前の衝突が原因 9 a.c b.c a.o
b.o command.wasm compile どのstart関数を採用して良いかわからない 1つのモジュールにstart関数は1つだけ コンポーネント モジュールB モジュールA インスタンスA インスタンスB コンポーネントモデルは内部で モジュールが独立している (知っている人いたら教えて )
WASIの初期化処理 • WASI 0.1では_initialize関数が用意されていた • WASI 0.2ではコンポーネント内に個別のモジュールを持つことができる ◦ → Wasmのstart関数を利用して初期化を行う
10
WHOAMI asuka • 株式会社モニクル/SWE ◦ 技術書典17: Monicle Techbook vol.1 •
Wasm関連の同人誌・商業誌を執筆 ◦ ご注文はWASIですか?? ◦ Wasm Cookbook vol.2 ◦ 実践入門WebAssembly ◦ WebAssembly System Interface入門 • 技術書典18 (NEXT) ◦ Wasm Cookbook vol.3予定 ◦ (合同誌なので参加したい人募集してます ) 11 書いた本など
参考文献 • lldでwasmをリンクするまで - Qiita • 手書きで理解するWebAssembly Component Model |
株式会社ヌーラボ(Nulab inc.) • component-model/design/mvp/Explainer.md at main 12