SlideShare a Scribd company logo
1 of 89
Download to read offline
Keynote Powered by Rabbit 0.9.1
Keynote
Yukihiro "Matz" Matsumoto
まつもと ゆきひろ
@yukihiro_matz
Keynote Powered by Rabbit 0.9.1
Acknowledgment
In memory of
Guy Decoux
_why the lucky stiff
Zed Shaw
1/88
Keynote Powered by Rabbit 0.9.1
Today's Menu
History
Future
Diversity
2/88
Keynote Powered by Rabbit 0.9.1
History
10th Annual RubyConf
3/88
Keynote Powered by Rabbit 0.9.1
History
9 Keynotes by me
4/88
Keynote Powered by Rabbit 0.9.1
2001
Tampa, FL
5/88
Keynote Powered by Rabbit 0.9.1
2001
Human-Oriented
Programming in Ruby
6/88
Keynote Powered by Rabbit 0.9.1
2002
Seattle, WA
7/88
Keynote Powered by Rabbit 0.9.1
2002
Be Minor, Be Cool
8/88
Keynote Powered by Rabbit 0.9.1
2003
Austin, TX
9/88
Keynote Powered by Rabbit 0.9.1
2003
Visions for the Future
How Ruby Sucks
10/88
Keynote Powered by Rabbit 0.9.1
2004
Chantilly, VA
11/88
Keynote Powered by Rabbit 0.9.1
2004
12/88
Keynote Powered by Rabbit 0.9.1
2004
13/88
Keynote Powered by Rabbit 0.9.1
2005
San Diego, CA
14/88
Keynote Powered by Rabbit 0.9.1
2005
Visions for the Future
Wild and Weird Ideas
15/88
Keynote Powered by Rabbit 0.9.1
2006
Denver, CO
16/88
Keynote Powered by Rabbit 0.9.1
2006
The Return of the Bikeshed
or Nuclear Plant in the
Backyard
17/88
Keynote Powered by Rabbit 0.9.1
2007
Charlotte, NC
18/88
Keynote Powered by Rabbit 0.9.1
2007
Language Matters
19/88
Keynote Powered by Rabbit 0.9.1
2008
Orlando, FL
20/88
Keynote Powered by Rabbit 0.9.1
2008
Reasons behind Ruby
21/88
Keynote Powered by Rabbit 0.9.1
2009
San Francisco, CA
22/88
Keynote Powered by Rabbit 0.9.1
2009
The 0.8 True Language (ZEPT)
23/88
Keynote Powered by Rabbit 0.9.1
2010
New Orleans, LA
24/88
Keynote Powered by Rabbit 0.9.1
2010
Future and Diversity
25/88
Keynote Powered by Rabbit 0.9.1
Future and Diversity
26/88
Keynote Powered by Rabbit 0.9.1
 The Future 
27/88
Keynote Powered by Rabbit 0.9.1
 Ruby 2.0 
