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
A Brief History of Ruby
Search
Danielle Smith
November 12, 2019
Programming
48
0
Share
A Brief History of Ruby
An Exploration of How Ruby's Interpreter
Has Changed over the Years
Danielle Smith
November 12, 2019
More Decks by Danielle Smith
See All by Danielle Smith
Ruby Ruby
daninithepanini
0
150
Static Type Inferencing ... in Ruby?
daninithepanini
0
27
Off the Rails
daninithepanini
0
42
Action Game
daninithepanini
0
41
RubyGL
daninithepanini
0
31
YeSQL
daninithepanini
0
29
Game Dev in Ruby
daninithepanini
0
42
Euler vs Hamilton
daninithepanini
0
46
Other Decks in Programming
See All in Programming
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
130
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
440
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
2.5k
ふつうのFeature Flag実践入門
irof
7
3.5k
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
1.6k
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.4k
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.5k
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
700
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
1.3k
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.4k
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
260
Music & Morning Musume
bryan
47
7.2k
WENDY [Excerpt]
tessaabrams
11
38k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
380
Believing is Seeing
oripsolob
1
140
Chasing Engaging Ingredients in Design
codingconduct
0
210
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
Unsuck your backbone
ammeep
672
58k
Building Adaptive Systems
keathley
44
3k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Transcript
A Brief History of Ruby An Exploration of How Ruby's
Interpreter Has Changed over the Years Ruby The Object-Oriented Scripting Language
Ruby was “Born” February 24, 1993 0.95 2.7 2.6 2.2
2.1 2.0 1.0 1.8 1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
Yukihiro “Matz” Matsumoto 0.95 2.7 2.6 2.2 2.1 2.0 1.0
1.8 1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
MRI (Matz’ Ruby Interpreter) 0.95 2.7 2.6 2.2 2.1 2.0
1.0 1.8 1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
0.95 0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9
1995 2019 2018 2015 2014 2013 1996 2003 2007
Object Oriented 0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8
1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
Mark-and-Sweep Garbage Collection 0.95 2.7 2.6 2.2 2.1 2.0 1.0
1.8 1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
Parses source into Abstract Syntax Tree (AST) 0.95 2.7 2.6
2.2 2.1 2.0 1.0 1.8 1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
Bison (derivative of YACC) 0.95 2.7 2.6 2.2 2.1 2.0
1.0 1.8 1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 def foo(a, b) a + b end Source
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 def foo(a, b) a + b end Source
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 def foo(a, b) a + b end Tokens
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 AST DEFN ARGS BLOCK OPCALL LVAR [:a, :b] :+ :a :foo LVAR :b def foo(a, b) a + b end
“Runs” the AST 0.95 2.7 2.6 2.2 2.1 2.0 1.0
1.8 1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
rb_eval in eval.c 0.95 2.7 2.6 2.2 2.1 2.0 1.0
1.8 1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 1.0
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 Christmas 1996
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 1.8
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 1.9
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 “Lazy Sweep” Garbage Collection
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 Introduced YARV “Yet Another Ruby VM”
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 Compiles AST to VARV Instruction Sequences (ISEQ)
AST DEFN ARGS BLOCK OPCALL LVAR [:a, :b] :+ :a
:foo LVAR :b def foo(a, b) a + b end 0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
YARV ISEQ DEFN ARGS BLOCK OPCALL LVAR [:a, :b] :+
:a :foo LVAR :b == ISeq:<main> putobject :foo putiseq foo opt_send :define_method, argc: 2 leave == ISeq:foo local table (size: 2, argc: 2) [ 2] a@0<Arg> [ 1] b@1<Arg> getlocal a@0 getlocal b@1 opt_plus :+, argc: 1 leave 0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995 2019 2018 2015 2014 2013 1996 2003 2007
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 iseq_compile_each in compile.c
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 2.0
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 “Bitmap Marking” Garbage Collection
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 2.1
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 “Generational” Garbage Collection
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 2.2
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 “Incremental” Garbage Collection
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 2.6
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 MJIT
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 Generates C code from ISEQ
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 2.7
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 “Compacting” Garbage Collection
0.95 2.7 2.6 2.2 2.1 2.0 1.0 1.8 1.9 1995
2019 2018 2015 2014 2013 1996 2003 2007 3.0?
Pat Shaughnessy Ruby Under a Microscope Matias Korhonen Ruby Like
it’s 1995 Nate Bekropen A People’s History of the Ruby Garbage Collector References