Slide 1

Slide 1 text

Powered by Rabbit 1.0.4 Ruby 2.0 Rubyアソシエーション 理事長 Heroku, Chief Architect, Ruby @yukihiro_matz Yukihiro "Matz" Matsumoto

Slide 2

Slide 2 text

Powered by Rabbit 1.0.4   2013年 1/97

Slide 3

Slide 3 text

Powered by Rabbit 1.0.4   1993年 2/97

Slide 4

Slide 4 text

Powered by Rabbit 1.0.4   1993年2月 Ruby開発開始 3/97

Slide 5

Slide 5 text

Powered by Rabbit 1.0.4   1995年12月 公開(0.95) 4/97

Slide 6

Slide 6 text

Powered by Rabbit 1.0.4   1996年12月 1.0 1997年08月 1.1 1998年12月 1.2 1999年08月 1.4 2000年09月 1.6 5/97

Slide 7

Slide 7 text

Powered by Rabbit 1.0.4   2003年08月 1.8 2007年12月 1.9.0 2010年08月 1.9.2 2011年10月 1.9.3 6/97

Slide 8

Slide 8 text

Powered by Rabbit 1.0.4   by courtesy of @a_matsuda 7/97

Slide 9

Slide 9 text

Powered by Rabbit 1.0.4   by courtesy of @a_matsuda 8/97

Slide 10

Slide 10 text

Powered by Rabbit 1.0.4   とうとうやってきた2.0 9/97

Slide 11

Slide 11 text

Powered by Rabbit 1.0.4   RubyConf2001 10/97

Slide 12

Slide 12 text

Powered by Rabbit 1.0.4 RubyConf2001 Ruby2に言及 11/97

Slide 13

Slide 13 text

Powered by Rabbit 1.0.4 RubyConf2001 新VM 新GC ネイティブスレッド 埋込API 12/97

Slide 14

Slide 14 text

Powered by Rabbit 1.0.4 RubyConf2001 心理的壁にも言及 13/97

Slide 15

Slide 15 text

Powered by Rabbit 1.0.4 RubyConf2001 新VM 新GC ネイティブスレッド 埋込API 14/97

Slide 16

Slide 16 text

Powered by Rabbit 1.0.4 RubyConf2001 コア実装の置き換え 15/97

Slide 17

Slide 17 text

Powered by Rabbit 1.0.4 RubyConf2001 Ruby1.9で実現 16/97

Slide 18

Slide 18 text

Powered by Rabbit 1.0.4 新VM YARV 17/97

Slide 19

Slide 19 text

Powered by Rabbit 1.0.4 新GC 世代別GC 18/97

Slide 20

Slide 20 text

Powered by Rabbit 1.0.4 新GC 性能低下のため不採用 19/97

Slide 21

Slide 21 text

Powered by Rabbit 1.0.4 新GC Ruby1.9でLazy Sweep 20/97

Slide 22

Slide 22 text

Powered by Rabbit 1.0.4 新GC Ruby2.0でbitmap marking 21/97

Slide 23

Slide 23 text

Powered by Rabbit 1.0.4 ネイティブスレッド 1.8はグリーンスレッド 22/97

Slide 24

Slide 24 text

Powered by Rabbit 1.0.4 ネイティブスレッド 1.9はネイティブスレッド 23/97

Slide 25

Slide 25 text

Powered by Rabbit 1.0.4 ネイティブスレッド GIL 24/97

Slide 26

Slide 26 text

Powered by Rabbit 1.0.4 GIL Giant Interpreter Lock 25/97

Slide 27

Slide 27 text

Powered by Rabbit 1.0.4 GIL 妥協点 26/97

Slide 28

Slide 28 text

Powered by Rabbit 1.0.4 埋込API 互換性重視のため不採用 27/97

Slide 29

Slide 29 text

Powered by Rabbit 1.0.4   2001年のRuby2 28/97

Slide 30

Slide 30 text

Powered by Rabbit 1.0.4   2007年のRuby1.9 29/97

Slide 31

Slide 31 text

Powered by Rabbit 1.0.4   現代のRuby2.0の起源 30/97

Slide 32

Slide 32 text

Powered by Rabbit 1.0.4   RubyConf2003 31/97

Slide 33

Slide 33 text

Powered by Rabbit 1.0.4 RubyConf2003 キーワード引数 新ハッシュリテラル メソッドコンビネーション セレクターネームスペース 32/97

Slide 34

Slide 34 text

Powered by Rabbit 1.0.4   遅れてきた2.0 33/97

Slide 35

Slide 35 text

Powered by Rabbit 1.0.4 RubyConf2001 心理的壁に言及 34/97

Slide 36

Slide 36 text

Powered by Rabbit 1.0.4   壁を乗り越える原因 35/97

Slide 37