28/88
Keynote Powered by Rabbit 0.9.1
Ruby 2.0
Traits
Method Combination
Keyword arguments
Namespaces
a few other nifty features
29/88
Keynote Powered by Rabbit 0.9.1
Traits
trait
a trait is a collection of methods,
used as a "simple conceptual
model for structuring object
oriented programs".
from Wikipedia (en)
30/88
Keynote Powered by Rabbit 0.9.1
What's wrong for
Modules?
Conflict detection
Conflict resolution
Tree modification
No method combination
31/88
Keynote Powered by Rabbit 0.9.1
Conflict Detection
name conflict
intentional (overriding)?
or accidental?
32/88
Keynote Powered by Rabbit 0.9.1
Conflict Problem
module American
attr_accessor :address
end
module Japanese
attr_accessor :address
end
class JapaneseAmerican
include American
include Japanese
end
JapaneseAmerican.new.address
# which address?
p JapaneseAmerican.ancestors
# => [JapaneseAmerican, Japanese, American, Object, Kernel]
33/88
Keynote Powered by Rabbit 0.9.1
Solution
We will introduce #mix
#mix will replace #include
#mix can detect and
resolve conflict
34/88
Keynote Powered by Rabbit 0.9.1
Module#mix
injects the current snapshot
into other class/module.
raises error when name
conflict
unless you resolve it
explicitly
35/88
Keynote Powered by Rabbit 0.9.1
Conflict Problem
module American
attr_accessor :address
end
module Japanese
attr_accessor :address
end
class JapaneseAmerican
# Japanese comes First
include American
include Japanese
end
36/88
Keynote Powered by Rabbit 0.9.1
Detecting Conflict
module American
attr_accessor :address
end
module Japanese
attr_accessor :address
end
class JapaneseAmerican
mix American
mix Japanese # => address conflict!
end
37/88
Keynote Powered by Rabbit 0.9.1
Resolving Conflict
class JapaneseAmerican
mix American, :address => :us_address
mix Japanese, :address => :jp_address
end
38/88
Keynote Powered by Rabbit 0.9.1
Tree Modification
module M1; end
class C1; include M1; end
module M2; end
module M1; include M2; end
p C1.ancestors
# [C1, M1, Object, Kernel]
p M1.ancestors
# [M1, M2]
inconsistent 39/88
Keynote Powered by Rabbit 0.9.1
Tree Modification
#mix copies attributes
so tree modification
afterward does not affect.
consistent at leaset
40/88
Keynote Powered by Rabbit 0.9.1
alias_method_chain
ugly
fragile to multiple wrapping
we want to wrap methods
41/88
Keynote Powered by Rabbit 0.9.1
Module#prepend
We will introduce #prepend
#prepend put the module
before the current class/
module
methods defined in the
class will wrap methods of
same names
42/88
Keynote Powered by Rabbit 0.9.1
Module#prepend
module Foo
def foo
p :before
super
p :after
end
end
class Bar
def foo
p :foo
end
prepend Foo
end
Bar.new.foo # :before, :foo, :after
43/88
Keynote Powered by Rabbit 0.9.1
Keyword Arguments
calling
1.step(by: 2, to: 20) do |i|
p i
end
44/88
Keynote Powered by Rabbit 0.9.1
Keyword Arguments
defining
def step(by: step, to: limit)
...
end
45/88
Keynote Powered by Rabbit 0.9.1
Keyword Arguments
Mere expanded hash
argument at the end
Automatic decomposition
46/88
Keynote Powered by Rabbit 0.9.1
Namespaces
encapsulation of monkey
patching
monkey patching is global
modification
embodies freedom, but
dangerous
47/88
Keynote Powered by Rabbit 0.9.1
Namespaces
encapsulation of monkey
patching
classsbox / selector
namespace / refinement /
whatever
48/88
Keynote Powered by Rabbit 0.9.1
What if
class Integer
def /(other)
return quo(other)
end
end
p 1/2 # => (1/2)
49/88
Keynote Powered by Rabbit 0.9.1
Allow Refinement
module MathN
refine Integer do
def /(other)
return quo(other)
end
end
p 1/2 # => (1/2)
end
p 1/2 # => 0
50/88
Keynote Powered by Rabbit 0.9.1
Using Refinement
module Rationalize
using MathN
p 1/2 # => (1/2)
end
p 1/2 # => 0
51/88
Keynote Powered by Rabbit 0.9.1
Real Private Methods
class HasPrivate
module Private
def priv
end
end
using Private
def pub
priv
end
end
h = HasPrivate.new
h.priv # => error
h.instance_eval {
priv # => error
}
52/88
Keynote Powered by Rabbit 0.9.1
FAQ
When will they be available?
Ruby 2.0
53/88
Keynote Powered by Rabbit 0.9.1
FAQ
When will Ruby2.0 be?
Christmas
on whatever year!
54/88
Keynote Powered by Rabbit 0.9.1
 Diversity 
55/88
Keynote Powered by Rabbit 0.9.1
 I love Diversity 
56/88
Keynote Powered by Rabbit 0.9.1
 I dislike Diversity 
