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
0
39
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
21
Off the Rails
daninithepanini
0
26
Action Game
daninithepanini
0
35
RubyGL
daninithepanini
0
26
YeSQL
daninithepanini
0
24
Game Dev in Ruby
daninithepanini
0
36
Euler vs Hamilton
daninithepanini
0
41
Other Decks in Programming
See All in Programming
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
7
2.6k
Namespace and Its Future
tagomoris
6
710
Testing Trophyは叫ばない
toms74209200
0
890
rage against annotate_predecessor
junk0612
0
170
Swift Updates - Learn Languages 2025
koher
2
520
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
400
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
510
Zendeskのチケットを Amazon Bedrockで 解析した
ryokosuge
3
320
print("Hello, World")
eddie
2
530
プロポーザル駆動学習 / Proposal-Driven Learning
mackey0225
2
1.3k
楽して成果を出すためのセルフリソース管理
clipnote
0
190
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
350
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
820
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
How STYLIGHT went responsive
nonsquared
100
5.8k
GraphQLとの向き合い方2022年版
quramy
49
14k
We Have a Design System, Now What?
morganepeng
53
7.8k
Scaling GitHub
holman
463
140k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Why Our Code Smells
bkeepers
PRO
339
57k
Practical Orchestrator
shlominoach
190
11k
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