SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Rubyと
プログラミング言語の潮流
加藤和彦
筑波大学 大学院 システム情報工学研究科
2012年11月21日
筑波大学 情報科学類主催 情報科学シンポジウム
「国際化する日本発プログラミング言語Ruby」
2
昭和37年(1962年)生まれ
昭和56年 筑波大学第三学群情報学類入学
研究分野:
 オペレーティングシステム
 分散システム
 クラウドコンピューティング
 ソフトウェアセキュリティ
自己紹介
私もプログラミング言語おたく
アセンブラ
Basic
Fortran77
JCL
APL
PL/I
Pascal
C
sh & csh
Common Lisp
Scheme
Smalltalk-80
Miranda
C++
Perl
Tcl/Tk
Python
CAML
Standard ML
OCaml
Ruby
Java
Groovy
Erlang
Scala
Clojure
4
これまでに学んだプログラミング言語
…もし私が私の大切な人に気持ちを伝えたいと思った時、
私は以下のようなコードを書くことができます。
Cでは、
int main(void)
{
int i;
for (i = 0; i < 10; i++)
printf("I love you. ");
return 0;
}
5
でも、Rubyならもっとストレートにシンプルに。
10.times{print 'I love you. '}
最初にこのコードを見た時から、私はRubyが好きになりました。…
Amazon.co.jp 読者書評から(By ashbb 2010/2/6)
Pythonだったら:
for i in range(10):
print I love. you.
(おまけ)
Scalaだったら:
class IntUtil(n:Int) {
def times(block: => Unit)= {
for(x <- 1 to n) {
block
}
n
}
}
implicit def int2Times(n:Int):IntUtil = {new IntUtil(n)}
10.times{println("hello")}
6
Kazumi007の日記
http://d.hatena.ne.jp/Kazumi007/20090405
Simula I and 67
Ole-Johan Dahl and Kristen Nygaard
(1962-1967, ノルウェー計算センター)
オブジェクト、 クラス、サブクラス、継承、動的束縛
(仮想関数)、コルーチン、ガベージコレクション
7
OOの歴史
8
Begin
Class Glyph;
Virtual: Procedure print Is Procedure print;
Begin
End;
Glyph Class Char (c);
Character c;
Begin
Procedure print;
OutChar(c);
End;
Glyph Class Line (elements);
Ref (Glyph) Array elements;
Begin
Procedure print;
Begin
Integer i;
For i:= 1 Step 1 Until UpperBound (elements, 1) Do
elements (i) .print;
OutImage;
End;
End;
Ref (Glyph) rg ;
Ref (Glyph) Array rgs (1:4);
! Main program;
rgs (1):- New Char ('A');
rgs (2):- New Char ('b');
rgs (3):- New Char ('b');
rgs (4):- New Char ('a');
rg:- New Line (rgs);
rg.print; ! Virtual method call
End;
Simula
http://ja.wikipedia.org/wiki/Simula
XEROXのパロアルト研究所 (PARC) で1970
年代に約10年かけ3世代(Smalltalk-72、
76、80)に渡り整備。
9
Smalltalk
n < 0 "n に< 0というメッセージを送る"
ifTrue: [abs <- n negated] "変数absに代入"
ifFalse: [abs <- n]
pow <- 1. "変数powに代入"
10 timesRepeat: [pow <- pow * n]
sum <- 0.
1 to: 100 by: 2 do:
[:i | sum <- sum + (a at: i)] "iは仮引数"
10
Smalltalk-80
11
Ruby関連言語Ruby関連言語
1965 1970 1975 1980 1985 1990 1995 2000 2005
Scheme
1975
Python
1991
Smalltalk 80
1980
C++
1985
C#
2000
Tcl
1988
Common Lisp
1984
Bourne Shell
1977
Scala
2003
CLU
1974
Ruby on Rails
2004
Groovy
2003
Java
1995
Perl
1987
Objective C
1983
Simula 67
1967
Ruby
1995
C
1973
C & {Smalltalk, CLU} → C++ → Java, C#
Smalltalk & Perl (Python) → Ruby → Groovy, Scala
プログラミング言語の歴史
12
普通の
プログラミング言語
スクリプト言語
sh, Perl, Python, Ruby
重視する
こと
効率
保守性
ポータビリティ
エラーの静的(事前)検出
柔軟性
迅速な開発(アジャイル)
カスタマイゼーション
動的(実行時)検査
データ
型
整数,浮動小数点数,文
字,文字列,配列,レコー
ド,ポインタ
数値,文字列,リスト,ハッ
シュ表,正規表現
スクリプト言語の出現
対話的&非対話的利用
少ない行数,文字数
宣言最少
単純なスコープルール
柔軟で動的な型付け
システム機能への簡便なアクセス
高度なパターンマッチと文字操作
高水準なデータ型
13
スクリプト言語の特徴
M. J. Scott, Programming Laguage
Pragmatics, M. Kaufmann, 2009.
純オブジェクト指向
 (すべての値はオブジェクト)