57/88
Keynote Powered by Rabbit 0.9.1
The Ruby Language
specification
implementation
58/88
Keynote Powered by Rabbit 0.9.1
The Ruby Language
specification
Standard Ruby (ISO)✓
RubySpec✓
59/88
Keynote Powered by Rabbit 0.9.1
The Ruby Language
implementation
CRuby✓
JRuby✓
Rubinius✓
MagLev✓
...✓
60/88
Keynote Powered by Rabbit 0.9.1
Alternative to fill the
Niche
JRuby for JVM
MacRuby for Mac
MagLev for GemStone
Ruboto for Android
61/88
Keynote Powered by Rabbit 0.9.1
Yet another Niche
Embedding
62/88
Keynote Powered by Rabbit 0.9.1
Rite
The New Comer
Light weight implmentation
of usable subset of the
Ruby language
63/88
Keynote Powered by Rabbit 0.9.1
Target
Embedding
Small devices
Digital Appliances
Applications (Game?)
and more
64/88
Keynote Powered by Rabbit 0.9.1
Embeddable Ruby
think of Lua
with better language
65/88
Keynote Powered by Rabbit 0.9.1
Principle
Components
Configurable
66/88
Keynote Powered by Rabbit 0.9.1
Components
the implementation will be
combination of components
parser
virtual machine
garbage collector
debugger
class libraries
67/88
Keynote Powered by Rabbit 0.9.1
Configurable
to minimal set of features
required for an application
no universal behavior
between platforms
e.g. no file I/O for small devices
68/88
Keynote Powered by Rabbit 0.9.1
Configurable
use double or float
use int, long or long long for
fixnums
ASCII or UTF-8
69/88
Keynote Powered by Rabbit 0.9.1
Requirement
portable
minimal requirement: standard
C (C99)
should run on PC / RTOS /
free standing
less memory
less latency
70/88
Keynote Powered by Rabbit 0.9.1
Implementaion Detail
register-based virtual
machine
32bit word-code
floats are immediate
(possibly generational)
incremental mark-sweep GC
71/88
Keynote Powered by Rabbit 0.9.1
What can I do with Rite?
embedding
application embedding✓
small devices
e.g. digital TV
✓
72/88
Keynote Powered by Rabbit 0.9.1
What can I do with Rite?
concurrent
assign virtual machine for each
thread
✓
73/88
Keynote Powered by Rabbit 0.9.1
the Ruby chip
by Prof. Tanaka from Kyushu
Institute of Technology
MIPS-like FPGA CPU with a
few instructions added
that help method look-up
and garbage collection marking
74/88
Keynote Powered by Rabbit 0.9.1
FAQ
When will Rite available?
I don't know, sorry.
But it's a part of Japanese
government funded two
year project (2010-2011)
75/88
Keynote Powered by Rabbit 0.9.1
FAQ
Will Rite be Open-Source?
Yes, probably under
MIT license.
But we need business
model to satisfy the
government.
76/88
Keynote Powered by Rabbit 0.9.1
FAQ
Will Rite be Open-Source?
We might choose GPL plus
commercial subscription
model (a la MySQL).
77/88
Keynote Powered by Rabbit 0.9.1
FAQ
Will Rite replace MRI?
No, Rite will not be a full-
featured, universal
implementation.
78/88
Keynote Powered by Rabbit 0.9.1
FAQ
Will Rite replace MRI?
It is a Domain Specific
Implementation, like
Ruboto.
79/88
Keynote Powered by Rabbit 0.9.1
FAQ
How about C API?
Rite will have different C
API from CRuby.
Currently we have no plan
to provide compatibility
layer.
80/88
Keynote Powered by Rabbit 0.9.1
FAQ
Will Rite support M17N?
No, you have to configure
single character encoding
from ASCII or UTF-8 in
compile time.
81/88
Keynote Powered by Rabbit 0.9.1
FAQ
Will Rite support (native)
threads?
No, to use threads you can
use multiple VM per native
threads. Rite may support
fibers in the future.
82/88
Keynote Powered by Rabbit 0.9.1
FAQ
Does Rite run faster than
YARV/JRuby/Rubinius, etc?
Probably Not, but maybe
on some benchmarks due
to float immediate values
and other techniques.
83/88
Keynote Powered by Rabbit 0.9.1
FAQ
How can I contribute to Rite?
Wait until we make it open-
source. We will open it on
github.
84/88
Keynote Powered by Rabbit 0.9.1
FAQ
Rite sounds familier
Originally Rite was a code
name for the first Ruby 2.0
virtual machine, which
was replaced by YARV. It's
coind from Ruby Lite.
85/88
Keynote Powered by Rabbit 0.9.1
FAQ
Do you resign from CRuby?
No, but I have spent less
time on CRuby recently
anyway.
86/88
Keynote Powered by Rabbit 0.9.1
FAQ
Do you resign from CRuby?
I will keep being a
maintainer of CRuby. And
above all, I will keep being
active as the creator of
the language and, the
leader of the community.
87/88
Keynote Powered by Rabbit 0.9.1
Thank you!
88/88

