2008-12-21 Rubinius

135
Rubinius

Transcript of 2008-12-21 Rubinius

Page 1: 2008-12-21 Rubinius

Rubinius

Page 2: 2008-12-21 Rubinius

Rubini us

Page 3: 2008-12-21 Rubinius

Rubini.us

Page 4: 2008-12-21 Rubinius

rubini.us

Page 5: 2008-12-21 Rubinius

rubini.ushttp://

Page 6: 2008-12-21 Rubinius

Rubiniushttp://godfat.org/slide/2008-12-21-rubinius.pdf

Page 7: 2008-12-21 Rubinius

History and Design Goals

Architecture and Object Model

Page 8: 2008-12-21 Rubinius

History and Design Goals

Architecture and Object Model

Page 9: 2008-12-21 Rubinius

Evan Phoenix

Page 10: 2008-12-21 Rubinius

February of 2006

Page 11: 2008-12-21 Rubinius

RubySpec

Page 12: 2008-12-21 Rubinius

MSpec

Page 13: 2008-12-21 Rubinius

Engine Yard

Page 14: 2008-12-21 Rubinius

C VM Shotgun

Page 15: 2008-12-21 Rubinius

C VM Shotgun

Page 16: 2008-12-21 Rubinius

C++ VM

Page 17: 2008-12-21 Rubinius

CxxTest

Page 18: 2008-12-21 Rubinius

LLVM

Page 19: 2008-12-21 Rubinius

History and Design Goals

Architecture and Object Model

Page 20: 2008-12-21 Rubinius

Reliable, Rock Solid Code

Page 21: 2008-12-21 Rubinius

Reliable, Rock Solid CodeFull Test Coverage

Page 22: 2008-12-21 Rubinius

健康

Page 23: 2008-12-21 Rubinius

Clean, Readable Code

Page 24: 2008-12-21 Rubinius

Clean, Readable CodeLittle Lines in Each File

Page 25: 2008-12-21 Rubinius

Clean, Readable CodeMacro, Code Generator, Rake Task

Page 26: 2008-12-21 Rubinius

Clean, Readable CodeCMake

Page 27: 2008-12-21 Rubinius

Clean, Readable CodeCMake

Page 28: 2008-12-21 Rubinius

Clean, Readable CodeC++ Object to Ruby Object 1 to 1 Mapping

Page 29: 2008-12-21 Rubinius

清新

Page 30: 2008-12-21 Rubinius

健康清新

Page 31: 2008-12-21 Rubinius

Modern Techniques

Page 32: 2008-12-21 Rubinius

Modern TechniquesPluggable Garbage Collectors

Page 33: 2008-12-21 Rubinius

Modern TechniquesPluggable Garbage Collectors

•Stop-and-Copy

Page 34: 2008-12-21 Rubinius

Modern TechniquesPluggable Garbage Collectors

•Mark-and-Sweep

•Stop-and-Copy

Page 35: 2008-12-21 Rubinius

Modern TechniquesOptimizers

Page 36: 2008-12-21 Rubinius

Modern TechniquesGit, Rake, LLVM

Page 37: 2008-12-21 Rubinius

Squeakthe Smalltalk-80 Implementation

Page 38: 2008-12-21 Rubinius

SqueakSlang

Page 39: 2008-12-21 Rubinius

Squeak•Alan Kay

•Dan Ingalls

•Adele Goldberg

Page 40: 2008-12-21 Rubinius

SmalltalkXerox PARC

Page 41: 2008-12-21 Rubinius

SmalltalkObject-Oriented

(differ from Simula and C++)

Page 42: 2008-12-21 Rubinius

SmalltalkGUI

Page 43: 2008-12-21 Rubinius

SmalltalkMVC

Page 44: 2008-12-21 Rubinius

History and Design Goals

Architecture and Object Model

Page 45: 2008-12-21 Rubinius

Real Machine

Page 46: 2008-12-21 Rubinius

Real Machine

C++ Virtual Machine

Page 47: 2008-12-21 Rubinius

Real Machine

C++ Virtual Machine

kernel/bootstrap

Page 48: 2008-12-21 Rubinius

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/platform

Page 49: 2008-12-21 Rubinius

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/platform

Page 50: 2008-12-21 Rubinius

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

kernel/platform

Page 51: 2008-12-21 Rubinius

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

RubyRuntime(kernel) kernel/platform

Page 52: 2008-12-21 Rubinius

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

RubyRuntime(kernel)

lib/compiler

kernel/platform

Page 53: 2008-12-21 Rubinius

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

RubyRuntime(kernel)