Slide 37 text

Powered by Rabbit 1.0.4 心理的側面 20周年記念 36/97

Slide 38

Slide 38 text

Powered by Rabbit 1.0.4 心理的側面 Anniversary Driven Development 37/97

Slide 39

Slide 39 text

Powered by Rabbit 1.0.4 心理的側面 ADD 38/97

Slide 40

Slide 40 text

Powered by Rabbit 1.0.4 機能的側面 キーワード引数 (2.0) メソッドコンビネーション (2.0) セレクターネームスペース (2.0) 39/97

Slide 41

Slide 41 text

Powered by Rabbit 1.0.4   2.0の新機能 40/97

Slide 42

Slide 42 text

Powered by Rabbit 1.0.4 2.0の新機能 キーワード引数 Module#prepend Enumerable#lazy Refinements 41/97

Slide 43

Slide 43 text

Powered by Rabbit 1.0.4 2.0の新機能 デフォルトUTF-8 Dtrace TracePoint Performance 42/97

Slide 44

Slide 44 text

Powered by Rabbit 1.0.4 キーワード引数 名前付きオプショナル引数 順序不定 記述性 記憶想起 43/97

Slide 45

Slide 45 text

Powered by Rabbit 1.0.4 キーワード引数 def downto(from, to, step: 1) ... end downto(10, 0, step:2) do|i| p i end 44/97

Slide 46

Slide 46 text

Powered by Rabbit 1.0.4 キーワード引数 APIの柔軟性 ドキュメント化 読みやすさ 覚えやすさ 45/97

Slide 47

Slide 47 text

Powered by Rabbit 1.0.4 Module#prepend メソッドコンビネーション 既存のクラスの修飾 alias method chain 46/97

Slide 48

Slide 48 text

Powered by Rabbit 1.0.4 alias method chain alias(別名)によって定義を連鎖 Railsで多用される 既存メソッドの拡張 47/97

Slide 49

Slide 49 text

Powered by Rabbit 1.0.4 alias method chainの欠点 名前衝突の危険性 名前管理 修飾のグループ化が困難 48/97

Slide 50

Slide 50 text

Powered by Rabbit 1.0.4 メソッドコンビネーション CLOS(CommonLisp Object System) メソッドを拡張する仕組み MOP 49/97

Slide 51

Slide 51 text

Powered by Rabbit 1.0.4 メソッドコンビネーション beforeフック afterフック aroundフック 50/97

Slide 52

Slide 52 text

Powered by Rabbit 1.0.4 メソッドコンビネーション Rubyにはオーバースペック 51/97

Slide 53

Slide 53 text

Powered by Rabbit 1.0.4 Module#prepend 単純化メソッドコンビネーション 52/97

Slide 54

Slide 54 text

Powered by Rabbit 1.0.4 Module#prepend prepend includeは後ろに追加 prependは前に追加 既存のメソッドをラップ 53/97

Slide 55

Slide 55 text

Powered by Rabbit 1.0.4 Module#prepend class Foo def foo; p :foo; end end module Prepend def foo p :before super p :after end end class Foo prepend Prepend end Foo.new.foo 54/97

Slide 56

Slide 56 text

Powered by Rabbit 1.0.4 prepend vs chain 名称重複問題 グループ化問題 55/97

Slide 57

Slide 57 text

Powered by Rabbit 1.0.4 Refinements 既存クラスの拡張 56/97

Slide 58

Slide 58 text

Powered by Rabbit 1.0.4 既存クラスの拡張 メソッドの追加 メソッドのラップ 57/97

Slide 59

Slide 59 text

Powered by Rabbit 1.0.4 既存クラスの拡張 オープンクラス クラス再定義 mathn, jcode 58/97

Slide 60

Slide 60 text

Powered by Rabbit 1.0.4 既存クラスの拡張 スコープ問題 59/97

Slide 61

Slide 61 text

Powered by Rabbit 1.0.4 Refinements スコープ限定のオープンクラス 60/97

Slide 62

Slide 62 text

Powered by Rabbit 1.0.4 Refinements module R refine String do def foo ... end end end "".foo # => error! using R "".foo 61/97

Slide 63

Slide 63 text

