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
RustでWasm Runtimeを書いた in UV_Study
Search
skanehira
September 13, 2023
Programming
1
470
RustでWasm Runtimeを書いた in UV_Study
skanehira
September 13, 2023
Tweet
Share
More Decks by skanehira
See All by skanehira
about_gorilla.vim.pdf
skanehira
0
81
if let temporary scopeについて
skanehira
0
180
build-debugger-in-rust.pdf
skanehira
1
230
Findy感謝祭2024 LT
skanehira
0
130
Rustではじめる負荷試験
skanehira
6
2k
Wellcome Vim World
skanehira
3
640
VimConf 2023 Tiny
skanehira
1
730
Deno Fest 2023
skanehira
0
250
RustでWasm Runtimeを書いた in WebAssembly night #11
skanehira
0
840
Other Decks in Programming
See All in Programming
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
170
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
590
[初登壇@jAZUG]アプリ開発者が気になるGoogleCloud/Azure+wasm/wasi
asaringo
0
130
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
300
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
230
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
280
Webからモバイルへ Vue.js × Capacitor 活用事例
naokihaba
0
760
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
1.1k
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
310
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
240
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
800
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
1
470
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.8k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Rails Girls Zürich Keynote
gr2m
94
14k
How to Ace a Technical Interview
jacobian
277
23k
Code Review Best Practice
trishagee
68
18k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
How STYLIGHT went responsive
nonsquared
100
5.6k
Building Applications with DynamoDB
mza
95
6.5k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Transcript
RustでWasm Runtimeを書いた
QSPGJMF \ OBNFΰϦϥ KPC< ΤϯδχΞ ձࣾܦӦ >
MJLFT< 3VTU (P 5ZQF4DSJQU %FOP 7JN 8BTN %PDLFS LT > TOT< 9 5XJUUFS IUUQTUXJUUFSDPNHPSJMMB (JU)VCIUUQTHJUIVCDPNTLBOFIJSB [FOOIUUQT[FOOEFWTLBOFIJSB > >
Wasm(WebAssembly)を ご存知ですか?
https://developer.mozilla.org/ja/docs/WebAssembly より
Wasmは... ブラウザでも動く仮想命令セット
命令セットはCPU命令の集まり x86・ARMなどがある
仮想命令セットは CPUに依存しない命令セット
RubyやJVMといった仮想マシンで動作する言語は それぞれが定義した仮想命令セットで動いている
Wasmの仮想命令セットは ただのバイトコード
00000000: 0061 736d 0100 0000 0106 0160 017f 017f .asm.......`....
00000010: 0302 0100 0707 0103 6669 6200 000a 1e01 ........fib..... 00000020: 1c00 2000 4101 4d04 7f41 0105 2000 4102 .. .A.M..A.. .A. 00000030: 6b10 0020 0041 016b 1000 6a0b 0b0a k.. .A.k..j... Wasm Runtimeで動くフィボナッチ関数のバイトコード
None
Ruby VMやJVMのような仮想マシン を実装するのと大まか同じ(はず)
Wasm Runtimeは スタックベースの仮想マシン
というわけで実装してみた https://github.com/skanehira/chibiwasm ※https://www.w3.org/TR/wasm-core-1/ の仕様まで
デモ
*.wasmが実行されるまでの流れ
1. wasmバイナリからRustのデータ構造に落とし込む 2. 1のデータ構造から実行用のデータ構造を生成する 3. Wasmのメモリの確保や命令処理などを行う
バイナリ内のデータはセクションと いう単位で別れている 例) code_section 関数の命令群 memory_section メモリサイズの定義
data_section メモリの初期データ
セクションごとのデコード処理を行う デコード処理はバイナリを読み取ってRustの構造体に変換していく
バイナリを表現したデータ構造から実行 用のデータ構造を生成 Store 実行時に必要なインスタンスを持つ 例)関数やメモリのインスタンス Runtime Store以外に、値を保持するスタックと 関数呼び出しフレームを持つ VMそのものと考えてもらってOK
stack 処理時の値を保持する call_stack 関数フレーム 関数の命令郡や引数の値、スタックポ インタなどを持つ
命令処理の実装を説明する前に…
スタックマシン 10 + 13 をスタックマシンを使って表現する場合
これをRustで表現する
*OTUSVDUJPO 8BTNͷ໋ྩ܈ 7BMVF 8BTNͰѻ͑Δ JJɺGͳͲ 3VOUJNFTUBDL
ॲཧ࣌ͷΛอ࣋͢Δྻ 3VOUJNFFYFDVUF ໋ྩΛॲཧ͢Δؔ QD ϓϩάϥϜΧϯλ ࣍ͷ໋ྩͷ൪ʢΠϯσοΫεʣ
'SBNF ؔͷݺͼग़͠ͷʹੜ͢Δ ྫ͑ɺ" # ͷΑ͏ͳؔݺͼग़͠
͕͋Δ߹ɺ" ͷॲཧதʹ# ͷ໋ྩΛ ॲཧ͠ɺͦΕ͕ऴΘͬͨΒ" ʹΔࡍʹ " ͷQDʹ͢ඞཁ͕͋Δ ؔ͝ͱʹQDͱ໋ྩΛ·ͱΊͯ'SBNFͰ ཧ͢Δ͜ͱͰɺݺͼग़͠ݩʹΔͱ͖ ͷॲཧ'SBNFΛΓସ͑Δ͚ͩͰࡁΉ
ͪͳΈʹ໋ྩͷҎ্͋Δ ͷͰϚΫϩΛۦ࣮ͯ͠ྔΛ͑ͨํ ͕ྑ͍ 3VTUͷϚΫϩ͜͏͍͏ͱ͖ʹศརͩ ͳͱࢥ͏
他にも細々とした話は↓を読んで見てください https://zenn.dev/skanehira/articles/ 2023-04-23-rust-wasm-runtime
宣伝 同人誌「作って理解 Wasm Runtimeのしくみ」を執筆中です Rustで"Hello World"を出力できるWasm RuntimeをRustで実装し ていく本になります 来年のどこかの技術書典などに出せたらと思っています
ありがとうございました