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
520
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RustでWasm Runtimeを書いた in UV_Study
skanehira
September 13, 2023
More Decks by skanehira
See All by skanehira
Reactにおける 良いコンポーネントテストとはなにか
skanehira
1
440
vimconf2025.pdf
skanehira
0
44
findy-ai-terminal.pdf
skanehira
2
510
Rustから学ぶ 非同期処理の仕組み
skanehira
1
420
about_gorilla.vim.pdf
skanehira
0
140
if let temporary scopeについて
skanehira
0
210
build-debugger-in-rust.pdf
skanehira
1
280
Findy感謝祭2024 LT
skanehira
0
160
Rustではじめる負荷試験
skanehira
6
2.5k
Other Decks in Programming
See All in Programming
yield再入門 #phpcon
o0h
PRO
0
470
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
170
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.1k
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
220
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
140
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
230
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.7k
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
230
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
6.3k
symfony/aiとlaravel/boost
77web
0
130
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
110
Featured
See All Featured
So, you think you're a good person
axbom
PRO
2
2.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
500
The agentic SEO stack - context over prompts
schlessera
0
850
Git: the NoSQL Database
bkeepers
PRO
432
67k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
870
Optimising Largest Contentful Paint
csswizardry
37
3.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
Agile that works and the tools we love
rasmusluckow
331
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で実装し ていく本になります 来年のどこかの技術書典などに出せたらと思っています
ありがとうございました