Upload
yukihiromatz
View
69.037
Download
0
Embed Size (px)
DESCRIPTION
CEDEC2011 9月8日招待講演
Citation preview
Powered by Rabbit 0.9.2
Ruby開発が教えてくれたこと
(財)Rubyアソシエーション(株)ネットワーク応用通信研究所
(株)楽天 技術研究所Heroku [New]
まつもと ゆきひろ@yukihiro_matz
Powered by Rabbit 0.9.2
プログラミングとの出会い
ポケットコンピュータPC-1210
1/71
Powered by Rabbit 0.9.2
コンピュータでなにするか
ゲーム
計算
プログラミング言語
2/71
Powered by Rabbit 0.9.2
手段と目的
手段としての言語
目的としての言語
手段のためには目的を選ばない
3/71
Powered by Rabbit 0.9.2
Sapir-Whorf仮説
言語は思考に影響を与える
制限を与える
発想を与える
4/71
Powered by Rabbit 0.9.2
言語の選択は重要
生産性に直結
ストレス
コスト
記法
5/71
Powered by Rabbit 0.9.2
プログラミング言語
Ruby
開発効率に注目
より簡単に
より効率よく
より気分よく
6/71
Powered by Rabbit 0.9.2
気分
重要な要素
プログラマの気分を重視
7/71
Powered by Rabbit 0.9.2
プログラマの気分
気分が良い時
思った通りに行く時
万能感
我慢しない時
悩まない時
8/71
Powered by Rabbit 0.9.2
思った通りに行く時
常識が通用する
予測が当たる
期待が応えられる
9/71
Powered by Rabbit 0.9.2
万能感
やりたいことができる
やればできる
簡単にできる
10/71
Powered by Rabbit 0.9.2
我慢しない時
苦痛が少ない
不合理を感じない
11/71
Powered by Rabbit 0.9.2
悩まない時
海に向かって叫ばない
クリアな世界観
12/71
Powered by Rabbit 0.9.2
気分の良いプログラミング
簡潔
万能感
13/71
Powered by Rabbit 0.9.2
ブルックスの法則
プログラマが一定時間に開発できるソフトウェア量は言語によらず一定である
[「人月の神話」より引用]
14/71
Powered by Rabbit 0.9.2
簡潔さは力なり
Paul Graham
プログラミング言語の進化
15/71
Powered by Rabbit 0.9.2
例題: 階乗
factorial, or n!
n以下の自然数すべての積
n! = 1×2×3×...×n
16/71
Powered by Rabbit 0.9.2
階乗(Java)
class Sample { private static int fact(int n) { if (n == 1) return 1; return n * fact(n - 1); } public static void main(String[] argv) { System.out.println("6!="+fact(6)); }}
17/71
Powered by Rabbit 0.9.2
階乗(C)
#include <stdio.h>intfact(int n){ if (n == 1) return 1; return n * fact(n - 1);}
intmain(){ printf("6!=%d\n", fact(6));}
18/71
Powered by Rabbit 0.9.2
階乗(Ruby)
def fact(n) if n == 1 1 else n * fact(n - 1) endendprint "6!=", fact(6), "\n"
19/71
Powered by Rabbit 0.9.2
階乗(Ruby)
def fact(n) (1..n).inject(:*)endprint "6!=", fact(6), "\n"
20/71
Powered by Rabbit 0.9.2
簡潔な表現
get '/foo', :agent => /Chrome/ do "You're using Google Chrome"end
get '/foo' do "You're using non Chrome browsers"end
21/71
Powered by Rabbit 0.9.2
抽象化
for (i=0; i<100; i++) { ...}
100.times do ...end
22/71
Powered by Rabbit 0.9.2
人間の都合、機械の都合
だれが主人か
人間?
コンピュータ?
23/71
Powered by Rabbit 0.9.2
200!
printf("12!=%d\n", fact(12));printf("13!=%d\n", fact(13));printf("14!=%d\n", fact(14));printf("200!=%d\n", fact(200));=> 12!=479001600 13!=1932053504 14!=1278945280 200!=0
24/71
Powered by Rabbit 0.9.2
200!
print "200!=", fact(200), "\n"=> 78865786736479050355236321393218506 22951359776871732632947425332443594 49963403342920304284011984623904177 21213891963883025764279024263710506 19266249528299311134628572707633172 37396988943922445621451664240254033 29186413122742829485327752424240757 39032403212574055795686602260319041 70324062351700858796178922222789623 70389737472000000000000000000000000 0000000000000000000000000
25/71
Powered by Rabbit 0.9.2
プログラミング言語Ruby
開発効率に注目
より簡単に
より効率よく
より気分よく
26/71
Powered by Rabbit 0.9.2
時代の要請にマッチ
性能よりも生産性
開発者の気分重視
開発者に心地よい言語
27/71
Powered by Rabbit 0.9.2
設計者=ユーザー
使う人の気持ちが分かる
共感できる人のために
共感できない? それもOK!
28/71
Powered by Rabbit 0.9.2
プログラミングは楽しい
創造する楽しみ
対話の楽しみ
知的刺激
29/71
Powered by Rabbit 0.9.2
でも楽しくない
直らないバグ
迫る〆切
炎上するプロジェクト
30/71
Powered by Rabbit 0.9.2
解決策
コンピュータに仕事を押し付ける
ムーアの法則
31/71
Powered by Rabbit 0.9.2
オープンソース
どうしてRuby売らないんですか?
日本のビル・ゲーツ(笑)
32/71
Powered by Rabbit 0.9.2
Rubyの認知度
Ruby開発開始(1993)
一般公開(1995)
33/71
Powered by Rabbit 0.9.2
Rubyの認知度
最初の書籍(1999)
最初の英語書籍(2000)
34/71
Powered by Rabbit 0.9.2
Rubyの認知度
Rubyで就職(1997)
未踏ソフトウェア(2000)
Ruby on Rails(2004)
OSS貢献者賞(2005)
35/71
Powered by Rabbit 0.9.2
Rubyの認知度
2007
楽天技術研究所フェロー
Rubyアソシエーション
Ruby技術者認定試験
36/71
Powered by Rabbit 0.9.2
Rubyの認知度
2007
日経BP技術賞大賞
経済産業大臣表彰
37/71
Powered by Rabbit 0.9.2
Rubyの認知度
2009
松江市名誉市民
島根大学客員教授
ものづくり日本大賞
日本イノベーター大賞
38/71
Powered by Rabbit 0.9.2
Rubyの認知度
2010
日経BP チェンジメーカー2010
39/71
Powered by Rabbit 0.9.2
Rubyの認知度
40/71
Powered by Rabbit 0.9.2
キャズム論
イノベーター
アーリーアダプター
アーリーマジョリティ
レートマジョリティ
ラガード
41/71
Powered by Rabbit 0.9.2
キャズムを越えた日
イノベーター
技術者個人の興味・関心(1995-)
アーリーアダプター
ベンチャー・零細企業(1997-)
42/71
Powered by Rabbit 0.9.2
キャズムを越えた日
アーリーマジョリティ
中小企業・IT系企業(2007-)
レートマジョリティ
大企業(2010-)
43/71
Powered by Rabbit 0.9.2
キャズムの向こう側
財団法人
標準規格
44/71
Powered by Rabbit 0.9.2
財団法人
Rubyアソシエーション
45/71
Powered by Rabbit 0.9.2
標準規格
JIS
ISO
46/71
Powered by Rabbit 0.9.2
ローリングストーン
転石苔生さず
47/71
Powered by Rabbit 0.9.2
OSSコミュニティ
生存戦略
変化を続ける
課題を提供し続ける
48/71
Powered by Rabbit 0.9.2
Rubyの未来
未来はどうなる?
49/71
Powered by Rabbit 0.9.2
ムーアの法則
LSIの集積度は2年で2倍になる
50/71
Powered by Rabbit 0.9.2
CPU性能向上
CPU性能向上51/71
Powered by Rabbit 0.9.2
CPU性能向上
近年頭打ち
物理的限界
要求の飽和
52/71
Powered by Rabbit 0.9.2
未来への対応
Web
分散
並列
マルチコア
53/71
Powered by Rabbit 0.9.2
未来への技術
クラウド
MapReduce
関数型
分散アーキテクチャ
54/71
Powered by Rabbit 0.9.2
未来のRuby
新しい環境への適応
より広汎
より高速
より分散
より堅固
55/71
Powered by Rabbit 0.9.2
広汎
幅広い実行環境
スマートフォン
PC
スーパーコンピュータ
56/71
Powered by Rabbit 0.9.2
HPC Ruby
Ruby for High Performance Computing
型推論
コンパイル
Cに匹敵する速度
57/71
Powered by Rabbit 0.9.2
軽量Ruby
Lightweight Ruby
組み込み
ソフトリアルタイム
58/71
Powered by Rabbit 0.9.2
広汎
幅広い適用分野
組み込み
Web
HPC
59/71
Powered by Rabbit 0.9.2
高速
YARV
JIT
最適化
GC
60/71
Powered by Rabbit 0.9.2
分散
並列・分散はより重要になる
dRuby / Rinda
MessagePack
MapReduce
61/71
Powered by Rabbit 0.9.2
堅固
より書きやすく
キーワード引数
Classbox
Enumerableプログラミング
62/71
Powered by Rabbit 0.9.2
軽量Ruby
RiteVM
63/71
Powered by Rabbit 0.9.2
RiteVM
文法:JIS/ISO準拠
ライブラリ:ほぼJIS/ISO拠準
64/71
Powered by Rabbit 0.9.2
RiteVM
LuaっぽいRuby VM
65/71
Powered by Rabbit 0.9.2
RiteVM
組み込みAPI
レジスタベース
インクリメンタルGC
66/71
Powered by Rabbit 0.9.2
RiteVM
ポータブル
コアはC99のみ依存
67/71
Powered by Rabbit 0.9.2
RiteVM
コンポーネント構成
コンパイラ分離可能
minimal, standard, full
68/71
Powered by Rabbit 0.9.2
RiteVM
計画中
ファイバー(コルーチン)
非同期I/O
69/71
Powered by Rabbit 0.9.2
RiteVM
今後の予定
2011/10
クローズドベータ
2012/03
オープンベータ(MITライセンス?)
70/71
Powered by Rabbit 0.9.2
ご清聴ありがとうございました
71/71