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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Danielle Smith
November 12, 2019
Programming
0
40
A Brief History of Ruby
An Exploration of How Ruby's Interpreter
Has Changed over the Years
Danielle Smith
November 12, 2019
Tweet
Share
More Decks by Danielle Smith
See All by Danielle Smith
Ruby Ruby
daninithepanini
0
140
Static Type Inferencing ... in Ruby?
daninithepanini
0
23
Off the Rails
daninithepanini
0
30
Action Game
daninithepanini
0
37
RubyGL
daninithepanini
0
28
YeSQL
daninithepanini
0
25
Game Dev in Ruby
daninithepanini
0
38
Euler vs Hamilton
daninithepanini
0
44
Other Decks in Programming
See All in Programming
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
270
CSC307 Lecture 02
javiergs
PRO
1
780
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
310
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
Apache Iceberg V3 and migration to V3
tomtanaka
0
170
Package Management Learnings from Homebrew
mikemcquaid
0
230
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
140
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
220
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
720
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
130
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
How to make the Groovebox
asonas
2
1.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
740
Fireside Chat
paigeccino
41
3.8k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
How to Ace a Technical Interview
jacobian
281
24k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
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