rubyconf 2010 keynote by matz

89
Keynote Powered by Rabbit 0.9.1 Keynote Yukihiro "Matz" Matsumoto まつもと ゆきひろ @yukihiro_matz

Upload: yukihiromatz

Post on 08-May-2015

12.820 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Keynote

Yukihiro "Matz" Matsumotoまつもと ゆきひろ@yukihiro_matz

Page 2: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Acknowledgment

In memory of

Guy Decoux

_why the lucky stiff

Zed Shaw

1/88

Page 3: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Today's Menu

History

Future

Diversity

2/88

Page 4: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

History

10th Annual RubyConf

3/88

Page 5: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

History

9 Keynotes by me

4/88

Page 6: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2001

Tampa, FL

5/88

Page 7: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2001

Human-Oriented Programming in Ruby

6/88

Page 8: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2002

Seattle, WA

7/88

Page 9: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2002

Be Minor, Be Cool

8/88

Page 10: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2003

Austin, TX

9/88

Page 11: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2003

Visions for the Future

How Ruby Sucks

10/88

Page 12: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2004

Chantilly, VA

11/88

Page 13: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2004

12/88

Page 14: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2004

13/88

Page 15: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2005

San Diego, CA

14/88

Page 16: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2005

Visions for the Future

Wild and Weird Ideas

15/88

Page 17: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2006

Denver, CO

16/88

Page 18: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2006

The Return of the Bikeshed or Nuclear Plant in the

Backyard

17/88

Page 19: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2007

Charlotte, NC

18/88

Page 20: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2007

Language Matters

19/88

Page 21: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2008

Orlando, FL

20/88

Page 22: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2008

Reasons behind Ruby

21/88

Page 23: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2009

San Francisco, CA

22/88

Page 24: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2009

The 0.8 True Language (ZEPT)

23/88

Page 25: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2010

New Orleans, LA

24/88

Page 26: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

2010

Future and Diversity

25/88

Page 27: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Future and Diversity

26/88

Page 28: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

 The Future 

27/88

Page 29: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

 Ruby 2.0 

28/88

Page 30: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Ruby 2.0

Traits

Method Combination

Keyword arguments

Namespaces

a few other nifty features

29/88

Page 31: RubyConf 2010 Keynote by Matz

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

Page 32: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

What's wrong for Modules?

Conflict detection

Conflict resolution

Tree modification

No method combination

31/88

Page 33: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Conflict Detection

name conflict

intentional (overriding)?

or accidental?

32/88

Page 34: RubyConf 2010 Keynote by Matz

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

Page 35: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Solution

We will introduce #mix

#mix will replace #include

#mix can detect and resolve conflict

34/88

Page 36: RubyConf 2010 Keynote by Matz

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

Page 37: RubyConf 2010 Keynote by Matz

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

Page 38: RubyConf 2010 Keynote by Matz

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

Page 39: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Resolving Conflict

class JapaneseAmerican mix American, :address => :us_address mix Japanese, :address => :jp_addressend

38/88

Page 40: RubyConf 2010 Keynote by Matz

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

Page 41: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Tree Modification

#mix copies attributes

so tree modification afterward does not affect.

consistent at leaset

40/88

Page 42: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

alias_method_chain

ugly

fragile to multiple wrapping

we want to wrap methods

41/88

Page 43: RubyConf 2010 Keynote by Matz

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

Page 44: RubyConf 2010 Keynote by Matz

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

Page 45: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Keyword Arguments

calling

1.step(by: 2, to: 20) do |i| p iend

44/88

Page 46: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Keyword Arguments

defining

def step(by: step, to: limit) ...end

45/88

Page 47: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Keyword Arguments

Mere expanded hash argument at the end

Automatic decomposition

46/88

Page 48: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Namespaces

encapsulation of monkey patching

monkey patching is global modification

embodies freedom, but dangerous

47/88

Page 49: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Namespaces

encapsulation of monkey patching

classsbox / selector namespace / refinement / whatever

48/88

Page 50: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

What if

class Integer def /(other) return quo(other) endendp 1/2 # => (1/2)

49/88

Page 51: RubyConf 2010 Keynote by Matz

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

Page 52: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Using Refinement

module Rationalize using MathN p 1/2 # => (1/2)endp 1/2 # => 0

51/88

Page 53: RubyConf 2010 Keynote by Matz

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

Page 54: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

FAQ

When will they be available?

Ruby 2.0

53/88

Page 55: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

FAQ

When will Ruby2.0 be?

Christmas

on whatever year!

54/88

Page 56: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

 Diversity 

55/88

Page 57: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

 I love Diversity 

56/88

Page 58: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

 I dislike Diversity 

57/88

Page 59: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

The Ruby Language

specification

implementation

58/88

Page 60: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

The Ruby Language

specification

Standard Ruby (ISO)✓

RubySpec✓

59/88

Page 61: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

The Ruby Language

implementation

CRuby✓

JRuby✓

Rubinius✓

MagLev✓

...✓

60/88

Page 62: RubyConf 2010 Keynote by Matz

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

Page 63: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Yet another Niche

Embedding

62/88

Page 64: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Rite

The New Comer

Light weight implmentation

of usable subset of the Ruby language

63/88

Page 65: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Target

Embedding

Small devices

Digital Appliances

Applications (Game?)

and more

64/88

Page 66: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Embeddable Ruby

think of Lua

with better language

65/88

Page 67: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Principle

Components

Configurable

66/88

Page 68: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Componentsthe implementation will be combination of components

parser

virtual machine

garbage collector

debugger

class libraries67/88

Page 69: RubyConf 2010 Keynote by Matz

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

Page 70: RubyConf 2010 Keynote by Matz

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

Page 71: RubyConf 2010 Keynote by Matz

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

Page 72: RubyConf 2010 Keynote by Matz

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

Page 73: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

What can I do with Rite?

embedding

application embedding✓

small devices

e.g. digital TV

72/88

Page 74: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

What can I do with Rite?

concurrent

assign virtual machine for each thread

73/88

Page 75: RubyConf 2010 Keynote by Matz

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

Page 76: RubyConf 2010 Keynote by Matz

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

Page 77: RubyConf 2010 Keynote by Matz

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

Page 78: RubyConf 2010 Keynote by Matz

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

Page 79: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

FAQ

Will Rite replace MRI?

No, Rite will not be a full-featured, universal

implementation.

78/88

Page 80: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

FAQ

Will Rite replace MRI?

It is a Domain Specific Implementation, like

Ruboto.

79/88

Page 81: RubyConf 2010 Keynote by Matz

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

Page 82: RubyConf 2010 Keynote by Matz

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

Page 83: RubyConf 2010 Keynote by Matz

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

Page 84: RubyConf 2010 Keynote by Matz

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

Page 85: RubyConf 2010 Keynote by Matz

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

Page 86: RubyConf 2010 Keynote by Matz

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

Page 87: RubyConf 2010 Keynote by Matz

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

Page 88: RubyConf 2010 Keynote by Matz

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

Page 89: RubyConf 2010 Keynote by Matz

Keynote Powered by Rabbit 0.9.1

Thank you!

88/88