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
Amazon Aurora Serverless v2のアプデと、Amazon Aurora PostgreSQL Limitless DatabaseのGAについて
satoshi256kbyte
0
100
Refactor your code - refactor yourself
xosofox
1
200
CSC305 Lecture 25
javiergs
PRO
0
130
DevTools extensions で 独自の DevTool を開発する | FlutterKaigi 2024
kokiyoshida
0
460
TypeScript でバックもやるって実際どう? 実運用で困ったこと3選
yuichiro_serita
17
7.6k
The rollercoaster of releasing an Android, iOS, and macOS app with Kotlin Multiplatform | droidcon Italy
prof18
0
150
DevFest Tokyo 2025 - Flutter のアプリアーキテクチャ現在地点
wasabeef
4
660
Criando Commits Incríveis no Git
marcelgsantos
2
150
Java 23の概要とJava Web Frameworkの現状 / Java 23 and Java web framework
kishida
2
380
物流システムにおけるリファクタリングとアーキテクチャの再構築 〜依存関係とモジュール分割の重要性〜
deeprain
1
930
17年周年のWebアプリケーションにTanStack Queryを導入する / Implementing TanStack Query in a 17th Anniversary Web Application
saitolume
0
180
eBPF Deep Dive: Architecture and Safety Mechanisms
takehaya
12
1.3k
Featured
See All Featured
BBQ
matthewcrist
85
9.3k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
KATA
mclloyd
29
14k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
1
140
Measuring & Analyzing Core Web Vitals
bluesmoon
4
160
Gamification - CAS2011
davidbonilla
80
5.1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
Documentation Writing (for coders)
carmenintech
65
4.5k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
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