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
45
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
40
Action Game
daninithepanini
0
40
RubyGL
daninithepanini
0
31
YeSQL
daninithepanini
0
28
Game Dev in Ruby
daninithepanini
0
40
Euler vs Hamilton
daninithepanini
0
45
Other Decks in Programming
See All in Programming
ふにゃっとしない名前の付け方 〜哲学で茹で上げる、コシのあるソフトウェア設計〜
shimomura
0
120
継続的な負荷検証を目指して
pyama86
3
1.2k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyKaigi 2026, Hakodate, Japan
marcoroth
0
720
TypeScriptだけでAIエージェントを作る フロント・エージェント・インフラのフルスタック実践
har1101
1
440
Import assertionsが消えた日~ECMAScriptの仕様はどう決まり、なぜ覆るのか~
bicstone
2
180
Skillは並べた。動かなかった。契約で繋いだ。— 65個のSkillから、自走する開発サイクルへ
junholee
0
610
開発とはなにか、Essenceカーネルで見えるもの
ukin0k0
0
180
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
780
過去のレビュー知見をSkillsで資産化した話
pkshadeck
PRO
1
2k
PHPer、Cloudflare に引っ越す
suguruooki
2
220
KMP × Kotlin 2.3 - How Android Got Slower While iOS Builds Improved by 47%
rio432
0
200
「OSSがあるなら自作するな」は AI時代も正しいか ── Build vs Adopt の新しい判断基準
kumorn5s
7
2.7k
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
820
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
250
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
300
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
270
Prompt Engineering for Job Search
mfonobong
0
300
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
180
Mobile First: as difficult as doing things right
swwweet
225
10k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
Thoughts on Productivity
jonyablonski
76
5.2k
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