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でつくるガーベジコレクタ
Search
monochrome
October 20, 2020
Programming
0
530
Rustでつくるガーベジコレクタ
shinjuku.rs #12
monochrome
October 20, 2020
Tweet
Share
More Decks by monochrome
See All by monochrome
仮想マシンにおけるスタックの管理
sisshiki1969
0
160
Rustでゴミ集め
sisshiki1969
1
240
RustでつくるRubyのFiber
sisshiki1969
0
210
Shinjuku.rs#15 Rustでつくるx86アセンブラ
sisshiki1969
0
1.4k
fukuoka.rb#202 RustでつくるRuby
sisshiki1969
1
680
RustでつくるRubyのFiber
sisshiki1969
0
360
Other Decks in Programming
See All in Programming
Docker_OSS_ホスティング入門
satokoki645
0
110
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
170
サイコロで理解する統計的仮説検定の考え方
tatamiya
4
1.1k
大規模UIKitベースアプリへのTCAの段階的導入/gradual-adoption-of-tca-in-a-large-scale-uikit-based-app
takehilo
2
210
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
290
TCAとKMPを用いた新規動画配信アプリ 「ABEMA Live」の設計
tomu28
2
130
Snowflakeで眠ったデータを起こそう!
estie
0
160
Try creating your own orderedmap
kazamori
1
270
AWS CDKコントリビュートTIPS / aws-cdk-contribution-tips
gotok365
4
550
見た目から始める生産性向上
ikumatadokoro
10
1.5k
Domain-Driven Transformation
hschwentner
2
1.5k
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
530
Featured
See All Featured
Designing with Data
zakiwarfel
96
4.8k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
21
1.9k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
A Modern Web Designer's Workflow
chriscoyier
689
190k
How to Ace a Technical Interview
jacobian
273
22k
The Mythical Team-Month
searls
217
42k
What's new in Ruby 2.0
geeforr
337
31k
What the flash - Photography Introduction
edds
64
11k
How STYLIGHT went responsive
nonsquared
92
4.8k
What’s in a name? Adding method to the madness
productmarketing
PRO
17
2.7k
Making the Leap to Tech Lead
cromwellryan
125
8.5k
Transcript
Rustでつくるガーベジコレクタ monochrome twitter: @s_isshiki1969 Slack: プログラミング言語処理系が好きな人の集まり https://prog-lang-sys-ja-slack.github.io/wiki/
ruruby (https://github.com/sisshiki1969/ruruby) • 純Rust製のRuby実装 • 仮想マシンインタプリタ • 他の既存実装・仮想マシンへの依存なし • Rubyの標準ライブラリはRustで実装
• ガーベジコレクタを独自実装 • 2万行ぐらい
• 動的型付けのオブジェクト指向言語 • クラス定義、メソッド定義など、全てが動的 • 豊富なメタ言語機能 • Cで書かれている(50万行ぐらい)。 Ruby
構成 virtual machine (VM) Rubyコード 抽象構文木 (AST) バイトコード parser codegen
a = 1 + 2 PUSH_INT 1 PUSH_INT 2 ADD SET_LVAR ‘a’ Add 1 1 1 2 3 Assign 2 LVAR ’a’
オブジェクトの内部表現
Garbage collector Mutator (VM) Allocator ヒープ割り当て Collector 不要なオブジェクトの回収 割り当て要求 GC起動
*mut RValue
Page 0 7 8 15 16 20 23 24 0x4_0000
20 mark bitmap 0 7 64b x 4032 slot ≒ 256Kb
Allocator Free list 64b x 4032 slot ≒ 256Kb
Allocator Free list
Collector 起動 Free list
Garbage collection: Mark local variables method Array local variables method
Hash K V K V K V K V Object Instance variables Free list
None
Garbage collection: Sweep local variables method Array local variables method
Hash K V K V K V K V Object Instance variables Free list
None
Collector 処理終了 Free list
Allocator Free list
benchmark: aobench.rb (GC on / off)
バグりがちな点 var = [o1, o2, o3].each { |x| x.to_s }
配列オブジェクトをイテレートし、 各要素を関数で処理して戻り値を集め 配列を作って返すRubyスクリプト
バグりがちな点
①VM実行中にGCが起動すると… バグりがちな点 GC! ②作成中のオブジェクト が回収されてしまう ③VMは気づかず処理続行 → いつの間にか上書きされてバグる
まとめ • GCつくりました。 • GCバグるとつらい。