「Ruby 2.0」@デブサミ2013
Powered by Rabbit 1.0.4Ruby 2.0Rubyアソシエーション 理事長Heroku, Chief Architect, Ruby@yukihiro_matzYukihiro "Matz" Matsumoto
View Slide
Powered by Rabbit 1.0.4 2013年1/97
Powered by Rabbit 1.0.4 1993年2/97
Powered by Rabbit 1.0.4 1993年2月Ruby開発開始3/97
Powered by Rabbit 1.0.4 1995年12月公開(0.95)4/97
Powered by Rabbit 1.0.4 1996年12月 1.01997年08月 1.11998年12月 1.21999年08月 1.42000年09月 1.65/97
Powered by Rabbit 1.0.4 2003年08月 1.82007年12月 1.9.02010年08月 1.9.22011年10月 1.9.36/97
Powered by Rabbit 1.0.4 by courtesy of @a_matsuda7/97
Powered by Rabbit 1.0.4 by courtesy of @a_matsuda8/97
Powered by Rabbit 1.0.4 とうとうやってきた2.09/97
Powered by Rabbit 1.0.4 RubyConf200110/97
Powered by Rabbit 1.0.4RubyConf2001Ruby2に言及11/97
Powered by Rabbit 1.0.4RubyConf2001新VM新GCネイティブスレッド埋込API12/97
Powered by Rabbit 1.0.4RubyConf2001心理的壁にも言及13/97
Powered by Rabbit 1.0.4RubyConf2001新VM新GCネイティブスレッド埋込API14/97
Powered by Rabbit 1.0.4RubyConf2001コア実装の置き換え15/97
Powered by Rabbit 1.0.4RubyConf2001Ruby1.9で実現16/97
Powered by Rabbit 1.0.4新VMYARV17/97
Powered by Rabbit 1.0.4新GC世代別GC18/97
Powered by Rabbit 1.0.4新GC性能低下のため不採用19/97
Powered by Rabbit 1.0.4新GCRuby1.9でLazy Sweep20/97
Powered by Rabbit 1.0.4新GCRuby2.0でbitmap marking21/97
Powered by Rabbit 1.0.4ネイティブスレッド1.8はグリーンスレッド22/97
Powered by Rabbit 1.0.4ネイティブスレッド1.9はネイティブスレッド23/97
Powered by Rabbit 1.0.4ネイティブスレッドGIL24/97
Powered by Rabbit 1.0.4GILGiant Interpreter Lock25/97
Powered by Rabbit 1.0.4GIL妥協点26/97
Powered by Rabbit 1.0.4埋込API互換性重視のため不採用27/97
Powered by Rabbit 1.0.4 2001年のRuby228/97
Powered by Rabbit 1.0.4 2007年のRuby1.929/97
Powered by Rabbit 1.0.4 現代のRuby2.0の起源30/97
Powered by Rabbit 1.0.4 RubyConf200331/97
Powered by Rabbit 1.0.4RubyConf2003キーワード引数新ハッシュリテラルメソッドコンビネーションセレクターネームスペース32/97
Powered by Rabbit 1.0.4 遅れてきた2.033/97
Powered by Rabbit 1.0.4RubyConf2001心理的壁に言及34/97
Powered by Rabbit 1.0.4 壁を乗り越える原因35/97
Powered by Rabbit 1.0.4心理的側面20周年記念36/97
Powered by Rabbit 1.0.4心理的側面Anniversary Driven Development37/97
Powered by Rabbit 1.0.4心理的側面ADD38/97
Powered by Rabbit 1.0.4機能的側面キーワード引数 (2.0)メソッドコンビネーション (2.0)セレクターネームスペース (2.0)39/97
Powered by Rabbit 1.0.4 2.0の新機能40/97
Powered by Rabbit 1.0.42.0の新機能キーワード引数Module#prependEnumerable#lazyRefinements41/97
Powered by Rabbit 1.0.42.0の新機能デフォルトUTF-8DtraceTracePointPerformance42/97
Powered by Rabbit 1.0.4キーワード引数名前付きオプショナル引数順序不定記述性記憶想起43/97
Powered by Rabbit 1.0.4キーワード引数def downto(from, to, step: 1)...enddownto(10, 0, step:2) do|i|p iend44/97
Powered by Rabbit 1.0.4キーワード引数APIの柔軟性ドキュメント化読みやすさ覚えやすさ45/97
Powered by Rabbit 1.0.4Module#prependメソッドコンビネーション既存のクラスの修飾alias method chain46/97
Powered by Rabbit 1.0.4alias method chainalias(別名)によって定義を連鎖Railsで多用される既存メソッドの拡張47/97
Powered by Rabbit 1.0.4alias method chainの欠点名前衝突の危険性名前管理修飾のグループ化が困難48/97
Powered by Rabbit 1.0.4メソッドコンビネーションCLOS(CommonLisp ObjectSystem)メソッドを拡張する仕組みMOP49/97
Powered by Rabbit 1.0.4メソッドコンビネーションbeforeフックafterフックaroundフック50/97
Powered by Rabbit 1.0.4メソッドコンビネーションRubyにはオーバースペック51/97
Powered by Rabbit 1.0.4Module#prepend単純化メソッドコンビネーション52/97
Powered by Rabbit 1.0.4Module#prependprependincludeは後ろに追加prependは前に追加既存のメソッドをラップ53/97
Powered by Rabbit 1.0.4Module#prependclass Foodef foo; p :foo; endendmodule Prependdef foop :beforesuperp :afterendendclass Fooprepend PrependendFoo.new.foo54/97
Powered by Rabbit 1.0.4prepend vs chain名称重複問題グループ化問題55/97
Powered by Rabbit 1.0.4Refinements既存クラスの拡張56/97
Powered by Rabbit 1.0.4既存クラスの拡張メソッドの追加メソッドのラップ57/97
Powered by Rabbit 1.0.4既存クラスの拡張オープンクラスクラス再定義mathn, jcode58/97
Powered by Rabbit 1.0.4既存クラスの拡張スコープ問題59/97
Powered by Rabbit 1.0.4Refinementsスコープ限定のオープンクラス60/97
Powered by Rabbit 1.0.4Refinementsmodule Rrefine String dodef foo...endendend"".foo # => error!using R"".foo61/97
Powered by Rabbit 1.0.4既存クラス拡張の試みSelector namespace(Smallscript)Classbox (Smalltalk/Java)拡張メソッド (C#)プロファイル (Classic)62/97
Powered by Rabbit 1.0.4Selector namespace「メッセージ」の多重化挙動が難しいSmallscriptが入手困難63/97
Powered by Rabbit 1.0.4Classbox既存のクラスを置き換える例:GUIのルック・アンド・フィール変更ローカルリバインディング64/97
Powered by Rabbit 1.0.4ローカルリバインディングスコープ問題動的スコープ変更の影響範囲が大きい65/97
Powered by Rabbit 1.0.4拡張メソッドメソッドの追加しかできないScalaも同様?66/97
Powered by Rabbit 1.0.4プロファイルひとつの構造体に複数のインタフェース「プロファイル」相互に代入可能67/97
Powered by Rabbit 1.0.4プロファイル静的型言語向け24年前のアイディア他に見かけない68/97
Powered by Rabbit 1.0.4Enumerable#lazy遅延評価69/97
Powered by Rabbit 1.0.4Enumerable#lazy関数型(?)プログラミング70/97
Powered by Rabbit 1.0.4Enumerable#lazy関数型ワナビー71/97
Powered by Rabbit 1.0.4関数型ワナビーイミュータブルデータパターンマッチ遅延評価関数組立72/97
Powered by Rabbit 1.0.4関数組立ほぼメソッドチェーン73/97
Powered by Rabbit 1.0.4メソッドチェーン(1..Float::INFINITY).map {|i|i.to_s}.select{|s|/3/ === s}.first(5)74/97
Powered by Rabbit 1.0.4メソッドチェーン動かない75/97
Powered by Rabbit 1.0.4メソッドチェーン遅延評価さえあれば...76/97
Powered by Rabbit 1.0.4遅延評価遅延評価するバージョンのメソッド77/97
Powered by Rabbit 1.0.4遅延評価map_lz, select_lz78/97
Powered by Rabbit 1.0.4メソッドチェーン(1..Float::INFINITY).map_lz {|i|i.to_s}.select_lz{|s|/3/ === s}.first(5)79/97
Powered by Rabbit 1.0.4遅延評価遅延(lazy)を求めるものはlazy(怠惰)である80/97
Powered by Rabbit 1.0.4Enumerable#lazy(1..Float::INFINITY).lazy.map {|i|i.to_s}.select{|s|/3/ === s}.first(5)81/97
Powered by Rabbit 1.0.4Enumerable#lazyナイスアイディア82/97
Powered by Rabbit 1.0.4Enumerable#lazy中身はいろいろ大変83/97
Powered by Rabbit 1.0.4デフォルトUTF-8Unicode浸透84/97
Powered by Rabbit 1.0.4デフォルトUTF-8普通にUTF-885/97
Powered by Rabbit 1.0.4Dtrace/TracePointデバッグ強化86/97
Powered by Rabbit 1.0.4Performance高速化87/97
Powered by Rabbit 1.0.4高速化VMGCrequire88/97
Powered by Rabbit 1.0.4 Ruby 2.089/97
Powered by Rabbit 1.0.4Ruby 2.02013年2月24日リリース予定90/97
Powered by Rabbit 1.0.4Ruby 2.0乞御期待91/97
Powered by Rabbit 1.0.4Ruby 2.0以後言語としてはほぼ完成92/97
Powered by Rabbit 1.0.4Ruby 2.0以後Ruby言語の限界93/97
Powered by Rabbit 1.0.4Ruby 2.0以後性能改善94/97
Powered by Rabbit 1.0.4Ruby 2.0以後適用分野拡大95/97
Powered by Rabbit 1.0.4Ruby 2.0以後マルチコア?96/97
Powered by Rabbit 1.0.4Ruby 2.0以後アクター?97/97