クラスベース
動的型付け
リフレクション
14
Rubyの特長
M. J. Scott, Programming Laguage Pragmatics, M. Kaufmann, 2009.
Javaは,お金持ちの弁護士になった兄弟
のよう。子供の頃は面白い奴だったが,今
は半径100マイルの楽しみを吸い込むブラ
ックホール。
15
言語をキャラクタに喩えると…
B. A. Tate, Seven Laguages in Seven Weeks,
The Pragmatic Programmes, 2010
Rubyは,少し変わっているけど,いつも
美しく,ちょっとミステリアスな魔法使
い,メリー・ポピンズのよう。
16
Rubyの配列は何でもあり(1/2)
Twitter 2012/11/18
17
Rubyの配列は何でもあり(2/2)
Twitter 2012/11/18
18
既存クラスの「動的拡張」
3.times {puts 'I love you.'}
class Fixnum # “Open” existing class.
def my_times
i = self
while i > 0
i = i - 1
print "["
yield
print "]n"
end
end
end
puts 3.class
puts 3.my_times {print 'I love you.'}
(実行例)
I love you.
I love you.
I love you.
Fixnum
[I love you.]
[I love you.]
[I love you.]
19
Duck Typing
"If it walks like a duck and quacks like a duck, it
must be a duck"
もしあるオブジェクトがpush, popメソッドを提供する
なら,それはスタックとみなしてよい。
…厳密にduck, スタックであるかどうかを問わ
ない。duck, スタックである様であればよい。
20
Mixin
module ToFile
def filename
"object_#{self.object_id}.txt"
end
def to_f
File.open(filename, 'w') {|f| f.write(to_s)}
end
end
class Person
include ToFile
attr_accessor :name
def initialize(name)
@name = name
end
def to_s
name
end
end
(呼び出し方)
Person.new('matz').to_f
インタフェース宣言必要なし!
Why not? (attitude)
- Alan Borning (Prof. Univ. of Wisconsin)
21
Rubyの「思想」
求めよ、さらば与えられん。
尋ねよ、さらば見出さん。
門を叩け、さらば開かれん。
- 新訳聖書「マタイによる福音書」
Thank you.
22

Mais conteúdo relacionado

Mais procurados

Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
Hideki Takase
 

Mais procurados (20)

Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 
軽量Ruby『mruby』について
軽量Ruby『mruby』について軽量Ruby『mruby』について
軽量Ruby『mruby』について
 
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
 
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
 
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
 
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャGoji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
 
Dll Injection
Dll InjectionDll Injection
Dll Injection
 
Rclex: ElixirでROS!!
Rclex: ElixirでROS!!Rclex: ElixirでROS!!
Rclex: ElixirでROS!!
 
ROSチュートリアル ROBOMECH2018
ROSチュートリアル ROBOMECH2018ROSチュートリアル ROBOMECH2018
ROSチュートリアル ROBOMECH2018
 
Customizing cargo for cross compiling
Customizing cargo for cross compilingCustomizing cargo for cross compiling
Customizing cargo for cross compiling
 
mruby/c機能紹介20160329
mruby/c機能紹介20160329mruby/c機能紹介20160329
mruby/c機能紹介20160329
 
