Rubinius, and the Future of Ruby

A8e44ce1b57c2689d5a7172d15df42b5?s=47 brixen
March 01, 2013

Rubinius, and the Future of Ruby

Presentation at Elemental http://www.elementaltechnologies.com/ on 1 March 2013.

A8e44ce1b57c2689d5a7172d15df42b5?s=128

brixen

March 01, 2013
Tweet

Transcript

  1. Rubinius, and the Future of Ruby ELEMENTAL 1 MARCH 2013

  2. Brian Shirai Rubinius Developer

  3. None
  4. Questions Tools for thought

  5. OSS/FOSS/CC Community of contributions

  6. Has Ruby reached its potential?

  7. If yes, Where do we go from here?

  8. If no, What should we be working on?

  9. Celluloid Actor-based concurrent object framework

  10. None
  11. Should Matz be the only one making decisions about Ruby?

  12. If yes, Why?

  13. Concurrency Performance Security Integration API

  14. Refinements Action at a distance

  15. Libraries Frameworks Applications

  16. "active_model".camelize # => "ActiveModel"

  17. Stratification Foundation vs Roof

  18. Composition Joining together

  19. Coordinaton Working together

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

  21. a.each { |x| b x }

  22. If no, Who?

  23. RubyConf 12 Toward a Design for Ruby

  24. Have you tried Rubinius?

  25. If yes, How was your experience?

  26. If no, When?

  27. None
  28. Rubinius A platform for languages

  29. 28c3 The Science of Insecurity

  30. Flexibility Dynamically typed system language

  31. None
  32. None
  33. Ruby In Ruby

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

    failed" end end
  35. class Array : public Object { private: Fixnum* total_; //

    slot Tuple* tuple_; // slot public: attr_accessor(total, Fixnum); attr_accessor(tuple, Tuple); }
  36. class Array : public Object { // Ruby.primitive :array_aref Object*

    aref(STATE, Fixnum* idx); }
  37. instruction send_method(literal) [ receiver -- value ] => send flush_ip();

    Object* recv = stack_top(); InlineCache* cache = reinterpret_cast<InlineCache*>(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
  38. 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; } };
  39. Reliability Earning trust

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

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

  42. $ make test ... PASS all 951 tests

  43. RubySpec Executable specification of Ruby

  44. 23122 examples 158698 expectations

  45. Performance Objects and execution

  46. Memory Generational garbage collection

  47. Method JIT Profile & type-feedback driven

  48. Concurrency Parallelism with no global lock

  49. Tools Understanding execution

  50. Debugger Built-in API and CLI

  51. Profiler Visibility of un-optimized code

  52. Memory Analysis Allocation tracking and histograms

  53. Agent Runtime inspection & control

  54. Innovation Testing the limits

  55. Mirrors Design principles for meta facilities

  56. "name".byte_to_character_index(2)

  57. Capabilities Robust composition for access & concurrency control

  58. a.b(c)

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

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

  61. Thank you