Evan Phoenix - RubyConf 2007
Evan Phoenix - RubyConf 2007
Last things first,
first things last.
                   What is the endgame?

                   In a word..




          ...
Total



        Evan Phoenix - RubyConf 2007
Total world



              Evan Phoenix - RubyConf 2007
Total world domination



              Evan Phoenix - RubyConf 2007
For Ruby!
     Evan Phoenix - RubyConf 2007
375 days ago...
In a galaxy far far away...
                     (aka Denver)




                 Evan Phoenix - RubyConf...
Evan Phoenix - RubyConf 2007
Evan Phoenix - RubyConf 2007
The end of Sydney

The beginning of Rubinius


                Evan Phoenix - RubyConf 2007
Enormous progress



           Evan Phoenix - RubyConf 2007
class Rubinius < Smalltalk
   # form
   include Ruby::Syntax
   # function
   include Ruby::Behavior
   # elbow grease
   ...
CS Nerd Attack Mode!
       (blitznerdo)




                      Evan Phoenix - RubyConf 2007
Generational
  Garbage Collection!
(with heap compaction)

              Evan Phoenix - RubyConf 2007
Bytecode execution!



            Evan Phoenix - RubyConf 2007
Stackless!
(uses no C stack)


           Evan Phoenix - RubyConf 2007
Self-hosted
kernel and compiler!


             Evan Phoenix - RubyConf 2007
Pre-compiled files!
      (.rbc)


            Evan Phoenix - RubyConf 2007
Builtin packaging!
  (.rba == .jar)


            Evan Phoenix - RubyConf 2007
Oh my!



     Evan Phoenix - RubyConf 2007
Audience
Participation


          Evan Phoenix - RubyConf 2007
Runtime and Kernel



            Evan Phoenix - RubyConf 2007
kernel
noun
a softer, usually edible part of a nut, seed, or fruit stone contained
within its hard shell.
• the seed and h...
1.8



      Evan Phoenix - RubyConf 2007
84,516 lines of C
     0 lines of Ruby


             Evan Phoenix - RubyConf 2007
1.9



      Evan Phoenix - RubyConf 2007
128,786 lines of C
      0 lines of Ruby


               Evan Phoenix - RubyConf 2007
IronRuby
(pre-alpha1)



         Evan Phoenix - RubyConf 2007
48,282 lines of .cs
     0 lines of Ruby


             Evan Phoenix - RubyConf 2007
JRuby 1.0.2



        Evan Phoenix - RubyConf 2007
114,507 lines of .java
      0 lines of Ruby


              Evan Phoenix - RubyConf 2007
Rubinius



       Evan Phoenix - RubyConf 2007
25,398 lines of C
13,946 lines of Ruby


             Evan Phoenix - RubyConf 2007
NOT Ruby                 Ruby

150,000


125,000


100,000


 75,000


 50,000


 25,000


     0
          1.8        1.9...
Junior High
  Analysis


        Evan Phoenix - RubyConf 2007
1.8 and 1.9

Ruby for C programmers

              Evan Phoenix - RubyConf 2007
JRuby

Ruby for Java programmers

                 Evan Phoenix - RubyConf 2007
IronRuby

Ruby for C# programmers


              Evan Phoenix - RubyConf 2007
Rubinius

Ruby for Ruby programmers


               Evan Phoenix - RubyConf 2007
Evan Phoenix - RubyConf 2007
Eating your own dog food
         ==
    Feedback loop

               Evan Phoenix - RubyConf 2007
Optimized Rubinius
   kernel / VM
       ==
Optimization for all
    Ruby code
             Evan Phoenix - RubyConf 2007
Evan Phoenix - RubyConf 2007
You’re a Ruby developer,
 I’m a Ruby developer


               Evan Phoenix - RubyConf 2007
Of the rubists,
by the rubists,
for the rubists

           Evan Phoenix - RubyConf 2007
Evan Phoenix - RubyConf 2007
Road, rubber,
all that jazz.


          Evan Phoenix - RubyConf 2007
Faster in 24 of 31 tests
        (yarv micro benchmarks against 1.8)




                        Evan Phoenix - RubyConf 2007
Moving quickly



          Evan Phoenix - RubyConf 2007