Ruby東京プレゼン 資料
Ruby東京プレゼン 資料Ruby東京プレゼン 資料
Ruby東京プレゼン 資料
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
 
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
 
Feature StoreをRustで実装した話
Feature StoreをRustで実装した話Feature StoreをRustで実装した話
Feature StoreをRustで実装した話
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
 
rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテックrosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
rosjp10 itとrt(ネットワーク技術と時々、仮想化) 株式会社インテック
 

Semelhante a Rubyとプログラミング言語の潮流

Appresso x LUXIAR
Appresso x LUXIARAppresso x LUXIAR
Appresso x LUXIAR
lalha
 
ITスキルシート(マヴェリック アリネア)
ITスキルシート(マヴェリック アリネア)ITスキルシート(マヴェリック アリネア)
ITスキルシート(マヴェリック アリネア)
Maverick Alinea
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション
Shohei Hido
 
2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日
nukaemon
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
 

Semelhante a Rubyとプログラミング言語の潮流 (20)

Appresso x LUXIAR
Appresso x LUXIARAppresso x LUXIAR
Appresso x LUXIAR
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
ITスキルシート(マヴェリック アリネア)
ITスキルシート(マヴェリック アリネア)ITスキルシート(マヴェリック アリネア)
ITスキルシート(マヴェリック アリネア)
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回
 
Obj c
Obj cObj c
Obj c
 
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧めCプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション
 
2011年10月21日
2011年10月21日2011年10月21日
2011年10月21日
 
CA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについてCA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについて
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
The evolution of c#
The evolution of c#The evolution of c#
The evolution of c#
 
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめテスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめ
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
 
つぶLT20121215
つぶLT20121215つぶLT20121215
つぶLT20121215
 

Mais de Kazuhiko Kato

IPAX 2004年9月 基調講演「ソフトウェア新創世紀へ向けて」
IPAX 2004年9月 基調講演「ソフトウェア新創世紀へ向けて」 IPAX 2004年9月 基調講演「ソフトウェア新創世紀へ向けて」
IPAX 2004年9月 基調講演「ソフトウェア新創世紀へ向けて」
Kazuhiko Kato
 

Mais de Kazuhiko Kato (11)

自律連合型基盤システムの構築
自律連合型基盤システムの構築自律連合型基盤システムの構築
自律連合型基盤システムの構築
 
Dependable Cloud Comuting
Dependable Cloud ComutingDependable Cloud Comuting
Dependable Cloud Comuting
 
仮想化とシステムソフトウェア研究
仮想化とシステムソフトウェア研究仮想化とシステムソフトウェア研究
仮想化とシステムソフトウェア研究
 
ディペンダブルなクラウドコンピューティング基盤を目指して
ディペンダブルなクラウドコンピューティング基盤を目指してディペンダブルなクラウドコンピューティング基盤を目指して
ディペンダブルなクラウドコンピューティング基盤を目指して
 
研究室紹介(2014年度卒研生募集)
研究室紹介(2014年度卒研生募集)研究室紹介(2014年度卒研生募集)
研究室紹介(2014年度卒研生募集)
 
拡張によるエンパワーメント:情報システム工学の立場から
拡張によるエンパワーメント:情報システム工学の立場から拡張によるエンパワーメント:情報システム工学の立場から
拡張によるエンパワーメント:情報システム工学の立場から
 
Dropped image 173
Dropped image 173Dropped image 173
Dropped image 173
 
Dropped image 170
Dropped image 170Dropped image 170
Dropped image 170
 
Dropped image 136
Dropped image 136Dropped image 136
Dropped image 136
 
Dropped image 110
Dropped image 110Dropped image 110
Dropped image 110
 
IPAX 2004年9月 基調講演「ソフトウェア新創世紀へ向けて」
IPAX 2004年9月 基調講演「ソフトウェア新創世紀へ向けて」 IPAX 2004年9月 基調講演「ソフトウェア新創世紀へ向けて」
IPAX 2004年9月 基調講演「ソフトウェア新創世紀へ向けて」
 

Rubyとプログラミング言語の潮流