オブジェクト指向スクリプト言語

     Ruby
agenda
•   Ruby とは…
•   Ruby の歴史
•   Ruby 1.9.1 について
•   Windows で Ruby をコンパイル
Ruby とは…
•   オブジェクト指向スクリプト言語
•   シンプルで読みやすい文法
•   優れたテキスト処理能力
•   作者が日本人
    – まつもと ゆきひろ 氏
• Perl に代わる(かもしれない)言語
    – 名前の...
Ruby のバージョン番号
• バージョン確認コマンド
   > ruby –v
   > ruby 1.8.6 (2009-03-31 patchlevel 368) [i386-mswin32_90]

• Ruby 1.2~1.8 まで
...
Ruby 2.0
•   コードネーム Rite
•   「いつか手に入れられる理想の Ruby」
•   いつ出るかは分からない
•   いくつかの機能は 1.9 で実装されはじめて
    いる(M17N・GC など)
Ruby の歴史 (1/3)
  年    月日                           出来事
       12/18 Perl の誕生日
1987
       03/21 Perl 4 初リリース
1991
       0...
Ruby の歴史(2/3)
  年    月日                               出来事
       09/01 Yahoo! BB サービス開始
2001
       12/25 Ruby 1.6.8 クリスマス...
Ruby の歴史(3/3)
  年    月日                               出来事
       03/13 Ruby 1.8.6 リリース
2007
       11/24 Ruby on Rails 1.2...
Ruby の将来
• Ruby 1.8.7 から徐々に Ruby 1.9 系へシフト
• Ruby 1.8 系の開発も継続
 – 年内にも Ruby 1.8.8 リリースか
Ruby 1.6.8 → 1.8.0 の変更点
• 文法の変更
• メソッドの追加
• 拡張ライブラリ API の追加
 – YAML, zlib, erb, WEBrick, etc…
Ruby 1.8.6 → Ruby 1.9.1 の変更点
• YARV の実装
• M17N 対応
• 組み込みクラス、メソッドの変更
 – Hash, Enumerator, etc…
• 文法の変更
• ライブラリの拡張
• 省メモリ化
YARV
• Ruby 言語処理系仮想マシン
• Yet Another Ruby VM
 – もう Yet Another ではない
• 高速化
 – 但し普通の Ruby 文に限る
 – 正規表現や拡張ライブラリには効果なし
       ...
M17N(1/2)
              17 文字


•   MultilingualizatioN
•   多言語化、マルチリンガル化
•   内部言語を持たない
•   Magic Comment
    – 正規表現で /cod...
M17N(2/2)
• 文字列1つずつが Encoding 情報を持つ
    # coding: UTF-8
    “あいうえお”.encoding #=> #<Encoding:UTF-8>

• String#[], String#le...
組み込みクラス、メソッドの変更
•   Enumerator
•   Hash の拡張
•   tap
•   Symbol#to_proc
    – ary.inject(:&+) #=> ary.inject{|r, e| r + e}
...
組み込みクラス、メソッドの変更

                           Enumerator
• 組み込みクラスになった
• イテレータっぽいメソッドをブロック
  なしで呼び出すと Enumerator を返す
 1.time...
組み込みクラス、メソッドの変更

                          Hash の拡張
