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.5k
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
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
23k
ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜
tkikuc
11
2.3k
現場で役立つモデリング 超入門
masuda220
PRO
12
2.9k
offers_20241022_imakiire.pdf
imakurusu
2
360
Vue SFCのtemplateでTypeScriptの型を活用しよう
tsukkee
3
1.5k
VR HMDとしてのVision Pro+ゲーム開発について
yasei_no_otoko
0
100
WEBエンジニア向けAI活用入門
sutetotanuki
0
300
Progressive Web Apps für Desktop und Mobile mit Angular (Hands-on)
christianliebel
PRO
0
110
破壊せよ!データ破壊駆動で考えるドメインモデリング / data-destroy-driven
minodriven
16
4k
Vitest Browser Mode への期待 / Vitest Browser Mode
odanado
PRO
2
1.7k
OpenTelemetryでRailsのパフォーマンス分析を始めてみよう(KoR2024)
ymtdzzz
4
1.5k
Honoの来た道とこれから
yusukebe
19
3k
Featured
See All Featured
Music & Morning Musume
bryan
46
6.1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
Into the Great Unknown - MozCon
thekraken
31
1.5k
GraphQLの誤解/rethinking-graphql
sonatard
66
9.9k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
KATA
mclloyd
29
13k
How to train your dragon (web standard)
notwaldorf
88
5.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
41
2.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
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