so why isn’t it done?



              Evan Phoenix - RubyConf 2007
Architecture/design is
  quite important


              Evan Phoenix - RubyConf 2007
but hard to create in a
       vacuum


              Evan Phoenix - RubyConf 2007
Mistakes were made.



            Evan Phoenix - RubyConf 2007
“Practice makes perfect”
             -- Ryan Davis (RubyConf 2007)




                    Evan Phoenix - RubyConf 2007
“A person who never made a
mistake never tried anything new”
                        -- Albert Einstein


 “You will do fo...
-Ofun

    Evan Phoenix - RubyConf 2007
Rarely a burden,
 always a treat.


           Evan Phoenix - RubyConf 2007
Community



       Evan Phoenix - RubyConf 2007
57 committers
17 with 20 or more commits

36 with 100+ lines changed

                 Evan Phoenix - RubyConf 2007
Weekend patchers
       &
Code junkies alike

            Evan Phoenix - RubyConf 2007
Free flowing commit bit



              Evan Phoenix - RubyConf 2007
Marcus Crafter

     Pat Eyler




                 David Waite
Shane Becker          Evan Phoenix - RubyConf 2007
Eric Hodel
 Adam Gardiner




                    Brian Ford
Kevin Clark
                   Evan Phoenix - RubyConf 2007
Wilson Bilkovich
Ryan Davis




             Yehuda Katz    Evan Phoenix - RubyConf 2007
