Rubinius - godfat · Modern Techniques Pluggable Garbage Collectors •Mark-and-Sweep...

Preview:

Citation preview

Rubinius

Rubini us

Rubini.us

rubini.us

rubini.ushttp://

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

History and Design Goals

Architecture and Object Model

History and Design Goals

Architecture and Object Model

Evan Phoenix

February of 2006

RubySpec

MSpec

Engine Yard

C VM Shotgun

C VM Shotgun

C++ VM

CxxTest

LLVM

History and Design Goals

Architecture and Object Model

Reliable, Rock Solid Code

Reliable, Rock Solid CodeFull Test Coverage

健康

Clean, Readable Code

Clean, Readable CodeLittle Lines in Each File

Clean, Readable CodeMacro, Code Generator, Rake Task

Clean, Readable CodeCMake

Clean, Readable CodeCMake

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

清新

健康清新

Modern Techniques

Modern TechniquesPluggable Garbage Collectors

Modern TechniquesPluggable Garbage Collectors

•Stop-and-Copy

Modern TechniquesPluggable Garbage Collectors

•Mark-and-Sweep

•Stop-and-Copy

Modern TechniquesOptimizers

Modern TechniquesGit, Rake, LLVM

Squeakthe Smalltalk-80 Implementation

SqueakSlang

Squeak•Alan Kay

•Dan Ingalls

•Adele Goldberg

SmalltalkXerox PARC

SmalltalkObject-Oriented

(differ from Simula and C++)

SmalltalkGUI

SmalltalkMVC

History and Design Goals

Architecture and Object Model

Real Machine

Real Machine

C++ Virtual Machine

Real Machine

C++ Virtual Machine

kernel/bootstrap

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/platform

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/platform

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

kernel/platform

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

RubyRuntime(kernel) kernel/platform

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

RubyRuntime(kernel)

lib/compiler

kernel/platform

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

RubyRuntime(kernel)

lib/*lib/compiler

kernel/platform

Real Machine

C++ Virtual Machine

kernel/bootstrap

kernel/common

kernel/delta

RubyRuntime(kernel)

lib/*lib/compiler

Your App

Your App

kernel/platform

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

Outside the Ruby World

Outside the Ruby WorldC++ Primitives

Outside the Ruby WorldForeign Function Interface - FFI

Outside the Ruby WorldSubtend

History and Design Goals

Architecture and Object Model

HelloWorld!

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

Hello.World!

puts ‘Hello, World!’

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

puts ‘Hello, World!’

(TOPLEVEL_BINDING.context.receiver ||

TOPLEVEL MethodContext.current.receiver )

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

puts ‘Hello, World!’

def __script__

end

(TOPLEVEL_BINDING.context.receiver ||

TOPLEVEL MethodContext.current.receiver )

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

def __script__

end

CompiledMethod (method(:__script__).compiled_method)

puts ‘Hello, World!’

def __script__

end

CompiledMethod (method(:__script__).compiled_method)

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

puts ‘Hello, World!’

def __script__

end

print ‘Hello,‘

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

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)

def __script__

end

print ‘Hello,‘

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

def __script__

end

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

hits=0 misses=0>

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

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)

def __script__

end

print ‘Hello,‘

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

def __script__

end

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

hits=1 misses=0>

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

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)

class C def print endend

def __script__

end

print ‘Hello,‘

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

def __script__

end

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

hits=0 misses=0>

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

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)

def __script__

end

print ‘Hello,‘

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

def __script__

end

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

hits=1 misses=0>

print ‘World!‘

CompiledMethod (method(:__script__).compiled_method)

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)

•CompiledMethod

•MethodContext

•StaticScope

•SendSite

•MethodTable

•LookupTable

MethodDispatch

CD Obj

CD Obj

MetaD

CD Obj

MetaD

MetaC

CD Obj

MetaD

MetaC

MetaObj

CD Obj

MetaD

MetaC

MetaObj

CD Obj

MetaD

MetaC

MetaObj

CD Obj

MetaD

MetaC ClassMeta

Obj

CD Obj

MetaD

MetaC Class ModMeta

Obj

CD Obj

MetaD

MetaC Class ModMeta

Obj

Class ModMetaC

MetaD

MetaObj

MMD

Class ModMetaC

MetaD

MetaObj

MMD

MMC

Class ModMetaC

MetaD

MetaObj

MMD

MMC

Class ModMetaC

MetaD

MetaObj

MMObj

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

MMObj

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

MMObj

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

MMObj

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaClass

Class ModMetaObj

Obj

MMObj

MetaClass

Class ModMetaObj

Obj

MMObj

MetaMC

MetaClass

Class ModMetaObj

Obj

MMObj

MetaMC

MetaClass

MetaClass

Class ModMetaObj

Obj

MMObj

MetaMC

MetaClass

MetaMod

MetaClass

Class ModMetaObj

Obj

MMObj

MetaMC

MetaClass

MetaMod

MetaClass

Class Mod

MetaMC

MetaClass

MetaMod

MetaClass

Class Mod

MetaMC

MetaClass

MetaMod

MetaClass Class

Mod

MetaMC

MetaClass

MetaMod

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

MetaClass Class Mod

MetaMC Meta

ClassMetaMod

MetaClass Class Mod

MetaMC

MetaClass Meta

Mod

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

MetaClass Class Mod

MetaMC

MetaClass

MetaMod

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

MMD

MMC

MetaClass

Class ModMetaC

MetaD

MetaObj

CD Obj

MMObj

MetaMC

MetaClass

MetaMod

•BlockEnvironment

•InstructionSequence

•Compiler

•Breakpoint

•Rubinius::Task

•Channel

•Actor

•Rubinius::VM

Reference: Rubinius

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

Reference: Others

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

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

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

cd rubinius; rake build

?

Recommended