Powered by Rabbit 1.0.4 既存クラス拡張の試み Selector namespace (Smallscript) Classbox (Smalltalk/Java) 拡張メソッド (C#) プロファイル (Classic) 62/97

Slide 64

Slide 64 text

Powered by Rabbit 1.0.4 Selector namespace 「メッセージ」の多重化 挙動が難しい Smallscriptが入手困難 63/97

Slide 65

Slide 65 text

Powered by Rabbit 1.0.4 Classbox 既存のクラスを置き換える 例:GUIのルック・アンド・フィール 変更 ローカルリバインディング 64/97

Slide 66

Slide 66 text

Powered by Rabbit 1.0.4 ローカルリバインディング スコープ問題 動的スコープ 変更の影響範囲が大きい 65/97

Slide 67

Slide 67 text

Powered by Rabbit 1.0.4 拡張メソッド メソッドの追加しかできない Scalaも同様? 66/97

Slide 68

Slide 68 text

Powered by Rabbit 1.0.4 プロファイル ひとつの構造体に複数のインタフ ェース 「プロファイル」 相互に代入可能 67/97

Slide 69

Slide 69 text

Powered by Rabbit 1.0.4 プロファイル 静的型言語向け 24年前のアイディア 他に見かけない 68/97

Slide 70

Slide 70 text

Powered by Rabbit 1.0.4 Enumerable#lazy 遅延評価 69/97

Slide 71

Slide 71 text

Powered by Rabbit 1.0.4 Enumerable#lazy 関数型(?)プログラミング 70/97

Slide 72

Slide 72 text

Powered by Rabbit 1.0.4 Enumerable#lazy 関数型ワナビー 71/97

Slide 73

Slide 73 text

Powered by Rabbit 1.0.4 関数型ワナビー イミュータブルデータ パターンマッチ 遅延評価 関数組立 72/97

Slide 74

Slide 74 text

Powered by Rabbit 1.0.4 関数組立 ほぼメソッドチェーン 73/97

Slide 75

Slide 75 text

Powered by Rabbit 1.0.4 メソッドチェーン (1..Float::INFINITY).map {|i| i.to_s }.select{|s| /3/ === s }.first(5) 74/97

Slide 76

Slide 76 text

Powered by Rabbit 1.0.4 メソッドチェーン 動かない 75/97

Slide 77

Slide 77 text

Powered by Rabbit 1.0.4 メソッドチェーン 遅延評価さえあれば... 76/97

Slide 78

Slide 78 text

Powered by Rabbit 1.0.4 遅延評価 遅延評価するバージョンのメソッド 77/97

Slide 79

Slide 79 text

Powered by Rabbit 1.0.4 遅延評価 map_lz, select_lz 78/97

Slide 80

Slide 80 text

Powered by Rabbit 1.0.4 メソッドチェーン (1..Float::INFINITY).map_lz {|i| i.to_s }.select_lz{|s| /3/ === s }.first(5) 79/97

Slide 81

Slide 81 text

Powered by Rabbit 1.0.4 遅延評価 遅延(lazy)を求めるものはlazy(怠惰) である 80/97

Slide 82

Slide 82 text

Powered by Rabbit 1.0.4 Enumerable#lazy (1..Float::INFINITY).lazy.map {|i| i.to_s }.select{|s| /3/ === s }.first(5) 81/97

Slide 83

Slide 83 text

Powered by Rabbit 1.0.4 Enumerable#lazy ナイスアイディア 82/97

Slide 84

Slide 84 text

Powered by Rabbit 1.0.4 Enumerable#lazy 中身はいろいろ大変 83/97

Slide 85

Slide 85 text

Powered by Rabbit 1.0.4 デフォルトUTF-8 Unicode浸透 84/97

Slide 86

Slide 86 text

Powered by Rabbit 1.0.4 デフォルトUTF-8 普通にUTF-8 85/97

Slide 87

Slide 87 text

Powered by Rabbit 1.0.4 Dtrace/TracePoint デバッグ強化 86/97

Slide 88

Slide 88 text

Powered by Rabbit 1.0.4 Performance 高速化 87/97

Slide 89

Slide 89 text

Powered by Rabbit 1.0.4 高速化 VM GC require 88/97

Slide 90

Slide 90 text

Powered by Rabbit 1.0.4   Ruby 2.0 89/97

Slide 91

Slide 91 text

Powered by Rabbit 1.0.4 Ruby 2.0 2013年2月24日リリース予定 90/97

Slide 92

Slide 92 text

Powered by Rabbit 1.0.4 Ruby 2.0 乞御期待 91/97

Slide 93

Slide 93 text

Powered by Rabbit 1.0.4 Ruby 2.0以後 言語としてはほぼ完成 92/97

Slide 94

Slide 94 text

Powered by Rabbit 1.0.4 Ruby 2.0以後 Ruby言語の限界 93/97

Slide 95

Slide 95 text

Powered by Rabbit 1.0.4 Ruby 2.0以後 性能改善 94/97

Slide 96

Slide 96 text

Powered by Rabbit 1.0.4 Ruby 2.0以後 適用分野拡大 95/97

Slide 97

Slide 97 text

Powered by Rabbit 1.0.4 Ruby 2.0以後 マルチコア? 96/97

Slide 98

Slide 98 text

Powered by Rabbit 1.0.4 Ruby 2.0以後 アクター? 97/97