Slide 1

Slide 1 text

Rubinius, and the Future of Ruby ELEMENTAL 1 MARCH 2013

Slide 2

Slide 2 text

Brian Shirai Rubinius Developer

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Questions Tools for thought

Slide 5

Slide 5 text

OSS/FOSS/CC Community of contributions

Slide 6

Slide 6 text

Has Ruby reached its potential?

Slide 7

Slide 7 text

If yes, Where do we go from here?

Slide 8

Slide 8 text

If no, What should we be working on?

Slide 9

Slide 9 text

Celluloid Actor-based concurrent object framework

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Should Matz be the only one making decisions about Ruby?

Slide 12

Slide 12 text

If yes, Why?

Slide 13

Slide 13 text

Concurrency Performance Security Integration API

Slide 14

Slide 14 text

Refinements Action at a distance

Slide 15

Slide 15 text

Libraries Frameworks Applications

Slide 16

Slide 16 text

"active_model".camelize # => "ActiveModel"

Slide 17

Slide 17 text

Stratification Foundation vs Roof

Slide 18

Slide 18 text

Composition Joining together

Slide 19

Slide 19 text

Coordinaton Working together

Slide 20

Slide 20 text

class A include Enumerable def each # ... end end

Slide 21

Slide 21 text

a.each { |x| b x }

Slide 22

Slide 22 text

If no, Who?

Slide 23

Slide 23 text

RubyConf 12 Toward a Design for Ruby

Slide 24

Slide 24 text

Have you tried Rubinius?

Slide 25

Slide 25 text

If yes, How was your experience?

Slide 26

Slide 26 text

If no, When?

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Rubinius A platform for languages

Slide 29

Slide 29 text

28c3 The Science of Insecurity

Slide 30

Slide 30 text

Flexibility Dynamically typed system language

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Ruby In Ruby

Slide 34

Slide 34 text

class Array def [] Ruby.primitive :array_aref raise PrimitiveFailure, "Array#[] primitive failed" end end

Slide 35

Slide 35 text

class Array : public Object { private: Fixnum* total_; // slot Tuple* tuple_; // slot public: attr_accessor(total, Fixnum); attr_accessor(tuple, Tuple); }

Slide 36

Slide 36 text

class Array : public Object { // Ruby.primitive :array_aref Object* aref(STATE, Fixnum* idx); }

Slide 37

Slide 37 text

instruction send_method(literal) [ receiver -- value ] => send flush_ip(); Object* recv = stack_top(); InlineCache* cache = reinterpret_cast(literal); Arguments args(cache->name, recv, cNil, 0, 0); Object* ret = cache->execute(state, call_frame, args); (void)stack_pop(); CHECK_AND_PUSH(ret); end

Slide 38

Slide 38 text

class OneArgument { public: static bool call(STATE, VMMethod* vmm, StackVariables* scope, Arguments& args) { if(args.total() != 1) return false; scope->set_local(0, args.get_argument(0)); return true; } };

Slide 39

Slide 39 text

Reliability Earning trust

Slide 40

Slide 40 text

$ time make test test succeeded real!0m1.232s user!0m0.857s sys! 0m0.166s

Slide 41

Slide 41 text

$ time make test test succeeded real!0m4.868s user!0m0.937s sys! 0m0.375s

Slide 42

Slide 42 text

$ make test ... PASS all 951 tests

Slide 43

Slide 43 text

RubySpec Executable specification of Ruby

Slide 44

Slide 44 text

23122 examples 158698 expectations

Slide 45

Slide 45 text

Performance Objects and execution

Slide 46

Slide 46 text

Memory Generational garbage collection

Slide 47

Slide 47 text

Method JIT Profile & type-feedback driven

Slide 48

Slide 48 text

Concurrency Parallelism with no global lock

Slide 49

Slide 49 text

Tools Understanding execution

Slide 50

Slide 50 text

Debugger Built-in API and CLI

Slide 51

Slide 51 text

Profiler Visibility of un-optimized code

Slide 52

Slide 52 text

Memory Analysis Allocation tracking and histograms

Slide 53

Slide 53 text

Agent Runtime inspection & control

Slide 54

Slide 54 text

Innovation Testing the limits

Slide 55

Slide 55 text

Mirrors Design principles for meta facilities

Slide 56

Slide 56 text

"name".byte_to_character_index(2)

Slide 57

Slide 57 text

Capabilities Robust composition for access & concurrency control

Slide 58

Slide 58 text

a.b(c)

Slide 59

Slide 59 text

atomy-lang.org fancy-lang.org rubini.us/projects

Slide 60

Slide 60 text

github.com/rubinius github.com/brixen @brixen

Slide 61

Slide 61 text

Thank you