rubyconf 2007 - Rubinius 1.0

80
Evan Phoenix - RubyConf 2007

description

The Rubinius 1.0 presented at RubyConf 2007

Transcript of rubyconf 2007 - Rubinius 1.0

Page 1: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Page 2: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Page 3: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Last things first,first things last.

What is the endgame?

In a word..

Page 4: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Total

Page 5: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Total world

Page 6: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Total world domination

Page 7: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

For Ruby!

Page 8: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

375 days ago...In a galaxy far far away...

(aka Denver)

Page 9: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Page 10: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Page 11: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

The end of Sydney

The beginning of Rubinius

Page 12: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Enormous progress

Page 13: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

class Rubinius < Smalltalk# forminclude Ruby::Syntax# functioninclude Ruby::Behavior# elbow greaseinclude Google.search(“crazy cs papers”)

end

Page 14: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

CS Nerd Attack Mode!(blitznerdo)

Page 15: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

GenerationalGarbage Collection!

(with heap compaction)

Page 16: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Bytecode execution!

Page 17: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Stackless!(uses no C stack)

Page 18: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Self-hostedkernel and compiler!

Page 19: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Pre-compiled files! (.rbc)

Page 20: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Builtin packaging!(.rba == .jar)

Page 21: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Oh my!

Page 22: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

AudienceParticipation

Page 23: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Runtime and Kernel

Page 24: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

kernel |ˈkərnl|nouna 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.

Page 25: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

1.8

Page 26: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

84,516 lines of C 0 lines of Ruby

Page 27: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

1.9

Page 28: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

128,786 lines of C0 lines of Ruby

Page 29: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

IronRuby(pre-alpha1)

Page 30: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

48,282 lines of .cs 0 lines of Ruby

Page 31: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

JRuby 1.0.2

Page 32: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

114,507 lines of .java 0 lines of Ruby

Page 33: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Rubinius

Page 34: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

25,398 lines of C13,946 lines of Ruby

Page 35: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

0

25,000

50,000

75,000

100,000

125,000

150,000

1.8 1.9 ironruby jruby rubinius

NOT Ruby Ruby

Page 36: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Junior HighAnalysis

Page 37: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

1.8 and 1.9

Ruby for C programmers

Page 38: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

JRuby

Ruby for Java programmers

Page 39: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

IronRuby

Ruby for C# programmers

Page 40: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Rubinius

Ruby for Ruby programmers

Page 41: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Page 42: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Eating your own dog food ==

Feedback loop

Page 43: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Optimized Rubinius kernel / VM

==Optimization for all

Ruby code

Page 44: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Page 45: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

You’re a Ruby developer,I’m a Ruby developer

Page 46: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Of the rubists,by the rubists,for the rubists

Page 47: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Page 48: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Road, rubber, all that jazz.

Page 49: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Faster in 24 of 31 tests (yarv micro benchmarks against 1.8)

Page 50: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Moving quickly

Page 51: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

so why isn’t it done?

Page 52: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Architecture/design is quite important

Page 53: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

but hard to create in a vacuum

Page 54: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Mistakes were made.

Page 55: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

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

Page 56: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

“A person who never made a mistake never tried anything new”

-- Albert Einstein

“You will do foolish things,but do this with enthusiasm”

-- Collete

Page 57: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

-Ofun

Page 58: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Rarely a burden,always a treat.

Page 59: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Community

Page 60: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

57 committers

17 with 20 or more commits

36 with 100+ lines changed

Page 61: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Weekend patchers&

Code junkies alike

Page 62: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Free flowing commit bit

Page 63: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Pat Eyler

Marcus Crafter

David WaiteShane Becker

Page 64: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Eric Hodel

Kevin ClarkBrian Ford

Adam Gardiner

Page 65: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Ryan Davis

Wilson Bilkovich

Yehuda Katz

Page 66: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Abigail PhoenixJohn Hornbeck

Eero Saynatkari

(official wife)

Fog(official mascot)

Page 67: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Thanks EY!

Page 68: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Evan Phoenix<[email protected]>

Page 69: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Page 70: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

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

Backtraces!

Page 71: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

C extensions can misbehave

Page 72: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

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

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!

Page 73: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Time lost to segfaults

50

100

150

200

1 3 5

2 6 10

30

70

200

1.8 rubinius

Page 74: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Memory usage

Page 75: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

•1.8 garbage collector is simple, but too simple.

•Rubinius uses modern techniques to decrease memory usage and increase throughput

Page 76: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Fork you!

Page 77: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

•Start up a program.

•Require all your code.

•fork() the process.

•Watch your memory double.

In 1.8...

Page 78: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

• Start up a program.

• Require all your code.

• fork() the process.

• Watch (virtually) NO change in the memory footprint!

In Rubinius...

Page 79: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

1 2 3 4

1.8 rubinius

Memory change peradditional instance

Page 80: rubyconf 2007 - Rubinius 1.0

Evan Phoenix - RubyConf 2007

Thank You!