More Related Content

Similar to RubyConf 2010 Keynote by Matz

Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Fwdays
 
Automatski - How We Reinvented Machine Learning, Solved NP-Complete ML Proble...
Automatski - How We Reinvented Machine Learning, Solved NP-Complete ML Proble...Automatski - How We Reinvented Machine Learning, Solved NP-Complete ML Proble...
Automatski - How We Reinvented Machine Learning, Solved NP-Complete ML Proble...Aditya Yadav
 
Devel::NYTProf v5 at YAPC::NA 201406
Devel::NYTProf v5 at YAPC::NA 201406Devel::NYTProf v5 at YAPC::NA 201406
Devel::NYTProf v5 at YAPC::NA 201406Tim Bunce
 
Adding 1.21 Gigawatts to Applications with RabbitMQ (DPC 2015)
Adding 1.21 Gigawatts to Applications with RabbitMQ (DPC 2015)Adding 1.21 Gigawatts to Applications with RabbitMQ (DPC 2015)
Adding 1.21 Gigawatts to Applications with RabbitMQ (DPC 2015)James Titcumb
 
Pareto will tell you to stop using your ORM - Mateo Collina
Pareto will tell you to stop using your ORM - Mateo CollinaPareto will tell you to stop using your ORM - Mateo Collina
Pareto will tell you to stop using your ORM - Mateo CollinaWey Wey Web
 
Microsoft kafka load imbalance
Microsoft   kafka load imbalanceMicrosoft   kafka load imbalance
Microsoft kafka load imbalanceNitin Kumar
 
Hacking the Kinect with GAFFTA Day 1
Hacking the Kinect with GAFFTA Day 1Hacking the Kinect with GAFFTA Day 1
Hacking the Kinect with GAFFTA Day 1benDesigning
 
EclipseOMRBuildingBlocks4Polyglot_TURBO18
EclipseOMRBuildingBlocks4Polyglot_TURBO18EclipseOMRBuildingBlocks4Polyglot_TURBO18
EclipseOMRBuildingBlocks4Polyglot_TURBO18Xiaoli Liang
 
The Ring programming language version 1.5.3 book - Part 186 of 194
The Ring programming language version 1.5.3 book - Part 186 of 194The Ring programming language version 1.5.3 book - Part 186 of 194
The Ring programming language version 1.5.3 book - Part 186 of 194Mahmoud Samir Fayed
 
Going open source with small teams
Going open source with small teamsGoing open source with small teams
Going open source with small teamsJamie Thomas
 
MWLUG 2014: ATLUG Comes To You
MWLUG 2014: ATLUG Comes To YouMWLUG 2014: ATLUG Comes To You
MWLUG 2014: ATLUG Comes To YouPeter Presnell
 
20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudyYusuke Ando
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6Wim Godden
 
The Ring programming language version 1.10 book - Part 83 of 212
The Ring programming language version 1.10 book - Part 83 of 212The Ring programming language version 1.10 book - Part 83 of 212
The Ring programming language version 1.10 book - Part 83 of 212Mahmoud Samir Fayed
 
Oh the compilers you'll build
Oh the compilers you'll buildOh the compilers you'll build
Oh the compilers you'll buildMark Stoodley
 
Aspect-oriented programming in Perl
Aspect-oriented programming in PerlAspect-oriented programming in Perl
Aspect-oriented programming in Perlmegakott
 
Open frameworks 101_fitc
Open frameworks 101_fitcOpen frameworks 101_fitc
Open frameworks 101_fitcbenDesigning
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainKen Collins
 
Python on Android with Delphi FMX - The Cross Platform GUI Framework
Python on Android with Delphi FMX - The Cross Platform GUI Framework Python on Android with Delphi FMX - The Cross Platform GUI Framework
Python on Android with Delphi FMX - The Cross Platform GUI Framework Embarcadero Technologies
 
Dissolving the Problem: Making an ACID-Compliant Database Out of Apache Kafka
Dissolving the Problem: Making an ACID-Compliant Database Out of Apache KafkaDissolving the Problem: Making an ACID-Compliant Database Out of Apache Kafka
Dissolving the Problem: Making an ACID-Compliant Database Out of Apache Kafkaconfluent
 

