• Like

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

RubyConf 2010 Keynote by Matz

  • 12,483 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
12,483
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
108
Comments
0
Likes
14

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Keynote Yukihiro "Matz" Matsumoto まつもと ゆきひろ @yukihiro_matz Keynote Powered by Rabbit 0.9.1
  • 2. Acknowledgment In memory of Guy Decoux _why the lucky stiff Zed Shaw 1/88 Keynote Powered by Rabbit 0.9.1
  • 3. Today's Menu History Future Diversity 2/88 Keynote Powered by Rabbit 0.9.1
  • 4. History 10th Annual RubyConf 3/88 Keynote Powered by Rabbit 0.9.1
  • 5. History 9 Keynotes by me 4/88 Keynote Powered by Rabbit 0.9.1
  • 6. 2001 Tampa, FL 5/88 Keynote Powered by Rabbit 0.9.1
  • 7. 2001 Human-Oriented Programming in Ruby 6/88 Keynote Powered by Rabbit 0.9.1
  • 8. 2002 Seattle, WA 7/88 Keynote Powered by Rabbit 0.9.1
  • 9. 2002 Be Minor, Be Cool 8/88 Keynote Powered by Rabbit 0.9.1
  • 10. 2003 Austin, TX 9/88 Keynote Powered by Rabbit 0.9.1
  • 11. 2003 Visions for the Future How Ruby Sucks 10/88 Keynote Powered by Rabbit 0.9.1
  • 12. 2004 Chantilly, VA 11/88 Keynote Powered by Rabbit 0.9.1
  • 13. 2004 12/88 Keynote Powered by Rabbit 0.9.1
  • 14. 2004 13/88 Keynote Powered by Rabbit 0.9.1
  • 15. 2005 San Diego, CA 14/88 Keynote Powered by Rabbit 0.9.1
  • 16. 2005 Visions for the Future Wild and Weird Ideas 15/88 Keynote Powered by Rabbit 0.9.1
  • 17. 2006 Denver, CO 16/88 Keynote Powered by Rabbit 0.9.1
  • 18. 2006 The Return of the Bikeshed or Nuclear Plant in the Backyard 17/88 Keynote Powered by Rabbit 0.9.1
  • 19. 2007 Charlotte, NC 18/88 Keynote Powered by Rabbit 0.9.1
  • 20. 2007 Language Matters 19/88 Keynote Powered by Rabbit 0.9.1
  • 21. 2008 Orlando, FL 20/88 Keynote Powered by Rabbit 0.9.1
  • 22. 2008 Reasons behind Ruby 21/88 Keynote Powered by Rabbit 0.9.1
  • 23. 2009 San Francisco, CA 22/88 Keynote Powered by Rabbit 0.9.1
  • 24. 2009 The 0.8 True Language (ZEPT) 23/88 Keynote Powered by Rabbit 0.9.1
  • 25. 2010 New Orleans, LA 24/88 Keynote Powered by Rabbit 0.9.1
  • 26. 2010 Future and Diversity 25/88 Keynote Powered by Rabbit 0.9.1
  • 27. Future and Diversity 26/88 Keynote Powered by Rabbit 0.9.1
  • 28.  The Future  27/88 Keynote Powered by Rabbit 0.9.1
  • 29.  Ruby 2.0  28/88 Keynote Powered by Rabbit 0.9.1
  • 30. Ruby 2.0 Traits Method Combination Keyword arguments Namespaces a few other nifty features 29/88 Keynote Powered by Rabbit 0.9.1
  • 31. 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
  • 32. What's wrong for Modules? Conflict detection Conflict resolution Tree modification No method combination 31/88 Keynote Powered by Rabbit 0.9.1
  • 33. Conflict Detection name conflict intentional (overriding)? or accidental? 32/88 Keynote Powered by Rabbit 0.9.1
  • 34. 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
  • 35. Solution We will introduce #mix #mix will replace #include #mix can detect and resolve conflict 34/88 Keynote Powered by Rabbit 0.9.1
  • 36. 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
  • 37. 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
  • 38. 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
  • 39. Resolving Conflict class JapaneseAmerican mix American, :address => :us_address mix Japanese, :address => :jp_address end 38/88 Keynote Powered by Rabbit 0.9.1
  • 40. 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] Keynote inconsistent 39/88 Powered by Rabbit 0.9.1
  • 41. Tree Modification #mix copies attributes so tree modification afterward does not affect. consistent at leaset 40/88 Keynote Powered by Rabbit 0.9.1
  • 42. alias_method_chain ugly fragile to multiple wrapping we want to wrap methods 41/88 Keynote Powered by Rabbit 0.9.1
  • 43. 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
  • 44. 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
  • 45. Keyword Arguments calling 1.step(by: 2, to: 20) do |i| p i end 44/88 Keynote Powered by Rabbit 0.9.1
  • 46. Keyword Arguments defining def step(by: step, to: limit) ... end 45/88 Keynote Powered by Rabbit 0.9.1
  • 47. Keyword Arguments Mere expanded hash argument at the end Automatic decomposition 46/88 Keynote Powered by Rabbit 0.9.1
  • 48. Namespaces encapsulation of monkey patching monkey patching is global modification embodies freedom, but dangerous 47/88 Keynote Powered by Rabbit 0.9.1
  • 49. Namespaces encapsulation of monkey patching classsbox / selector namespace / refinement / whatever 48/88 Keynote Powered by Rabbit 0.9.1
  • 50. 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
  • 51. 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
  • 52. 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
  • 53. 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
  • 54. FAQ When will they be available? Ruby 2.0 53/88 Keynote Powered by Rabbit 0.9.1
  • 55. FAQ When will Ruby2.0 be? Christmas on whatever year! 54/88 Keynote Powered by Rabbit 0.9.1
  • 56.  Diversity  55/88 Keynote Powered by Rabbit 0.9.1
  • 57.  I love Diversity  56/88 Keynote Powered by Rabbit 0.9.1
  • 58.  I dislike Diversity  57/88 Keynote Powered by Rabbit 0.9.1
  • 59. The Ruby Language specification implementation 58/88 Keynote Powered by Rabbit 0.9.1
  • 60. The Ruby Language specification ✓ Standard Ruby (ISO) ✓ RubySpec 59/88 Keynote Powered by Rabbit 0.9.1
  • 61. The Ruby Language implementation ✓ CRuby ✓ JRuby ✓ Rubinius ✓ MagLev ✓ ... 60/88 Keynote Powered by Rabbit 0.9.1
  • 62. 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
  • 63. Yet another Niche Embedding 62/88 Keynote Powered by Rabbit 0.9.1
  • 64. Rite The New Comer Light weight implmentation of usable subset of the Ruby language 63/88 Keynote Powered by Rabbit 0.9.1
  • 65. Target Embedding Small devices Digital Appliances Applications (Game?) and more 64/88 Keynote Powered by Rabbit 0.9.1
  • 66. Embeddable Ruby think of Lua with better language 65/88 Keynote Powered by Rabbit 0.9.1
  • 67. Principle Components Configurable 66/88 Keynote Powered by Rabbit 0.9.1
  • 68. 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
  • 69. 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
  • 70. 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
  • 71. 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
  • 72. 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
  • 73. What can I do with Rite? embedding ✓ application embedding ✓ small devices e.g. digital TV 72/88 Keynote Powered by Rabbit 0.9.1
  • 74. What can I do with Rite? concurrent ✓ assign virtual machine for each thread 73/88 Keynote Powered by Rabbit 0.9.1
  • 75. 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
  • 76. 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
  • 77. 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
  • 78. 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
  • 79. FAQ Will Rite replace MRI? No, Rite will not be a full- featured, universal implementation. 78/88 Keynote Powered by Rabbit 0.9.1
  • 80. FAQ Will Rite replace MRI? It is a Domain Specific Implementation, like Ruboto. 79/88 Keynote Powered by Rabbit 0.9.1
  • 81. 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
  • 82. 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
  • 83. 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
  • 84. 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
  • 85. 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
  • 86. 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
  • 87. 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
  • 88. 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
  • 89. Thank you! 88/88 Keynote Powered by Rabbit 0.9.1