• Ordered Hash
  – Hash が順序を保存するようになった
 Ruby 1.8.6
              p h={...
組み込みクラス、メソッドの変更

  その他話題に挙がっていた物
• tap
 Ruby 1.9.1 p [1,2,3].map{|x| x**2}.tap{|a| p a}.select{|x| x>5}
            #=>[1,...
文法の変更(1/2)
• ブロックパラメータの変更
 – オプショナル引数などが利用可能
• ブロックスコープの変更
 Ruby 1.8.6 x = 1
            loop {|x| x = 0; break}
         ...
文法の変更(2/2)
• Post Argument
  Ruby 1.8.6 def foo(front, *temp, last)
             end
             #=> Syntax Error
  Ruby ...
ライブラリの拡張
• RubyGems の取り込み
• Rake の取り込み
省メモリ化
• 省メモリ化
 – 標準クラス String, Array, Hash など
 – 性能よりもメモリ使用量削減に力を
• GC の改良
Ruby 1.9.1 まとめ
• いろいろ便利な機能が追加された
• 性能向上が期待できる
Ruby 1.8.6 → 1.8.7
• Ruby 1.9 からのバックポート多数
 – Enumerator
 – Array の拡張
 – tap
 – その他新規メソッドの追加
Windows で Ruby をコンパイル
• 環境
  – OS: Windows XP SP3 & Windows Vista SP1
  – Compiler: Visual C++ 2008 Express Edition(無料)
• ...
Ruby のコンパイル
• 公式からソースを ダウンロード, 解凍
• VC++ のコマンドプロンプトを起動
• ソースフォルダに移動して
  C:ruby-1.8.7-p160>cd win32
  C:ruby-1.8.7-p160win3...
拡張ライブラリのコンパイル
• 拡張ライブラリの Win32 用 バイナリを
  ダウンロード or コンパイル
 – 必要な物はバイナリ(DLL ファイル)と
   ヘッダファイルと *.lib ファイル
• ext フォルダ内の目的の拡張ラ...
例:zlib のコンパイル
• zlib-1.1.4-1 バイナリ作成
  C:zlib-1.1.4-1>cd win32
  C:zlib-1.1.4-1>nmake
  C:zlib-1.1.4-1>mt –manifest zlib.dl...
詰みポイント
• openssl
   – extconf.rb が吐いた Makefile の中にある
     CFLAGS のパラメータを変更しないとエラー
      CFLAGS = -MD -O2b2xty-
      CFLAG...
その他の mswin32 版 Ruby
•   One-Click Installer
     – Ruby 1.8.6
     – インストーラ付き
•   InstantRails
     – Ruby 1.8.6 with Rail...
今後の予定
• Ruby on Rails or Merb を使って Web 開発
Upcoming SlideShare
Loading in …5
×

オブジェクト指向スクリプト言語 Ruby

4,513 views

Published on

Ruby の歴史と Ruby 1.9.1 についての調査報告。

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,513
On SlideShare
0
From Embeds
0
Number of Embeds
54
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

オブジェクト指向スクリプト言語 Ruby

  1. 1. オブジェクト指向スクリプト言語 Ruby
  2. 2. agenda • Ruby とは… • Ruby の歴史 • Ruby 1.9.1 について • Windows で Ruby をコンパイル
  3. 3. Ruby とは… • オブジェクト指向スクリプト言語 • シンプルで読みやすい文法 • 優れたテキスト処理能力 • 作者が日本人 – まつもと ゆきひろ 氏 • Perl に代わる(かもしれない)言語 – 名前の由来的な意味で • Ruby on Rails の登場で一躍有名に • 完成はまだまだ先の言語
  4. 4. Ruby のバージョン番号 • バージョン確認コマンド > ruby –v > ruby 1.8.6 (2009-03-31 patchlevel 368) [i386-mswin32_90] • Ruby 1.2~1.8 まで – 安定版:Minor が偶数 ruby 1.8.6 – 開発版:Minor が奇数 • Ruby 1.9 – 安定版:Teeny が 0 以外 – 開発版:Teeny が 0 Major Minor Teeny • 最新安定版は Ruby 1.9.1-p0(2009/04/27 現在)
  5. 5. Ruby 2.0 • コードネーム Rite • 「いつか手に入れられる理想の Ruby」 • いつ出るかは分からない • いくつかの機能は 1.9 で実装されはじめて いる(M17N・GC など)
  6. 6. Ruby の歴史 (1/3) 年 月日 出来事 12/18 Perl の誕生日 1987 03/21 Perl 4 初リリース 1991 02/24 Ruby の誕生日 1993 10/18 Perl 5 初リリース 1994 11/23 Windows 95 日本語版発売 1995 Apache 初リリース 04/-- Ruby 0.95 がはじめて日本のニュースグループに投稿される 12/-- 12/25 Ruby 1.0 クリスマスリリース 1996 Ruby 1.1 リリース 1997 08/-- Ruby 1.2, 1.3 リリース 1998 12/-- 日本で ADSL サービス開始 2000 --/--
  7. 7. Ruby の歴史(2/3) 年 月日 出来事 09/01 Yahoo! BB サービス開始 2001 12/25 Ruby 1.6.8 クリスマスリリース 2002 08/04 Ruby 1.8.0 リリース 2003 12/01 Ruby 1.8.1 リリース 07/25 Ruby on Rails 初リリース 2004 12/25 Ruby 1.8.2 クリスマスリリース 2005 09/21 Ruby 1.8.3 リリース 12/13 Ruby on Rails 1.0.0 リリース 03/28 Ruby on Rails 1.1.0 リリース 2006 08/25 Ruby 1.8.5 リリース 01/18 Ruby on Rails 1.2.0 リリース 2007
  8. 8. Ruby の歴史(3/3) 年 月日 出来事 03/13 Ruby 1.8.6 リリース 2007 11/24 Ruby on Rails 1.2.6 リリース 12/06 Ruby on Rails 2.0.0 リリース 12/26 Ruby 1.9.0 リリース「日付変わっちゃった」 05/31 Ruby on Rails 2.1.0 リリース 2008 06/01 Ruby 1.8.7 リリース 11/21 Ruby on Rails 2.2.2 リリース Ruby 1.9.1 リリース延期 12/-- 01/31 Ruby 1.9.1 リリース 2009 03/15 Ruby on Rails 2.3.2 リリース 05/07 Ruby on Rails 3 beta リリースはやっぱ無理でした
  9. 9. Ruby の将来 • Ruby 1.8.7 から徐々に Ruby 1.9 系へシフト • Ruby 1.8 系の開発も継続 – 年内にも Ruby 1.8.8 リリースか
  10. 10. Ruby 1.6.8 → 1.8.0 の変更点 • 文法の変更 • メソッドの追加 • 拡張ライブラリ API の追加 – YAML, zlib, erb, WEBrick, etc…
  11. 11. Ruby 1.8.6 → Ruby 1.9.1 の変更点 • YARV の実装 • M17N 対応 • 組み込みクラス、メソッドの変更 – Hash, Enumerator, etc… • 文法の変更 • ライブラリの拡張 • 省メモリ化
  12. 12. YARV • Ruby 言語処理系仮想マシン • Yet Another Ruby VM – もう Yet Another ではない • 高速化 – 但し普通の Ruby 文に限る – 正規表現や拡張ライブラリには効果なし バイトコード AST※ Ruby Ruby 1.9 コンパイル 実行 Ruby 1.8 実行 ※AST : Abstract Syntax Tree(抽象構文木)
  13. 13. M17N(1/2) 17 文字 • MultilingualizatioN • 多言語化、マルチリンガル化 • 内部言語を持たない • Magic Comment – 正規表現で /coding[:=]s*[w.-]+/ # -*- coding: utf-8 -*- # vim:fileencoding=utf-8 # vim:set fileencoding=utf-8 : # coding: UTF-8 – ソースコードに非 ASCII なリテラルが含まれる 場合は必須 • 日本語の変数名も使える
  14. 14. M17N(2/2) • 文字列1つずつが Encoding 情報を持つ # coding: UTF-8 “あいうえお”.encoding #=> #<Encoding:UTF-8> • String#[], String#length – 1文字1単位 Ruby 1.8.6 “あいうえお”[0] #=> 130 “あいうえお”.length #=> 10 Ruby 1.9.1 “あいうえお”[0] #=> “あ” “あいうえお”.length #=> 5 “あいうえお”.bytesize #=> 10 • 詳しくは「るびま」0025 号で! – String が Enumerable ではなくなった – Regexp(鬼車) – 文字列の比較・結合
  15. 15. 組み込みクラス、メソッドの変更 • Enumerator • Hash の拡張 • tap • Symbol#to_proc – ary.inject(:&+) #=> ary.inject{|r, e| r + e} • to_s の書式変更 • Array の拡張 – Array#permutation, Array#product, Array#shuffle, Array#flatten, Array#drop, Array#simple, Array#take
  16. 16. 組み込みクラス、メソッドの変更 Enumerator • 組み込みクラスになった • イテレータっぽいメソッドをブロック なしで呼び出すと Enumerator を返す 1.times #=> <Enumerator> Ruby 1.8.6 require ‘enumerator’ a = [] [1, 2, 3].each_cons(2) do |x, y| a << [x, y] end a.map {|x, y| x*y} #=> [2, 6] Ruby 1.9.1 a = [1, 2, 3].each_cons(2).map {|x, y| x*y} #=> [2, 6]
  17. 17. 組み込みクラス、メソッドの変更 Hash の拡張 • Ordered Hash – Hash が順序を保存するようになった Ruby 1.8.6 p h={:a => 1, :b => 2, :c => 3} #=> {:b => 2, ={:a => 1, :c => 3} Ruby 1.9.1 p h={:a => 1, :b => 2, :c => 3} #=> {:a => 1, :b => 2, :c => 3} • Hash リテラルの拡張 Ruby 1.8.6 {:a => 1, :b => 2, …} foo(:a =>, :b => 2) #キーワード引数もどき Ruby 1.9.1 {a: 1, b:2, …} foo(a: 1, b: 2) #キーワード引数もどき
  18. 18. 組み込みクラス、メソッドの変更 その他話題に挙がっていた物 • tap Ruby 1.9.1 p [1,2,3].map{|x| x**2}.tap{|a| p a}.select{|x| x>5} #=>[1, 4, 9] # [9] • Symbol#to_proc – ary.inject(:&+) #=> ary.inject{|r, e| r + e} • to_s の書式変更 Ruby 1.8.6 puts h={“hoge”=10, “huga”=>20} #=> hoge10huga20 Ruby 1.9.1 puts h={“hoge”=10, “huga”=>20} #=> {“hoge”=10, “huga”=>20}
  19. 19. 文法の変更(1/2) • ブロックパラメータの変更 – オプショナル引数などが利用可能 • ブロックスコープの変更 Ruby 1.8.6 x = 1 loop {|x| x = 0; break} px #=> warning: multiple values for a block parameter #0 Ruby 1.9.1 x = 1 loop {|x| x = 0; break} px #=> 1
  20. 20. 文法の変更(2/2) • Post Argument Ruby 1.8.6 def foo(front, *temp, last) end #=> Syntax Error Ruby 1.9.1 def foo(front, *temp, last) end #=> OK • splat(配列展開) Ruby 1.8.6 puts(*ary1, *ary2) #=> Syntax Error Ruby 1.9.1 puts(*ary1, *ary2) #=> OK
  21. 21. ライブラリの拡張 • RubyGems の取り込み • Rake の取り込み
  22. 22. 省メモリ化 • 省メモリ化 – 標準クラス String, Array, Hash など – 性能よりもメモリ使用量削減に力を • GC の改良
  23. 23. Ruby 1.9.1 まとめ • いろいろ便利な機能が追加された • 性能向上が期待できる
  24. 24. Ruby 1.8.6 → 1.8.7 • Ruby 1.9 からのバックポート多数 – Enumerator – Array の拡張 – tap – その他新規メソッドの追加
  25. 25. Windows で Ruby をコンパイル • 環境 – OS: Windows XP SP3 & Windows Vista SP1 – Compiler: Visual C++ 2008 Express Edition(無料) • Ruby – Ruby 1.8.6 p368 – Ruby 1.8.7 p160 – Ruby 1.9.1 p0
  26. 26. Ruby のコンパイル • 公式からソースを ダウンロード, 解凍 • VC++ のコマンドプロンプトを起動 • ソースフォルダに移動して C:ruby-1.8.7-p160>cd win32 C:ruby-1.8.7-p160win32>configure.bat C:ruby-1.8.7-p160win32>nmake C:ruby-1.8.7-p160win32>nmake DESTDIR=C:/Ruby install • Ruby 1.9.1 は C:ruby-1.9.1-p0>cd win32 C:ruby-1.9.1-p0win32>configure.bat --prefix=C:/Ruby C:ruby-1.9.1-p0win32>nmake C:ruby-1.9.1-p0win32>nmake install
  27. 27. 拡張ライブラリのコンパイル • 拡張ライブラリの Win32 用 バイナリを ダウンロード or コンパイル – 必要な物はバイナリ(DLL ファイル)と ヘッダファイルと *.lib ファイル • ext フォルダ内の目的の拡張ライブラリ フォルダに移動 • extconf.rb を使って Makefile を作成 • *.so ファイルが出来れば OK • ruby.exe のあるフォルダに DLL ファイルをコピー
  28. 28. 例:zlib のコンパイル • zlib-1.1.4-1 バイナリ作成 C:zlib-1.1.4-1>cd win32 C:zlib-1.1.4-1>nmake C:zlib-1.1.4-1>mt –manifest zlib.dll.manifest –outputsource:zlib.dll;2 C:zlib-1.1.4-1>copy zlib.dll C:/Ruby/bin • Ruby にインストール C:ruby-1.8.7-p160>cd extzlib C:ruby-1.8.7-p160extzlib>ruby extconf.rb --with-zlib-include=C:zlib- 1.1.4-1include --with-zlib-lib=C:zlib-1.1.4-1lib C:ruby-1.8.7-p160win32>nmake C:ruby-1.8.7-p160win32>nmake install ※ ruby にパスが通ってないと extconf.rb は実行できない
  29. 29. 詰みポイント • openssl – extconf.rb が吐いた Makefile の中にある CFLAGS のパラメータを変更しないとエラー CFLAGS = -MD -O2b2xty- CFLAGS = -MD -DWIN32_LEAN_AND_MEAN -O2b2xty- • zlib 1.2.3 – Windows 版では謎の挙動(バグ?)を するため gem でエラーが起きる – 回避するためにはパッチを当てる必要がある • Bug#888 [Ruby-core:20576] – zlib 1.1.4-1 では gem 側に回避する措置がとられてい るのでエラーは起きない
  30. 30. その他の mswin32 版 Ruby • One-Click Installer – Ruby 1.8.6 – インストーラ付き • InstantRails – Ruby 1.8.6 with Rails – Apache – MySQL • ActiveScriptRuby – Ruby 1.8.7 – ActiveScript で Ruby が使える – その他必要なもの一通りセット • Rumix – Ruby 1.8.7 – インストーラ付き • Ruby-mswin32 (ja) – Ruby 1.9.1 までの各種バージョン – 手動インストール
  31. 31. 今後の予定 • Ruby on Rails or Merb を使って Web 開発

×