Similar to RubyConf 2010 Keynote by Matz (20)

Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)
 
Automatski - How We Reinvented Machine Learning, Solved NP-Complete ML Proble...
Automatski - How We Reinvented Machine Learning, Solved NP-Complete ML Proble...Automatski - How We Reinvented Machine Learning, Solved NP-Complete ML Proble...
Automatski - How We Reinvented Machine Learning, Solved NP-Complete ML Proble...
 
Devel::NYTProf v5 at YAPC::NA 201406
Devel::NYTProf v5 at YAPC::NA 201406Devel::NYTProf v5 at YAPC::NA 201406
Devel::NYTProf v5 at YAPC::NA 201406
 
Adding 1.21 Gigawatts to Applications with RabbitMQ (DPC 2015)
Adding 1.21 Gigawatts to Applications with RabbitMQ (DPC 2015)Adding 1.21 Gigawatts to Applications with RabbitMQ (DPC 2015)
Adding 1.21 Gigawatts to Applications with RabbitMQ (DPC 2015)
 
Pareto will tell you to stop using your ORM - Mateo Collina
Pareto will tell you to stop using your ORM - Mateo CollinaPareto will tell you to stop using your ORM - Mateo Collina
Pareto will tell you to stop using your ORM - Mateo Collina
 
Microsoft kafka load imbalance
Microsoft   kafka load imbalanceMicrosoft   kafka load imbalance
Microsoft kafka load imbalance
 
Hacking the Kinect with GAFFTA Day 1
Hacking the Kinect with GAFFTA Day 1Hacking the Kinect with GAFFTA Day 1
Hacking the Kinect with GAFFTA Day 1
 
EclipseOMRBuildingBlocks4Polyglot_TURBO18
EclipseOMRBuildingBlocks4Polyglot_TURBO18EclipseOMRBuildingBlocks4Polyglot_TURBO18
EclipseOMRBuildingBlocks4Polyglot_TURBO18
 
The Ring programming language version 1.5.3 book - Part 186 of 194
The Ring programming language version 1.5.3 book - Part 186 of 194The Ring programming language version 1.5.3 book - Part 186 of 194
The Ring programming language version 1.5.3 book - Part 186 of 194
 
Going open source with small teams
Going open source with small teamsGoing open source with small teams
Going open source with small teams
 
MWLUG 2014: ATLUG Comes To You
MWLUG 2014: ATLUG Comes To YouMWLUG 2014: ATLUG Comes To You
MWLUG 2014: ATLUG Comes To You
 
20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudy
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6
 
The Ring programming language version 1.10 book - Part 83 of 212
The Ring programming language version 1.10 book - Part 83 of 212The Ring programming language version 1.10 book - Part 83 of 212
The Ring programming language version 1.10 book - Part 83 of 212
 
Oh the compilers you'll build
Oh the compilers you'll buildOh the compilers you'll build
Oh the compilers you'll build
 
Aspect-oriented programming in Perl
Aspect-oriented programming in PerlAspect-oriented programming in Perl
Aspect-oriented programming in Perl
 
Open frameworks 101_fitc
Open frameworks 101_fitcOpen frameworks 101_fitc
Open frameworks 101_fitc
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own Domain
 
Python on Android with Delphi FMX - The Cross Platform GUI Framework
Python on Android with Delphi FMX - The Cross Platform GUI Framework Python on Android with Delphi FMX - The Cross Platform GUI Framework
Python on Android with Delphi FMX - The Cross Platform GUI Framework
 
Dissolving the Problem: Making an ACID-Compliant Database Out of Apache Kafka
Dissolving the Problem: Making an ACID-Compliant Database Out of Apache KafkaDissolving the Problem: Making an ACID-Compliant Database Out of Apache Kafka
Dissolving the Problem: Making an ACID-Compliant Database Out of Apache Kafka
 

