Ruby Under The Hood
-
Upload
craig-lehmann -
Category
Engineering
-
view
276 -
download
1
Transcript of Ruby Under The Hood
1
About me
Guelph ES&C Grad – spring 2014
Currently employed at IBM as aRuntime Technologies Software Dev
Twitter: @craiglehmann
Ruby Under The Hood
http://lolsnaps.com/upload_pic/EveryTimeILookUnderTheHoodOfACar-97946.jpg
3
Program compilation
4
Program compilation
5
Program compilation
6
Program compilation
3.times do |n|
puts nend
7
Program compilation
Tokens:3.times do |n|
puts nend
puts
ndo
end
3 dot times
8
Program compilation
AST3.times do |n|
puts nend
puts n
3 times
call
block
command
9
Program compilation
10
The Ruby Interpreter?
The Ruby Interpreter implements a virtual machine.
11
Bytecode Interpreter
The main VM execution loop. Maps bytecodes to executable native instructions. Implements a virtual stack machine. Individual bytecodes implemented in C.
12
Ruby is a Stack Machine!
13
Push Down Stack
1 + 2
14
Push Down Stack
1 + 2 Push 1Push 2opt_plus
Bytecodes:
15
Push Down Stack
1 + 2 Push 1Push 2opt_plus
Bytecodes:
1Push 1
16
Push Down Stack
1 + 2 Push 1Push 2opt_plus
Bytecodes:
1Push 1
2Push 2
1
17
Push Down Stack
1 + 2 Push 1Push 2opt_plus
Bytecodes:
1Push 1
2Push 2
3opt_plus
1
18
Call Stack example and compiled method
def do_thingsputs "Hello
World"end
PutselfPutstring “Hello World”opt_send_simple
19
Three Stacksdef do_things
puts "Hello World"end
PutselfPutstring “Hello World”opt_send_simple
C Stack VM Stack Ruby Call Stack
20
Call Stack example and compiled method
def do_thingsputs "Hello
World"end
PutselfPutstring “Hello World”opt_send_simple
call_method
C Stack
exec_core…
main()
VM Stack Ruby Call Stack
21
Call Stack example and compiled method
def do_thingsputs "Hello
World"end
PutselfPutstring “Hello World”opt_send_simple
call_method
C Stack
exec_core…
main()
opt_send_simple putsVM Stack
“hello World”self
Ruby Call Stack
22
Call Stack example and compiled method
def do_thingsputs "Hello
World"end
PutselfPutstring “Hello World”opt_send_simple
call_method
C Stack
exec_core…
main()
opt_send_simple putsVM Stack
“hello World”self
putsRuby Call Stack
do_things
23
Three Stacks
call_method
C Stack
exec_core…
main()
opt_send_simple putsVM Stack
“hello World”self
putsRuby Call Stack
do_things
24
What does this look like in the Ruby’s VM?
putsRuby Call Stack
do_things
def do_thingsputs "Hello
World"end
25
What does this look like in the Ruby’s VM?
putsRuby Call Stack
do_things
def do_thingsputs "Hello
World"end
PCControl Frame
SPSelftype
26
What does this look like in the Ruby’s VM?
putsRuby Call Stack
do_things
def do_thingsputs "Hello
World"end
PCControl Frame
SPSelftype
putselfputstring “Hello World”opt_send_simple
27
What does this look like in the Ruby’s VM?
putsRuby Call Stack
do_things
def do_thingsputs "Hello
World"end
PCControl Frame
SPSelftype
putselfputstring “Hello World”opt_send_simple
opt_send_simple putsVM Stack
“hello World”self
28
Class lookup? What happens when you want to create an object?
class Person
end
p = Person.new()
29
Class lookup? What happens when you want to create an object?class Person
end
p = Person.new()
30
Class lookup? What happens when you want to create an object?
class Person
end
p = Person.new()
Person = "Craig"
#Warning: already initialized constant person
31
Intro to garbage collectionWhat is garbage collection?Different types of garbage collection algorithmsMark & Sweep demo
32
What is garbage collection?
Automatic memory management
Manually managing memory is hard!
Aggregate freeing memory & object destruction operations
Gives the illusion of unlimited memory
33
Different types of garbage collection algorithms
Reference Counting• Keep a count along with each object indicating how many references it currently
has. An object with 0 references can have it's memory re-used.• Cannot manage cyclically referenced objects.
Tracing Algorithms• keep track of which objects are in use by recursively tracing objects referring to
other objects, starting from a root set of objects.
34
What does it mean to die
• An object consumes one resource, memory.• When an object becomes unreachable, it can never be used again.• Cycles are collected together, the mutator cannot access these
object.• Sweeping objects means adding it’s memory to a list for reuse.• What about when an object consumes more than just one resource?
35
Mark and Sweep Demo
36
Mark and Sweep Demo
37
Mark and Sweep Demo
38
Mark and Sweep Demo
39
Mark and Sweep Demo
40
Mark and Sweep Demo
41
Mark and Sweep Demo
42
Mark and Sweep Demo
43
Object Finalization
• Some objects may have operations that need to occur pre/post collection
• e.g. file object
44
Execution Environment
Architecture of a Managed Runtime
Platform Abstraction Layer
Garbage Collector
Diagnostic Services
Source Code Bytecode/ASTCompiler
Just-In-Time Compiler
Interpreter
45
Execution Environment
Architecture of a Managed Runtime
Platform Abstraction Layer
Garbage Collector
Diagnostic Services
Source Code Bytecode/ASTCompiler
Just-In-Time Compiler
Interpreter
46
Execution Environment
Architecture of a Managed Runtime
Platform Abstraction Layer
Garbage Collector
Diagnostic Services
Source Code Bytecode/ASTCompiler
Just-In-Time Compiler
Interpreter
47
Execution Environment
Architecture of a Managed Runtime
Platform Abstraction Layer
Garbage Collector
Diagnostic Services
Source Code Bytecode/ASTCompiler
Just-In-Time Compiler
Interpreter
Interpreter context Thread context
Language callstack
48
Execution Environment
Architecture of a Managed Runtime
Platform Abstraction Layer
Garbage Collector
Diagnostic Services
Source Code Bytecode/ASTCompiler
Just-In-Time Compiler
Interpreter
49
Execution Environment
Architecture of a Managed Runtime
Platform Abstraction Layer
Garbage Collector
Diagnostic Services
Source Code Bytecode/ASTCompiler
Just-In-Time Compiler
Interpreter
50
Execution Environment
Architecture of a Managed Runtime
Platform Abstraction Layer
Garbage Collector
Diagnostic Services
Source Code Bytecode/ASTCompiler
Just-In-Time Compiler
Interpreter
Thank You!Twitter: @craigLehmann
Email: [email protected]