lib/*lib/compiler

kernel/platform

Page 54: 2008-12-21 Rubinius

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

RubyRuntime(kernel)

lib/*lib/compiler

Your App

Your App

kernel/platform

Page 55: 2008-12-21 Rubinius

Real Machine

C++ Virtual MachineLow Level Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

RubyRuntime(kernel)

lib/*lib/compiler

Your App

Your App

kernel/platform

Page 56: 2008-12-21 Rubinius

Outside the Ruby World

Page 57: 2008-12-21 Rubinius

Outside the Ruby WorldC++ Primitives

Page 58: 2008-12-21 Rubinius

Outside the Ruby WorldForeign Function Interface - FFI

Page 59: 2008-12-21 Rubinius

Outside the Ruby WorldSubtend

Page 60: 2008-12-21 Rubinius

History and Design Goals

Architecture and Object Model

Page 61: 2008-12-21 Rubinius

HelloWorld!

Page 62: 2008-12-21 Rubinius

def method_missing m; puts m; enddef Object.const_missing c; print "#{c}, "; end

Hello.World!

Page 63: 2008-12-21 Rubinius

puts ‘Hello, World!’

Page 64: 2008-12-21 Rubinius

puts ‘Hello, World!’self.send :puts, ‘Hello, World!’

Page 65: 2008-12-21 Rubinius

puts ‘Hello, World!’

(TOPLEVEL_BINDING.context.receiver ||

TOPLEVEL MethodContext.current.receiver )

self.send :puts, ‘Hello, World!’

Page 66: 2008-12-21 Rubinius

puts ‘Hello, World!’

def __script__

end

(TOPLEVEL_BINDING.context.receiver ||

TOPLEVEL MethodContext.current.receiver )

self.send :puts, ‘Hello, World!’

Page 67: 2008-12-21 Rubinius

def __script__

end

CompiledMethod (method(:__script__).compiled_method)

puts ‘Hello, World!’

Page 68: 2008-12-21 Rubinius

def __script__

end

CompiledMethod (method(:__script__).compiled_method)

#<SendSite:0x26 name=putshits=0 misses=0>

puts ‘Hello, World!’

Page 69: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

Page 70: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘

print ‘World!‘

#<SendSite:0x26 name=printhits=0 misses=0>

#<SendSite:0x28 name=printhits=0 misses=0>

CompiledMethod (method(:__script__).compiled_method)

Page 71: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

Page 72: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘#<SendSite:0x26 name=print

hits=0 misses=0>

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

Page 73: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘#<SendSite:0x26 name=print

hits=0 misses=0>

print ‘World!‘#<SendSite:0x28 name=print

hits=0 misses=0>

CompiledMethod (method(:__script__).compiled_method)

Page 74: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

Page 75: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘#<SendSite:0x26 name=print

hits=1 misses=0>

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

Page 76: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘#<SendSite:0x26 name=print

hits=1 misses=0>

print ‘World!‘#<SendSite:0x28 name=print

hits=1 misses=0>

CompiledMethod (method(:__script__).compiled_method)

Page 77: 2008-12-21 Rubinius

class C def print endend

Page 78: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

Page 79: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘#<SendSite:0x26 name=print

hits=0 misses=0>

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

Page 80: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘#<SendSite:0x26 name=print

hits=0 misses=0>

print ‘World!‘#<SendSite:0x28 name=print

hits=0 misses=0>

CompiledMethod (method(:__script__).compiled_method)

Page 81: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

Page 82: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘#<SendSite:0x26 name=print

hits=1 misses=0>

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

Page 83: 2008-12-21 Rubinius

def __script__

end

print ‘Hello,‘#<SendSite:0x26 name=print

hits=1 misses=0>

print ‘World!‘#<SendSite:0x28 name=print

hits=1 misses=0>

CompiledMethod (method(:__script__).compiled_method)

Page 84: 2008-12-21 Rubinius
Page 85: 2008-12-21 Rubinius

•CompiledMethod

•MethodContext

•StaticScope

•SendSite

•MethodTable

•LookupTable

Page 86: 2008-12-21 Rubinius

MethodDispatch

Page 87: 2008-12-21 Rubinius

CD Obj

Page 88: 2008-12-21 Rubinius

CD Obj

MetaD

Page 89: 2008-12-21 Rubinius

CD Obj

MetaD

MetaC

Page 90: 2008-12-21 Rubinius

CD Obj

MetaD

MetaC

MetaObj

Page 91: 2008-12-21 Rubinius

CD Obj

MetaD

MetaC

MetaObj

Page 92: 2008-12-21 Rubinius

CD Obj

MetaD

MetaC

MetaObj

Page 93: 2008-12-21 Rubinius

CD Obj

MetaD

MetaC ClassMeta

Obj

Page 94: 2008-12-21 Rubinius

CD Obj

MetaD

MetaC Class ModMeta

Obj

Page 95: 2008-12-21 Rubinius

CD Obj

MetaD

MetaC Class ModMeta

Obj

Page 96: 2008-12-21 Rubinius

Class ModMetaC

MetaD

MetaObj

Page 97: 2008-12-21 Rubinius

MMD

Class ModMetaC

MetaD

MetaObj

Page 98: 2008-12-21 Rubinius

MMD

MMC

Class ModMetaC

MetaD

MetaObj

Page 99: 2008-12-21 Rubinius

MMD

MMC

Class ModMetaC

MetaD

MetaObj

MMObj

Page 100: 2008-12-21 Rubinius

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

MMObj

Page 101: 2008-12-21 Rubinius

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

MMObj

Page 102: 2008-12-21 Rubinius

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

MMObj

Page 103: 2008-12-21 Rubinius

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

Page 104: 2008-12-21 Rubinius

MetaClass

Class ModMetaObj

Obj

MMObj

Page 105: 2008-12-21 Rubinius

MetaClass

Class ModMetaObj

Obj

MMObj

MetaMC

Page 106: 2008-12-21 Rubinius

MetaClass

Class ModMetaObj

Obj

MMObj

MetaMC

MetaClass

Page 107: 2008-12-21 Rubinius

MetaClass

Class ModMetaObj

Obj

MMObj

MetaMC

MetaClass

MetaMod

Page 108: 2008-12-21 Rubinius

MetaClass

Class ModMetaObj

Obj

MMObj

MetaMC

MetaClass

MetaMod

Page 109: 2008-12-21 Rubinius

MetaClass

Class Mod

MetaMC

MetaClass

MetaMod

Page 110: 2008-12-21 Rubinius

MetaClass

Class Mod

MetaMC

MetaClass

MetaMod

Page 111: 2008-12-21 Rubinius

MetaClass Class

Mod

MetaMC

MetaClass

MetaMod

Page 112: 2008-12-21 Rubinius

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

Page 113: 2008-12-21 Rubinius

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

Page 114: 2008-12-21 Rubinius

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

Page 115: 2008-12-21 Rubinius

MetaClass Class Mod

MetaMC Meta

ClassMetaMod

Page 116: 2008-12-21 Rubinius

MetaClass Class Mod

MetaMC

MetaClass Meta

Mod

Page 117: 2008-12-21 Rubinius

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

Page 118: 2008-12-21 Rubinius

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

Page 119: 2008-12-21 Rubinius

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

Page 120: 2008-12-21 Rubinius

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

Page 121: 2008-12-21 Rubinius

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

Page 122: 2008-12-21 Rubinius

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

Page 123: 2008-12-21 Rubinius

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

Page 124: 2008-12-21 Rubinius

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

Page 125: 2008-12-21 Rubinius

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

Page 126: 2008-12-21 Rubinius

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

Page 127: 2008-12-21 Rubinius

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

Page 128: 2008-12-21 Rubinius
Page 129: 2008-12-21 Rubinius

•BlockEnvironment

•InstructionSequence

•Compiler

•Breakpoint

•Rubinius::Task

•Channel

•Actor

•Rubinius::VM

Page 130: 2008-12-21 Rubinius

Reference: Rubinius

• http://rubini.us/• http://github.com/evanphx/rubinius/• http://rubinius.lighthouseapp.com/• http://groups.google.com/group/rubinius-dev/

Page 132: 2008-12-21 Rubinius

Reference: Others

• http://rubyspec.org/• http://llvm.org/• http://users.ipa.net/~dwighth/squeak/oopsla_squeak.html

Page 133: 2008-12-21 Rubinius

Reference: Wikipedia

• http://en.wikipedia.org/wiki/Rubinius

• http://en.wikipedia.org/wiki/Squeak

• http://en.wikipedia.org/wiki/Smalltalk

• http://en.wikipedia.org/wiki/Simula

• http://en.wikipedia.org/wiki/Model-view-controller

• http://en.wikipedia.org/wiki/Alan_Kay

• http://en.wikipedia.org/wiki/PARC_(company)

• http://en.wikipedia.org/wiki/Bootstrapping_(compilers)

• http://en.wikipedia.org/wiki/Self-hosting

• http://en.wikipedia.org/wiki/PyPy

Page 134: 2008-12-21 Rubinius

git clone \git://github.com/evanphx/rubinius.git

cd rubinius; rake build

Page 135: 2008-12-21 Rubinius

?