RubyConf 2010 Keynote by Matz

  • 1. Keynote Powered by Rabbit 0.9.1 Keynote Yukihiro "Matz" Matsumoto まつもと ゆきひろ @yukihiro_matz
  • 2. Keynote Powered by Rabbit 0.9.1 Acknowledgment In memory of Guy Decoux _why the lucky stiff Zed Shaw 1/88
  • 3. Keynote Powered by Rabbit 0.9.1 Today's Menu History Future Diversity 2/88
  • 4. Keynote Powered by Rabbit 0.9.1 History 10th Annual RubyConf 3/88
  • 5. Keynote Powered by Rabbit 0.9.1 History 9 Keynotes by me 4/88
  • 6. Keynote Powered by Rabbit 0.9.1 2001 Tampa, FL 5/88
  • 7. Keynote Powered by Rabbit 0.9.1 2001 Human-Oriented Programming in Ruby 6/88
  • 8. Keynote Powered by Rabbit 0.9.1 2002 Seattle, WA 7/88
  • 9. Keynote Powered by Rabbit 0.9.1 2002 Be Minor, Be Cool 8/88
  • 10. Keynote Powered by Rabbit 0.9.1 2003 Austin, TX 9/88
  • 11. Keynote Powered by Rabbit 0.9.1 2003 Visions for the Future How Ruby Sucks 10/88
  • 12. Keynote Powered by Rabbit 0.9.1 2004 Chantilly, VA 11/88
  • 13. Keynote Powered by Rabbit 0.9.1 2004 12/88
  • 14. Keynote Powered by Rabbit 0.9.1 2004 13/88
  • 15. Keynote Powered by Rabbit 0.9.1 2005 San Diego, CA 14/88
  • 16. Keynote Powered by Rabbit 0.9.1 2005 Visions for the Future Wild and Weird Ideas 15/88
  • 17. Keynote Powered by Rabbit 0.9.1 2006 Denver, CO 16/88
  • 18. Keynote Powered by Rabbit 0.9.1 2006 The Return of the Bikeshed or Nuclear Plant in the Backyard 17/88
  • 19. Keynote Powered by Rabbit 0.9.1 2007 Charlotte, NC 18/88
  • 20. Keynote Powered by Rabbit 0.9.1 2007 Language Matters 19/88
  • 21. Keynote Powered by Rabbit 0.9.1 2008 Orlando, FL 20/88
  • 22. Keynote Powered by Rabbit 0.9.1 2008 Reasons behind Ruby 21/88
  • 23. Keynote Powered by Rabbit 0.9.1 2009 San Francisco, CA 22/88
  • 24. Keynote Powered by Rabbit 0.9.1 2009 The 0.8 True Language (ZEPT) 23/88
  • 25. Keynote Powered by Rabbit 0.9.1 2010 New Orleans, LA 24/88
  • 26. Keynote Powered by Rabbit 0.9.1 2010 Future and Diversity 25/88
  • 27. Keynote Powered by Rabbit 0.9.1 Future and Diversity 26/88
  • 28. Keynote Powered by Rabbit 0.9.1  The Future  27/88
  • 29. Keynote Powered by Rabbit 0.9.1  Ruby 2.0  28/88
  • 30. Keynote Powered by Rabbit 0.9.1 Ruby 2.0 Traits Method Combination Keyword arguments Namespaces a few other nifty features 29/88
  • 31. Keynote Powered by Rabbit 0.9.1 Traits trait a trait is a collection of methods, used as a "simple conceptual model for structuring object oriented programs". from Wikipedia (en) 30/88
  • 32. Keynote Powered by Rabbit 0.9.1 What's wrong for Modules? Conflict detection Conflict resolution Tree modification No method combination 31/88
  • 33. Keynote Powered by Rabbit 0.9.1 Conflict Detection name conflict intentional (overriding)? or accidental? 32/88
  • 34. Keynote Powered by Rabbit 0.9.1 Conflict Problem module American attr_accessor :address end module Japanese attr_accessor :address end class JapaneseAmerican include American include Japanese end JapaneseAmerican.new.address # which address? p JapaneseAmerican.ancestors # => [JapaneseAmerican, Japanese, American, Object, Kernel] 33/88
  • 35. Keynote Powered by Rabbit 0.9.1 Solution We will introduce #mix #mix will replace #include #mix can detect and resolve conflict 34/88
  • 36. Keynote Powered by Rabbit 0.9.1 Module#mix injects the current snapshot into other class/module. raises error when name conflict unless you resolve it explicitly 35/88
  • 37. Keynote Powered by Rabbit 0.9.1 Conflict Problem module American attr_accessor :address end module Japanese attr_accessor :address end class JapaneseAmerican # Japanese comes First include American include Japanese end 36/88
  • 38. Keynote Powered by Rabbit 0.9.1 Detecting Conflict module American attr_accessor :address end module Japanese attr_accessor :address end class JapaneseAmerican mix American mix Japanese # => address conflict! end 37/88
  • 39. Keynote Powered by Rabbit 0.9.1 Resolving Conflict class JapaneseAmerican mix American, :address => :us_address mix Japanese, :address => :jp_address end 38/88
  • 40. Keynote Powered by Rabbit 0.9.1 Tree Modification module M1; end class C1; include M1; end module M2; end module M1; include M2; end p C1.ancestors # [C1, M1, Object, Kernel] p M1.ancestors # [M1, M2] inconsistent 39/88
  • 41. Keynote Powered by Rabbit 0.9.1 Tree Modification #mix copies attributes so tree modification afterward does not affect. consistent at leaset 40/88
  • 42. Keynote Powered by Rabbit 0.9.1 alias_method_chain ugly fragile to multiple wrapping we want to wrap methods 41/88
  • 43. Keynote Powered by Rabbit 0.9.1 Module#prepend We will introduce #prepend #prepend put the module before the current class/ module methods defined in the class will wrap methods of same names 42/88
  • 44. Keynote Powered by Rabbit 0.9.1 Module#prepend module Foo def foo p :before super p :after end end class Bar def foo p :foo end prepend Foo end Bar.new.foo # :before, :foo, :after 43/88
  • 45. Keynote Powered by Rabbit 0.9.1 Keyword Arguments calling 1.step(by: 2, to: 20) do |i| p i end 44/88
  • 46. Keynote Powered by Rabbit 0.9.1 Keyword Arguments defining def step(by: step, to: limit) ... end 45/88
  • 47. Keynote Powered by Rabbit 0.9.1 Keyword Arguments Mere expanded hash argument at the end Automatic decomposition 46/88
  • 48. Keynote Powered by Rabbit 0.9.1 Namespaces encapsulation of monkey patching monkey patching is global modification embodies freedom, but dangerous 47/88
  • 49. Keynote Powered by Rabbit 0.9.1 Namespaces encapsulation of monkey patching classsbox / selector namespace / refinement / whatever 48/88
  • 50. Keynote Powered by Rabbit 0.9.1 What if class Integer def /(other) return quo(other) end end p 1/2 # => (1/2) 49/88
  • 51. Keynote Powered by Rabbit 0.9.1 Allow Refinement module MathN refine Integer do def /(other) return quo(other) end end p 1/2 # => (1/2) end p 1/2 # => 0 50/88
  • 52. Keynote Powered by Rabbit 0.9.1 Using Refinement module Rationalize using MathN p 1/2 # => (1/2) end p 1/2 # => 0 51/88
  • 53. Keynote Powered by Rabbit 0.9.1 Real Private Methods class HasPrivate module Private def priv end end using Private def pub priv end end h = HasPrivate.new h.priv # => error h.instance_eval { priv # => error } 52/88
  • 54. Keynote Powered by Rabbit 0.9.1 FAQ When will they be available? Ruby 2.0 53/88
  • 55. Keynote Powered by Rabbit 0.9.1 FAQ When will Ruby2.0 be? Christmas on whatever year! 54/88
  • 56. Keynote Powered by Rabbit 0.9.1  Diversity  55/88
  • 57. Keynote Powered by Rabbit 0.9.1  I love Diversity  56/88
  • 58. Keynote Powered by Rabbit 0.9.1  I dislike Diversity  57/88
  • 59. Keynote Powered by Rabbit 0.9.1 The Ruby Language specification implementation 58/88
  • 60. Keynote Powered by Rabbit 0.9.1 The Ruby Language specification Standard Ruby (ISO)✓ RubySpec✓ 59/88
  • 61. Keynote Powered by Rabbit 0.9.1 The Ruby Language implementation CRuby✓ JRuby✓ Rubinius✓ MagLev✓ ...✓ 60/88
  • 62. Keynote Powered by Rabbit 0.9.1 Alternative to fill the Niche JRuby for JVM MacRuby for Mac MagLev for GemStone Ruboto for Android 61/88
  • 63. Keynote Powered by Rabbit 0.9.1 Yet another Niche Embedding 62/88
  • 64. Keynote Powered by Rabbit 0.9.1 Rite The New Comer Light weight implmentation of usable subset of the Ruby language 63/88
  • 65. Keynote Powered by Rabbit 0.9.1 Target Embedding Small devices Digital Appliances Applications (Game?) and more 64/88
  • 66. Keynote Powered by Rabbit 0.9.1 Embeddable Ruby think of Lua with better language 65/88
  • 67. Keynote Powered by Rabbit 0.9.1 Principle Components Configurable 66/88
  • 68. Keynote Powered by Rabbit 0.9.1 Components the implementation will be combination of components parser virtual machine garbage collector debugger class libraries 67/88
  • 69. Keynote Powered by Rabbit 0.9.1 Configurable to minimal set of features required for an application no universal behavior between platforms e.g. no file I/O for small devices 68/88
  • 70. Keynote Powered by Rabbit 0.9.1 Configurable use double or float use int, long or long long for fixnums ASCII or UTF-8 69/88
  • 71. Keynote Powered by Rabbit 0.9.1 Requirement portable minimal requirement: standard C (C99) should run on PC / RTOS / free standing less memory less latency 70/88
  • 72. Keynote Powered by Rabbit 0.9.1 Implementaion Detail register-based virtual machine 32bit word-code floats are immediate (possibly generational) incremental mark-sweep GC 71/88
  • 73. Keynote Powered by Rabbit 0.9.1 What can I do with Rite? embedding application embedding✓ small devices e.g. digital TV ✓ 72/88
  • 74. Keynote Powered by Rabbit 0.9.1 What can I do with Rite? concurrent assign virtual machine for each thread ✓ 73/88
  • 75. Keynote Powered by Rabbit 0.9.1 the Ruby chip by Prof. Tanaka from Kyushu Institute of Technology MIPS-like FPGA CPU with a few instructions added that help method look-up and garbage collection marking 74/88
  • 76. Keynote Powered by Rabbit 0.9.1 FAQ When will Rite available? I don't know, sorry. But it's a part of Japanese government funded two year project (2010-2011) 75/88
  • 77. Keynote Powered by Rabbit 0.9.1 FAQ Will Rite be Open-Source? Yes, probably under MIT license. But we need business model to satisfy the government. 76/88
  • 78. Keynote Powered by Rabbit 0.9.1 FAQ Will Rite be Open-Source? We might choose GPL plus commercial subscription model (a la MySQL). 77/88
  • 79. Keynote Powered by Rabbit 0.9.1 FAQ Will Rite replace MRI? No, Rite will not be a full- featured, universal implementation. 78/88
  • 80. Keynote Powered by Rabbit 0.9.1 FAQ Will Rite replace MRI? It is a Domain Specific Implementation, like Ruboto. 79/88
  • 81. Keynote Powered by Rabbit 0.9.1 FAQ How about C API? Rite will have different C API from CRuby. Currently we have no plan to provide compatibility layer. 80/88
  • 82. Keynote Powered by Rabbit 0.9.1 FAQ Will Rite support M17N? No, you have to configure single character encoding from ASCII or UTF-8 in compile time. 81/88
  • 83. Keynote Powered by Rabbit 0.9.1 FAQ Will Rite support (native) threads? No, to use threads you can use multiple VM per native threads. Rite may support fibers in the future. 82/88
  • 84. Keynote Powered by Rabbit 0.9.1 FAQ Does Rite run faster than YARV/JRuby/Rubinius, etc? Probably Not, but maybe on some benchmarks due to float immediate values and other techniques. 83/88
  • 85. Keynote Powered by Rabbit 0.9.1 FAQ How can I contribute to Rite? Wait until we make it open- source. We will open it on github. 84/88
  • 86. Keynote Powered by Rabbit 0.9.1 FAQ Rite sounds familier Originally Rite was a code name for the first Ruby 2.0 virtual machine, which was replaced by YARV. It's coind from Ruby Lite. 85/88
  • 87. Keynote Powered by Rabbit 0.9.1 FAQ Do you resign from CRuby? No, but I have spent less time on CRuby recently anyway. 86/88
  • 88. Keynote Powered by Rabbit 0.9.1 FAQ Do you resign from CRuby? I will keep being a maintainer of CRuby. And above all, I will keep being active as the creator of the language and, the leader of the community. 87/88
  • 89. Keynote Powered by Rabbit 0.9.1 Thank you! 88/88