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
490
RustでWasm Runtimeを書いた in UV_Study
skanehira
September 13, 2023
Tweet
Share
More Decks by skanehira
See All by skanehira
Reactにおける 良いコンポーネントテストとはなにか
skanehira
1
410
vimconf2025.pdf
skanehira
0
27
findy-ai-terminal.pdf
skanehira
2
460
Rustから学ぶ 非同期処理の仕組み
skanehira
1
330
about_gorilla.vim.pdf
skanehira
0
120
if let temporary scopeについて
skanehira
0
190
build-debugger-in-rust.pdf
skanehira
1
260
Findy感謝祭2024 LT
skanehira
0
140
Rustではじめる負荷試験
skanehira
6
2.2k
Other Decks in Programming
See All in Programming
ゆくKotlin くるRust
exoego
1
200
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
Cap'n Webについて
yusukebe
0
170
Architectural Extensions
denyspoltorak
0
110
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
170
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
250
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
760
クラウドに依存しないS3を使った開発術
simesaba80
0
230
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
850
gunshi
kazupon
1
140
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.4k
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.4k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
81
KATA
mclloyd
PRO
33
15k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
69
Practical Orchestrator
shlominoach
190
11k
Side Projects
sachag
455
43k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
610
The browser strikes back
jonoalderson
0
310
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
98
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
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で実装し ていく本になります 来年のどこかの技術書典などに出せたらと思っています
ありがとうございました