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

1,417 views

Published on

筑波大学 情報科学類主催 情報科学シンポジウム「国際化する日本発プログラミング言語Ruby」にて
http://kzhk.hatenablog.com/entry/2012/11/24/002609

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,417
On SlideShare
0
From Embeds
0
Number of Embeds
366
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Rubyと プログラミング言語の潮流 加藤和彦 筑波大学 大学院 システム情報工学研究科 2012年11月21日 筑波大学 情報科学類主催 情報科学シンポジウム 「国際化する日本発プログラミング言語Ruby」
  2. 2. 2 昭和37年(1962年)生まれ 昭和56年 筑波大学第三学群情報学類入学 研究分野:  オペレーティングシステム  分散システム  クラウドコンピューティング  ソフトウェアセキュリティ 自己紹介
  3. 3. 私もプログラミング言語おたく
  4. 4. アセンブラ 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 これまでに学んだプログラミング言語
  5. 5. …もし私が私の大切な人に気持ちを伝えたいと思った時、 私は以下のようなコードを書くことができます。 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)
  6. 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
  7. 7. Simula I and 67 Ole-Johan Dahl and Kristen Nygaard (1962-1967, ノルウェー計算センター) オブジェクト、 クラス、サブクラス、継承、動的束縛 (仮想関数)、コルーチン、ガベージコレクション 7 OOの歴史
  8. 8. 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
  9. 9. XEROXのパロアルト研究所 (PARC) で1970 年代に約10年かけ3世代(Smalltalk-72、 76、80)に渡り整備。 9 Smalltalk
  10. 10. 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. 11. 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. 12. 12 普通の プログラミング言語 スクリプト言語 sh, Perl, Python, Ruby 重視する こと 効率 保守性 ポータビリティ エラーの静的(事前)検出 柔軟性 迅速な開発(アジャイル) カスタマイゼーション 動的(実行時)検査 データ 型 整数,浮動小数点数,文 字,文字列,配列,レコー ド,ポインタ 数値,文字列,リスト,ハッ シュ表,正規表現 スクリプト言語の出現
  13. 13. 対話的&非対話的利用 少ない行数,文字数 宣言最少 単純なスコープルール 柔軟で動的な型付け システム機能への簡便なアクセス 高度なパターンマッチと文字操作 高水準なデータ型 13 スクリプト言語の特徴 M. J. Scott, Programming Laguage Pragmatics, M. Kaufmann, 2009.
  14. 14. 純オブジェクト指向  (すべての値はオブジェクト) クラスベース 動的型付け リフレクション 14 Rubyの特長 M. J. Scott, Programming Laguage Pragmatics, M. Kaufmann, 2009.
  15. 15. Javaは,お金持ちの弁護士になった兄弟 のよう。子供の頃は面白い奴だったが,今 は半径100マイルの楽しみを吸い込むブラ ックホール。 15 言語をキャラクタに喩えると… B. A. Tate, Seven Laguages in Seven Weeks, The Pragmatic Programmes, 2010 Rubyは,少し変わっているけど,いつも 美しく,ちょっとミステリアスな魔法使 い,メリー・ポピンズのよう。
  16. 16. 16 Rubyの配列は何でもあり(1/2) Twitter 2012/11/18
  17. 17. 17 Rubyの配列は何でもあり(2/2) Twitter 2012/11/18
  18. 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. 19. 19 Duck Typing "If it walks like a duck and quacks like a duck, it must be a duck" もしあるオブジェクトがpush, popメソッドを提供する なら,それはスタックとみなしてよい。 …厳密にduck, スタックであるかどうかを問わ ない。duck, スタックである様であればよい。
  20. 20. 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 インタフェース宣言必要なし!
  21. 21. Why not? (attitude) - Alan Borning (Prof. Univ. of Wisconsin) 21 Rubyの「思想」 求めよ、さらば与えられん。 尋ねよ、さらば見出さん。 門を叩け、さらば開かれん。 - 新訳聖書「マタイによる福音書」
  22. 22. Thank you. 22

×