Galois, Inc 2010
-
Upload
brian-ford -
Category
Technology
-
view
902 -
download
1
Transcript of Galois, Inc 2010
The Rubinius Virtual Machine
Brian Fordbrixen @ {twitter IRC gmail}
presented at Galois, Inc 30 Nov 10
Rubinius runs Ruby
Methods
Methods
Methods
Blocks
Blocks
Scopes
Classes
Classes
Modules
Modules
Modules
Singleton Classes
Singleton Classes
Expressions
Rubinius History
Sydneythread-safe MRI
prototype Bprototype S
~4 yearsearly Git user
open commit policy
virtual machinesgarbage collectorsbytecode compilersRuby core libraryprimitives systemsJIT compilersof RubySpecs
21.75
3122
tons
Virtual Machine
bootstrapping
VM | OM
object memoryontologymethods
vm/ontology.cpp
vm/environment.cpp
vm/builtin/
VM | OM
alpha.rb
VM | OM
alpha.rb
bootstrap/
kernel/bootstrap/array.rb
VM | OM
alpha.rb
bootstrap/
platform/
kernel/platform/posix.rb
VM | OM
alpha.rb
bootstrap/
platform/
common/
VM | OM
alpha.rb
bootstrap/
platform/
common/
delta/
VM | OM
alpha.rb
bootstrap/
platform/
common/
delta/
loader.rb
set pathsprocess optionsrun application
VM | OM
alpha.rb
bootstrap/
platform/
common/
delta/
loader.rb
Ruby
C++
interpreters
vm/instructions.def
vm/instructions.def
vm/instructions.def
vm/instructions.def
vm/instructions.def
vm/instructions.def
vm/instructions.def
String
Bytecode Compiler
File
AST SymbolicBytecode
CompiledMethod
CompiledFile
lib/compiler/compiler.rb
lib/compiler/ast/operators.rb
spec/compiler/and_spec.rb
field access
kernel/bootstrap/array.rb
vm/builtin/array.hpp
primitives
kernel/bootstrap/array.rb
vm/builtin/array.hpp
vm/gen/primitives_glue.gen.hpp
Garbage Collector
Large Object Space
Nursery
Young
Semi-Space
Mature
Immix
Generational
Nursery
slab 1 slab 2
auto-tunedlifetime
Immix:A Mark-Region Garbage Collector
with Space Efficiency, Fast Collection, and Mutator
Performance
Blackburn, S. & McKinley, K.(PLDI 2008)
C-API
MRI native APIlegacy codepoor quality
Inflated Headers
Flags
field 1
...
Inflated Headers
TaggedPointer
field 1
...
Flags
handle
JIT
bytecode to LLVM IR
programthreads
JITthreads
vm/llvm/jit_visit.hpp
uncommon_interpreter
pure functions
Custom Passesguard elimination
rbx -Xjit.dump_code=NLLVM IR = 1
optimized IR = 2machine code = 4
exceptions
RubySpec
array/index_spec.rb
array/index_spec.rb
integer/even_spec.rb
file/open_spec.rb
3521 files,15769 examples,
43797 expectations,0 failures, 0 errors
Future Rubinius
full concurrency(hydra branch)
method store(image?)
lazy loading
build system
modularityswap core library
LLVM metadatatype propagation
LLVM metadatatype propagation
runtime compilationwith clang
(Windows, C-ext)
StrongRuby ?
Androidmobile
Web rubini.us
Github github.com/evanphx/rubinius
IRC #rubinius
Thank you