Ruby Under The Hood

Preview:

Citation preview

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: craigl@ca.ibm.com