View
12.801
Download
2
Category
Preview:
Citation preview
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 :addressendmodule Japanese attr_accessor :addressendclass JapaneseAmerican include American include JapaneseendJapaneseAmerican.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 :addressendmodule Japanese attr_accessor :addressendclass JapaneseAmerican # Japanese comes First include American include Japaneseend
36/88
Keynote Powered by Rabbit 0.9.1
Detecting Conflict
module American attr_accessor :addressendmodule Japanese attr_accessor :addressendclass 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_addressend
38/88
Keynote Powered by Rabbit 0.9.1
Tree Modification
module M1; endclass C1; include M1; end
module M2; endmodule 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 endendclass Bar def foo p :foo end prepend FooendBar.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 iend
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) endendp 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)endp 1/2 # => 0
50/88
Keynote Powered by Rabbit 0.9.1
Using Refinement
module Rationalize using MathN p 1/2 # => (1/2)endp 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 endh = HasPrivate.newh.priv # => errorh.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
Componentsthe implementation will be combination of components
parser
virtual machine
garbage collector
debugger
class libraries67/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
portableminimal requirement: standard C (C99)
should run on PC / RTOS / free standing
less memory
less latency70/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
Recommended