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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
420
vimconf2025.pdf
skanehira
0
34
findy-ai-terminal.pdf
skanehira
2
490
Rustから学ぶ 非同期処理の仕組み
skanehira
1
370
about_gorilla.vim.pdf
skanehira
0
120
if let temporary scopeについて
skanehira
0
200
build-debugger-in-rust.pdf
skanehira
1
270
Findy感謝祭2024 LT
skanehira
0
150
Rustではじめる負荷試験
skanehira
6
2.3k
Other Decks in Programming
See All in Programming
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
150
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
250
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
300
クライアントワークでSREをするということ。あるいは事業会社におけるSREと同じこと・違うこと
nnaka2992
1
350
Kubernetesでセルフホストが簡単なNewSQLを求めて / Seeking a NewSQL Database That's Simple to Self-Host on Kubernetes
nnaka2992
0
160
Claude Code Skill入門
mayahoney
0
400
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
120
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
310
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
200
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
210
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
270
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
480
Featured
See All Featured
Deep Space Network (abreviated)
tonyrice
0
92
Prompt Engineering for Job Search
mfonobong
0
200
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
270
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Chasing Engaging Ingredients in Design
codingconduct
0
140
The Pragmatic Product Professional
lauravandoore
37
7.2k
Code Reviewing Like a Champion
maltzj
528
40k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Embracing the Ebb and Flow
colly
88
5k
The Language of Interfaces
destraynor
162
26k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
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で実装し ていく本になります 来年のどこかの技術書典などに出せたらと思っています
ありがとうございました