Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby 2.0
Search
Yukihiro Matsumoto
February 14, 2013
Programming
24
4.6k
Ruby 2.0
「Ruby 2.0」@デブサミ2013
Yukihiro Matsumoto
February 14, 2013
Tweet
Share
More Decks by Yukihiro Matsumoto
See All by Yukihiro Matsumoto
Ruby 2.0 (en)
yukihiro_matz
40
4.4k
Reinventhing Wheels of Future
yukihiro_matz
56
5.5k
Other Decks in Programming
See All in Programming
CSC509 Lecture 11
javiergs
PRO
0
180
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
初めてDefinitelyTypedにPRを出した話
syumai
0
420
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
1
300
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
[Do iOS '24] Ship your app on a Friday...and enjoy your weekend!
polpielladev
0
110
Less waste, more joy, and a lot more green: How Quarkus makes Java better
hollycummins
0
100
最新TCAキャッチアップ
0si43
0
190
Jakarta EE meets AI
ivargrimstad
0
120
OnlineTestConf: Test Automation Friend or Foe
maaretp
0
110
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
340
Featured
See All Featured
Music & Morning Musume
bryan
46
6.2k
Designing Experiences People Love
moore
138
23k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Visualization
eitanlees
145
15k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
130
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
900
Writing Fast Ruby
sferik
627
61k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
RailsConf 2023
tenderlove
29
900
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
4 Signs Your Business is Dying
shpigford
180
21k
Transcript
Powered by Rabbit 1.0.4 Ruby 2.0 Rubyアソシエーション 理事長 Heroku, Chief
Architect, Ruby @yukihiro_matz Yukihiro "Matz" Matsumoto
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.0 1997年08月 1.1 1998年12月
1.2 1999年08月 1.4 2000年09月 1.6 5/97
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
Powered by Rabbit 1.0.4 by courtesy of @a_matsuda 7/97
Powered by Rabbit 1.0.4 by courtesy of @a_matsuda 8/97
Powered by Rabbit 1.0.4 とうとうやってきた2.0 9/97
Powered by Rabbit 1.0.4 RubyConf2001 10/97
Powered by Rabbit 1.0.4 RubyConf2001 Ruby2に言及 11/97
Powered by Rabbit 1.0.4 RubyConf2001 新VM 新GC ネイティブスレッド 埋込API 12/97
Powered by Rabbit 1.0.4 RubyConf2001 心理的壁にも言及 13/97
Powered by Rabbit 1.0.4 RubyConf2001 新VM 新GC ネイティブスレッド 埋込API 14/97
Powered by Rabbit 1.0.4 RubyConf2001 コア実装の置き換え 15/97
Powered by Rabbit 1.0.4 RubyConf2001 Ruby1.9で実現 16/97
Powered by Rabbit 1.0.4 新VM YARV 17/97
Powered by Rabbit 1.0.4 新GC 世代別GC 18/97
Powered by Rabbit 1.0.4 新GC 性能低下のため不採用 19/97
Powered by Rabbit 1.0.4 新GC Ruby1.9でLazy Sweep 20/97
Powered by Rabbit 1.0.4 新GC Ruby2.0でbitmap marking 21/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 ネイティブスレッド GIL 24/97
Powered by Rabbit 1.0.4 GIL Giant Interpreter Lock 25/97
Powered by Rabbit 1.0.4 GIL 妥協点 26/97
Powered by Rabbit 1.0.4 埋込API 互換性重視のため不採用 27/97
Powered by Rabbit 1.0.4 2001年のRuby2 28/97
Powered by Rabbit 1.0.4 2007年のRuby1.9 29/97
Powered by Rabbit 1.0.4 現代のRuby2.0の起源 30/97
Powered by Rabbit 1.0.4 RubyConf2003 31/97
Powered by Rabbit 1.0.4 RubyConf2003 キーワード引数 新ハッシュリテラル メソッドコンビネーション セレクターネームスペース 32/97
Powered by Rabbit 1.0.4 遅れてきた2.0 33/97
Powered by Rabbit 1.0.4 RubyConf2001 心理的壁に言及 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 Development 37/97
Powered by Rabbit 1.0.4 心理的側面 ADD 38/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.4 2.0の新機能 キーワード引数 Module#prepend Enumerable#lazy Refinements 41/97
Powered by Rabbit 1.0.4 2.0の新機能 デフォルトUTF-8 Dtrace TracePoint Performance 42/97
Powered by Rabbit 1.0.4 キーワード引数 名前付きオプショナル引数 順序不定 記述性 記憶想起 43/97
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
Powered by Rabbit 1.0.4 キーワード引数 APIの柔軟性 ドキュメント化 読みやすさ 覚えやすさ 45/97
Powered by Rabbit 1.0.4 Module#prepend メソッドコンビネーション 既存のクラスの修飾 alias method chain
46/97
Powered by Rabbit 1.0.4 alias method chain alias(別名)によって定義を連鎖 Railsで多用される 既存メソッドの拡張
47/97
Powered by Rabbit 1.0.4 alias method chainの欠点 名前衝突の危険性 名前管理 修飾のグループ化が困難
48/97
Powered by Rabbit 1.0.4 メソッドコンビネーション CLOS(CommonLisp Object System) メソッドを拡張する仕組み MOP
49/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.4 Module#prepend 単純化メソッドコンビネーション 52/97
Powered by Rabbit 1.0.4 Module#prepend prepend includeは後ろに追加 prependは前に追加 既存のメソッドをラップ 53/97
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
Powered by Rabbit 1.0.4 prepend vs chain 名称重複問題 グループ化問題 55/97
Powered by Rabbit 1.0.4 Refinements 既存クラスの拡張 56/97
Powered by Rabbit 1.0.4 既存クラスの拡張 メソッドの追加 メソッドのラップ 57/97
Powered by Rabbit 1.0.4 既存クラスの拡張 オープンクラス クラス再定義 mathn, jcode 58/97
Powered by Rabbit 1.0.4 既存クラスの拡張 スコープ問題 59/97
Powered by Rabbit 1.0.4 Refinements スコープ限定のオープンクラス 60/97
Powered by Rabbit 1.0.4 Refinements module R refine String do
def foo ... end end end "".foo # => error! using R "".foo 61/97
Powered by Rabbit 1.0.4 既存クラス拡張の試み Selector namespace (Smallscript) Classbox (Smalltalk/Java)
拡張メソッド (C#) プロファイル (Classic) 62/97
Powered by Rabbit 1.0.4 Selector namespace 「メッセージ」の多重化 挙動が難しい Smallscriptが入手困難 63/97
Powered by Rabbit 1.0.4 Classbox 既存のクラスを置き換える 例: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.4 Enumerable#lazy 遅延評価 69/97
Powered by Rabbit 1.0.4 Enumerable#lazy 関数型(?)プログラミング 70/97
Powered by Rabbit 1.0.4 Enumerable#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_lz 78/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.4 Enumerable#lazy (1..Float::INFINITY).lazy.map {|i| i.to_s }.select{|s| /3/
=== s }.first(5) 81/97
Powered by Rabbit 1.0.4 Enumerable#lazy ナイスアイディア 82/97
Powered by Rabbit 1.0.4 Enumerable#lazy 中身はいろいろ大変 83/97
Powered by Rabbit 1.0.4 デフォルトUTF-8 Unicode浸透 84/97
Powered by Rabbit 1.0.4 デフォルトUTF-8 普通にUTF-8 85/97
Powered by Rabbit 1.0.4 Dtrace/TracePoint デバッグ強化 86/97
Powered by Rabbit 1.0.4 Performance 高速化 87/97
Powered by Rabbit 1.0.4 高速化 VM GC require 88/97
Powered by Rabbit 1.0.4 Ruby 2.0 89/97
Powered by Rabbit 1.0.4 Ruby 2.0 2013年2月24日リリース予定 90/97
Powered by Rabbit 1.0.4 Ruby 2.0 乞御期待 91/97
Powered by Rabbit 1.0.4 Ruby 2.0以後 言語としてはほぼ完成 92/97
Powered by Rabbit 1.0.4 Ruby 2.0以後 Ruby言語の限界 93/97
Powered by Rabbit 1.0.4 Ruby 2.0以後 性能改善 94/97
Powered by Rabbit 1.0.4 Ruby 2.0以後 適用分野拡大 95/97
Powered by Rabbit 1.0.4 Ruby 2.0以後 マルチコア? 96/97
Powered by Rabbit 1.0.4 Ruby 2.0以後 アクター? 97/97