Abigail Phoenix
 John Hornbeck          (official wife)




                           Fog
                       (official ...
Thanks EY!

        Evan Phoenix - RubyConf 2007
Evan Phoenix
<evan@fallingsnow.net>



              Evan Phoenix - RubyConf 2007
Evan Phoenix - RubyConf 2007
Backtraces!

An exception has occurred:
    User requested termination with Control-C (Interrupt)

Backtrace:
        Read...
C extensions can
   misbehave




            Evan Phoenix - RubyConf 2007
VALUE test_segfault(VALUE self) {
                              // Get a pointer to address 4.
                           ...
Time lost to segfaults

                   1.8             rubinius
                                                      ...
Memory usage




         Evan Phoenix - RubyConf 2007
• 1.8 garbage collector is
 simple, but too simple.

• Rubinius uses modern
 techniques to decrease
 memory usage and incr...
Fork you!



       Evan Phoenix - RubyConf 2007
In 1.8...

• Start up a program.
• Require all your code.
• fork() the process.
• Watch your memory double.

             ...
In Rubinius...

• Start up a program.
• Require all your code.
• fork() the process.
• Watch (virtually) NO change in the ...
Memory change per
    additional instance




1            2    3               4

       1.8       rubinius




         ...
Thank You!



       Evan Phoenix - RubyConf 2007
Upcoming SlideShare
Loading in …5
×

rubyconf 2007 - Rubinius 1.0

5,278 views
5,132 views

Published on

The Rubinius 1.0 presented at RubyConf 2007

Published in: Technology, Education
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,278
On SlideShare
0
From Embeds
0
Number of Embeds
26
Actions
Shares
0
Downloads
91
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

rubyconf 2007 - Rubinius 1.0

  1. 1. Evan Phoenix - RubyConf 2007
  2. 2. Evan Phoenix - RubyConf 2007
  3. 3. Last things first, first things last. What is the endgame? In a word.. Evan Phoenix - RubyConf 2007
  4. 4. Total Evan Phoenix - RubyConf 2007
  5. 5. Total world Evan Phoenix - RubyConf 2007
  6. 6. Total world domination Evan Phoenix - RubyConf 2007
  7. 7. For Ruby! Evan Phoenix - RubyConf 2007
  8. 8. 375 days ago... In a galaxy far far away... (aka Denver) Evan Phoenix - RubyConf 2007
  9. 9. Evan Phoenix - RubyConf 2007
  10. 10. Evan Phoenix - RubyConf 2007
  11. 11. The end of Sydney The beginning of Rubinius Evan Phoenix - RubyConf 2007
  12. 12. Enormous progress Evan Phoenix - RubyConf 2007
  13. 13. class Rubinius < Smalltalk # form include Ruby::Syntax # function include Ruby::Behavior # elbow grease include Google.search(“crazy cs papers”) end Evan Phoenix - RubyConf 2007
  14. 14. CS Nerd Attack Mode! (blitznerdo) Evan Phoenix - RubyConf 2007
  15. 15. Generational Garbage Collection! (with heap compaction) Evan Phoenix - RubyConf 2007
  16. 16. Bytecode execution! Evan Phoenix - RubyConf 2007
  17. 17. Stackless! (uses no C stack) Evan Phoenix - RubyConf 2007
  18. 18. Self-hosted kernel and compiler! Evan Phoenix - RubyConf 2007
  19. 19. Pre-compiled files! (.rbc) Evan Phoenix - RubyConf 2007
  20. 20. Builtin packaging! (.rba == .jar) Evan Phoenix - RubyConf 2007
  21. 21. Oh my! Evan Phoenix - RubyConf 2007
  22. 22. Audience Participation Evan Phoenix - RubyConf 2007
  23. 23. Runtime and Kernel Evan Phoenix - RubyConf 2007
  24. 24. kernel noun a softer, usually edible part of a nut, seed, or fruit stone contained within its hard shell. • the seed and hard husk of a cereal, esp. wheat. • [in sing. ] the central or most important part of something : this is the kernel of the argument. • the most basic level or core of an operating system of a computer, responsible for resource allocation, file management, and security. • [as adj. ] Linguistics denoting a basic unmarked linguistic string. Evan Phoenix - RubyConf 2007
  25. 25. 1.8 Evan Phoenix - RubyConf 2007
  26. 26. 84,516 lines of C 0 lines of Ruby Evan Phoenix - RubyConf 2007
  27. 27. 1.9 Evan Phoenix - RubyConf 2007
  28. 28. 128,786 lines of C 0 lines of Ruby Evan Phoenix - RubyConf 2007
  29. 29. IronRuby (pre-alpha1) Evan Phoenix - RubyConf 2007
  30. 30. 48,282 lines of .cs 0 lines of Ruby Evan Phoenix - RubyConf 2007
  31. 31. JRuby 1.0.2 Evan Phoenix - RubyConf 2007
  32. 32. 114,507 lines of .java 0 lines of Ruby Evan Phoenix - RubyConf 2007
  33. 33. Rubinius Evan Phoenix - RubyConf 2007
  34. 34. 25,398 lines of C 13,946 lines of Ruby Evan Phoenix - RubyConf 2007
  35. 35. NOT Ruby Ruby 150,000 125,000 100,000 75,000 50,000 25,000 0 1.8 1.9 ironruby jruby rubinius Evan Phoenix - RubyConf 2007
  36. 36. Junior High Analysis Evan Phoenix - RubyConf 2007
  37. 37. 1.8 and 1.9 Ruby for C programmers Evan Phoenix - RubyConf 2007
  38. 38. JRuby Ruby for Java programmers Evan Phoenix - RubyConf 2007
  39. 39. IronRuby Ruby for C# programmers Evan Phoenix - RubyConf 2007
  40. 40. Rubinius Ruby for Ruby programmers Evan Phoenix - RubyConf 2007
  41. 41. Evan Phoenix - RubyConf 2007
  42. 42. Eating your own dog food == Feedback loop Evan Phoenix - RubyConf 2007
  43. 43. Optimized Rubinius kernel / VM == Optimization for all Ruby code Evan Phoenix - RubyConf 2007
  44. 44. Evan Phoenix - RubyConf 2007
  45. 45. You’re a Ruby developer, I’m a Ruby developer Evan Phoenix - RubyConf 2007
  46. 46. Of the rubists, by the rubists, for the rubists Evan Phoenix - RubyConf 2007
  47. 47. Evan Phoenix - RubyConf 2007
  48. 48. Road, rubber, all that jazz. Evan Phoenix - RubyConf 2007
  49. 49. Faster in 24 of 31 tests (yarv micro benchmarks against 1.8) Evan Phoenix - RubyConf 2007
  50. 50. Moving quickly Evan Phoenix - RubyConf 2007
  51. 51. so why isn’t it done? Evan Phoenix - RubyConf 2007
  52. 52. Architecture/design is quite important Evan Phoenix - RubyConf 2007
  53. 53. but hard to create in a vacuum Evan Phoenix - RubyConf 2007
  54. 54. Mistakes were made. Evan Phoenix - RubyConf 2007
  55. 55. “Practice makes perfect” -- Ryan Davis (RubyConf 2007) Evan Phoenix - RubyConf 2007
  56. 56. “A person who never made a mistake never tried anything new” -- Albert Einstein “You will do foolish things, but do this with enthusiasm” -- Collete Evan Phoenix - RubyConf 2007
  57. 57. -Ofun Evan Phoenix - RubyConf 2007
  58. 58. Rarely a burden, always a treat. Evan Phoenix - RubyConf 2007
  59. 59. Community Evan Phoenix - RubyConf 2007
  60. 60. 57 committers 17 with 20 or more commits 36 with 100+ lines changed Evan Phoenix - RubyConf 2007
  61. 61. Weekend patchers & Code junkies alike Evan Phoenix - RubyConf 2007
  62. 62. Free flowing commit bit Evan Phoenix - RubyConf 2007
  63. 63. Marcus Crafter Pat Eyler David Waite Shane Becker Evan Phoenix - RubyConf 2007
  64. 64. Eric Hodel Adam Gardiner Brian Ford Kevin Clark Evan Phoenix - RubyConf 2007
  65. 65. Wilson Bilkovich Ryan Davis Yehuda Katz Evan Phoenix - RubyConf 2007
  66. 66. Abigail Phoenix John Hornbeck (official wife) Fog (official mascot) Eero Saynatkari Evan Phoenix - RubyConf 2007
  67. 67. Thanks EY! Evan Phoenix - RubyConf 2007
  68. 68. Evan Phoenix <evan@fallingsnow.net> Evan Phoenix - RubyConf 2007
  69. 69. Evan Phoenix - RubyConf 2007
  70. 70. Backtraces! An exception has occurred: User requested termination with Control-C (Interrupt) Backtrace: Readline.readline at kernel/core/readline.rb:52 main.__script__ at lib/bin/sirb.rb:78 main.load at kernel/core/compile.rb:78 main.require at kernel/core/compile.rb:129 Array#each at kernel/core/array.rb:526 Integer(Fixnum)#times at kernel/core/integer.rb:19 Array#each at kernel/core/array.rb:526 main.require at kernel/core/compile.rb:112 Array#each at kernel/core/array.rb:526 Integer(Fixnum)#times at kernel/core/integer.rb:19 Array#each at kernel/core/array.rb:526 main.require at kernel/core/compile.rb:111 main.__script__ at kernel/loader.rb:159 Evan Phoenix - RubyConf 2007
  71. 71. C extensions can misbehave Evan Phoenix - RubyConf 2007
  72. 72. VALUE test_segfault(VALUE self) { // Get a pointer to address 4. char *i = (char*)4; // Attempt to read from address 4 // which is definitely not allowed. x = *i; // Never get this far. return Qnil; } Raises an exception! Segfault detected in function 0x90a00 (accessing 0x4) (MemorySegmentionError) SomeExtension#test_segfault at extensions/test/test.c main.__script__ at extensions/test/test.rb:38 main.load at kernel/core/compile.rb:95 main.__script__ at kernel/loader.rb:122 Evan Phoenix - RubyConf 2007
  73. 73. Time lost to segfaults 1.8 rubinius 200 200 150 100 70 50 30 10 6 2 1 3 5 Evan Phoenix - RubyConf 2007
  74. 74. Memory usage Evan Phoenix - RubyConf 2007
  75. 75. • 1.8 garbage collector is simple, but too simple. • Rubinius uses modern techniques to decrease memory usage and increase throughput Evan Phoenix - RubyConf 2007
  76. 76. Fork you! Evan Phoenix - RubyConf 2007
  77. 77. In 1.8... • Start up a program. • Require all your code. • fork() the process. • Watch your memory double. Evan Phoenix - RubyConf 2007
  78. 78. In Rubinius... • Start up a program. • Require all your code. • fork() the process. • Watch (virtually) NO change in the memory footprint! Evan Phoenix - RubyConf 2007
  79. 79. Memory change per additional instance 1 2 3 4 1.8 rubinius Evan Phoenix - RubyConf 2007
  80. 80. Thank You! Evan Phoenix - RubyConf 2007

×