Galois, Inc 2010

Post on 15-May-2015

902 views 1 download

Tags:

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