Top Banner
Ruby 1.9.3 新機能と変更点 Kenta Murata 1 201173日日曜日
65

Ruby 1.9.3 の新機能と変更点

May 28, 2015

Download

Technology

Kenta Murata

Ruby 1.9.3 の新機能と変更点について、2011年7月2日時点での NEWS をベースに解説しました。
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ruby 1.9.3 の新機能と変更点

Ruby 1.9.3 の新機能と変更点

Kenta Murata

12011年7月3日日曜日

Page 2: Ruby 1.9.3 の新機能と変更点

自己紹介•mrkn, 村田賢太 (29)•CRuby committer•Vim•7月20日生http://amzn.to/mrkn-wl

22011年7月3日日曜日

Page 3: Ruby 1.9.3 の新機能と変更点

2010年3月1日月曜日 32011年7月3日日曜日

Page 4: Ruby 1.9.3 の新機能と変更点

Ruby 1.9.3 の新機能と変更点

Kenta Murata

42011年7月3日日曜日

Page 5: Ruby 1.9.3 の新機能と変更点

はじめに

• ruby のソースツリーは NEWS ファイルがあり、次のリリースで加わる新機能や変更点がまとめられている (はず)

52011年7月3日日曜日

Page 6: Ruby 1.9.3 の新機能と変更点

注意点

• 今朝の最新の NEWS の内容をベースにお話します。

• まだ ruby_1_9_3 ブランチが切られていないため、現在の NEWS の内容は完全ではありません。

62011年7月3日日曜日

Page 7: Ruby 1.9.3 の新機能と変更点

ARGF.read_nonblock

• ARGF.read_nonblock(maxlen)

• ARGF.read_nonblock(maxlen, outbuf)

NEW!

72011年7月3日日曜日

Page 8: Ruby 1.9.3 の新機能と変更点

ARGF.to_write_io

• インプレースモードなら、書き込み先の IO オブジェクトを取得できる。

• インプレースモードでなければ IOError

が発生する。

NEW!

82011年7月3日日曜日

Page 9: Ruby 1.9.3 の新機能と変更点

ARGF.write

• ARGF.write(str)

• インプレースモードなら、str を書き込む。ARGF.to_write_io.write(str) の短縮形だと思って良い。

NEW!

92011年7月3日日曜日

Page 10: Ruby 1.9.3 の新機能と変更点

ARGF 用出力メソッド• ARGF.print

• ARGF.printf

• ARGF.putc

• ARGF.puts

• IO の同名メソッドと同じ。内部で

ARGF.write を使っている。

NEW!

102011年7月3日日曜日

Page 11: Ruby 1.9.3 の新機能と変更点

Array#pack, String#unpack

• エンディアンを明示するための修飾子

‘<’ と ‘>’ が追加された。

S>, L>, Q>, s>, l>, q>,S!>, L!>, Q!>, s!>, l!>, q!>

‘>’ が付いてない型のビッグエンディアン版

S<, L<, Q<, s<, l<, q<,S!<, L!<, Q!<, s!<, l!<, q!<

‘<’ が付いてない型のリトルエンディアン版

NEW!

112011年7月3日日曜日

Page 12: Ruby 1.9.3 の新機能と変更点

Bignum

• 約1,500桁 (内部表現で150要素) 以上の整数同士のかけ算で使うアルゴリズムが高速なもの (Toom-3) に変更された

Improved!

122011年7月3日日曜日

Page 13: Ruby 1.9.3 の新機能と変更点

文字エンコーディング

• CP950 (Big5)

• CP951 (BIg5HKSCS)

• UTF-16

• UTF-32

NEW!

132011年7月3日日曜日

Page 14: Ruby 1.9.3 の新機能と変更点

文字エンコーディング

• SJIS が Windows-31J のエイリアスに変更された

• 1.9.2 以前は Shift_JIS のエイリアス

Changed!

142011年7月3日日曜日

Page 15: Ruby 1.9.3 の新機能と変更点

File::NULL

• NULL デバイスのパス

• UNIX では “/dev/null”

• Windows では “NUL”

NEW!

152011年7月3日日曜日

Page 16: Ruby 1.9.3 の新機能と変更点

IO#putc

• マルチバイト文字に対応した

• putc “あ” の結果を比べてみよう!

Improved!

162011年7月3日日曜日

Page 17: Ruby 1.9.3 の新機能と変更点

IO#advise

• IO#advise(advise, offset=0, len=0)

• posix_fadvise(2) と同じ。ファイルへ特定のパターンでアクセスする事を OS に伝えるために使う。

• posix_fadvise(2) が無いプラットフォームでは何もしない。

NEW!

172011年7月3日日曜日

Page 18: Ruby 1.9.3 の新機能と変更点

IO.write

• IO.write(name, string, offset=0, opts={})

• ファイル name に文字列 string を位置

offset から書き込む。ファイルを開くモードなどは opts で指定する。

• IO.read の書き込み版。

NEW!

182011年7月3日日曜日

Page 19: Ruby 1.9.3 の新機能と変更点

IO.binwrite

• IO.binwrite(name, string, offset=0, opts={})

• IO.write のバイナリ版。

• ファイルを開く際に “wb:ASCII-8BIT” が指定される事と同じ。

NEW!

192011年7月3日日曜日

Page 20: Ruby 1.9.3 の新機能と変更点

BasicObject#__id__

• Object から BasicObject に移動した。

• [ruby-dev:42778]

Changed!

202011年7月3日日曜日

Page 21: Ruby 1.9.3 の新機能と変更点

Kernel#rand, Random.rand

• Kernel#rand(range)

• Random.rand(range)

• 引き数に範囲を指定できるようになった。浮動小数点数でもOK。

• [ruby-dev:43427], #4605

Improved!

212011年7月3日日曜日

Page 22: Ruby 1.9.3 の新機能と変更点

Module#private_constant, Module#public_constant

• 定数の可視性を変更できるようになった。

• プライベート定数は、定義されているモジュールのコンテキスト外から見えない。

NEW!

222011年7月3日日曜日

Page 23: Ruby 1.9.3 の新機能と変更点

String#prepend

• String#prepend(str)

• 引き数 str をレシーバの先頭に挿入する破壊的メソッド。

• recv[0,0] = str と動きは同じ (戻り値は異なる)。

NEW!

232011年7月3日日曜日

Page 24: Ruby 1.9.3 の新機能と変更点

String#byteslice

• String#byteslice(n)

• String#byteslice(beg, end)

• String#slice のバイト位置指定版。

• エンコーディングに影響されず、必ずバイト単位で位置指定して部分文字列を取れる。

NEW!

242011年7月3日日曜日

Page 25: Ruby 1.9.3 の新機能と変更点

Time#strftime

• 新しい書式指定子

• %:z は %H:%M と同じ

• %::z は %H:%M:%S と同じ

Improved!

252011年7月3日日曜日

Page 26: Ruby 1.9.3 の新機能と変更点

Process#maxgroups, Process#maxgroups

• なにこれ?

NEW!

262011年7月3日日曜日

Page 27: Ruby 1.9.3 の新機能と変更点

BigDecimal.new,Kernel#BigDecimal

• 引き数に Integer、Rational、Float の各オブジェクトを指定できるようになった。

• ただし、Rational と Float については、第2引き数で精度を明示する必要がある。

Improved!

272011年7月3日日曜日

Page 28: Ruby 1.9.3 の新機能と変更点

BigDecimal#coerce

• Rational を BigDecimal へ変換する場合に、coerce のレシーバである

BigDecimal の精度で変換する。

• 1.9.2 以前では Rational は一旦 Float に変換されていた。

Improved!

282011年7月3日日曜日

Page 29: Ruby 1.9.3 の新機能と変更点

BigMath.exp,BigMath.log

• bigdecimal/math から bigdecimal へ移動された。

• C で実装し直されたけど、アルゴリズムは同じなので速くはなってない。

Changed!

292011年7月3日日曜日

Page 30: Ruby 1.9.3 の新機能と変更点

BigDecimal#**

• BigDecimal のべき乗が実数の指数に対応する (予定)。

Improved!

302011年7月3日日曜日

Page 31: Ruby 1.9.3 の新機能と変更点

DateTime のオフセット

• DateTime.new のオフセットに Float と

Rational を指定できるようになった。

• ただし、値は日を単位として、秒の精度で丸められる。

Improved!

312011年7月3日日曜日

Page 32: Ruby 1.9.3 の新機能と変更点

DateTime#+,DateTime#-

• DateTime と Float との加減算が可能になった。

• ただし、Float 値は単位を日として、ナノ秒の精度で丸められる。

Improved!

322011年7月3日日曜日

Page 33: Ruby 1.9.3 の新機能と変更点

その他 date について• 範囲外のオフセット、範囲外の暦開始日を指定しても無視される

• 非常に大きな年の値は strftime で出力できない

(Time#strftime と同じものを使ってるから)

• inspect の書式が変わっている

• marshal のフォーマットが変わってるけど古いものも読める

332011年7月3日日曜日

Page 34: Ruby 1.9.3 の新機能と変更点

io/console の追加メソッド• IO#noecho {|io} ... }

• IO#echo=

• IO#echo?

• IO#raw {|io| ... }

• IO#raw!

• IO#getch

• IO#winsize

• IO.console

NEW!

342011年7月3日日曜日

Page 35: Ruby 1.9.3 の新機能と変更点

Matrix の新述語• Matrix#diagnoal? -- 対角行列

• Matrix#hermitian? -- エルミート行列

• Matrix#normal? -- 正則行列

• Matrix#orthogonal? -- 直交行列

• Matrix#permutation? -- 順列行列

• Matrix#symmetric? -- 対照行列

• Matrix#unitary? -- ユニタリー行列

• Matrix#zero? -- 零行列

NEW!

352011年7月3日日曜日

Page 36: Ruby 1.9.3 の新機能と変更点

Matrix#eigen,Matrix#eigensystem• レシーバの行列を対角化する

• v, d, v_inv = matrix.eigen

• v, v_inv : 変換行列

• d : 対角行列

• (v * d * v_inv).round(5) == matrix

NEW!

362011年7月3日日曜日

Page 37: Ruby 1.9.3 の新機能と変更点

Matrix#lupMatrix#lup_decomposition

• レシーバ行列を LUP 分解する

• l, u, p = matrix.lup

NEW!

372011年7月3日日曜日

Page 38: Ruby 1.9.3 の新機能と変更点

Matrix#round

• Matrix#round(n=0)

• 行列の各要素を小数点以下第n位で丸める。

NEW!

382011年7月3日日曜日

Page 39: Ruby 1.9.3 の新機能と変更点

Vector#magnitude

• ベクトルの大きさを返す

NEW!

392011年7月3日日曜日

Page 40: Ruby 1.9.3 の新機能と変更点

Matrix#each,Matrix#each_with_index• Matrix#each(mode=:all)

• each のやり方を指定できるようになった:all 全要素:diagonal 対角要素のみ:off_diagonal 非対角要素のみ:lower 対角要素と対角より下にある要素のみ:strict_lower 対角より下にある要素のみ:strict_upper 対角より上にある要素のみ:upper 対角要素と対角より下にある要素のみ

402011年7月3日日曜日

Page 41: Ruby 1.9.3 の新機能と変更点

:all

0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0

412011年7月3日日曜日

Page 42: Ruby 1.9.3 の新機能と変更点

:diagonal

0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0

422011年7月3日日曜日

Page 43: Ruby 1.9.3 の新機能と変更点

:off_diagonal

0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0

432011年7月3日日曜日

Page 44: Ruby 1.9.3 の新機能と変更点

:lower

0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0

442011年7月3日日曜日

Page 45: Ruby 1.9.3 の新機能と変更点

:strict_lower

0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0

452011年7月3日日曜日

Page 46: Ruby 1.9.3 の新機能と変更点

:strict_upper

0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0

462011年7月3日日曜日

Page 47: Ruby 1.9.3 の新機能と変更点

:upper

0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0

472011年7月3日日曜日

Page 48: Ruby 1.9.3 の新機能と変更点

Matrix#find_index,Matrix#index

• Matrix#index(val, selector=:all)

• val を探して位置を [row, column] で返す。

• Matrix#index(selector=:all) {|val| ... }

• ブロックが真になる位置を返す。

• Matrix#index(selector=:all)

• Enumerator を返す。

Improved!

482011年7月3日日曜日

Page 49: Ruby 1.9.3 の新機能と変更点

Matrix.zero

• Matrix.zero(row_size, col_size=row_size)

• 非正方零行列を作れるようになった。

Improved!

492011年7月3日日曜日

Page 50: Ruby 1.9.3 の新機能と変更点

net/http

• Server Name Indication をサポート (何これ?)

• 100 continue に対応 (何これ?)

• Net::HTTPRequest#set_form が

application/x-www-form-urlencoded と

multipart/form-data に対応

Improved!

502011年7月3日日曜日

Page 51: Ruby 1.9.3 の新機能と変更点

webrick

• WEBrick::HTTPRequest#continue が 100

continue レスポンスを生成するために追加された

• “%{remote}p” を使ってクライアントのポート番号をログに出せるようになった

Improved!

512011年7月3日日曜日

Page 52: Ruby 1.9.3 の新機能と変更点

openssl

• 鍵の符号化の辺りが変わってるみたいなんですが、私にはよく分かりません。

Improved!

522011年7月3日日曜日

Page 53: Ruby 1.9.3 の新機能と変更点

optparse

• bash と zsh の補完に対応したl

Improved!

532011年7月3日日曜日

Page 54: Ruby 1.9.3 の新機能と変更点

Rake

• バージョン 0.9.2.1 になった

• 1.9.2 では 0.8.7 だった

Improved!

542011年7月3日日曜日

Page 55: Ruby 1.9.3 の新機能と変更点

RDoc

• バージョン 3.8 になった

• 1.9.2 のときは 2.5.8

Improved!

552011年7月3日日曜日

Page 56: Ruby 1.9.3 の新機能と変更点

rexml

• iconv への依存を無くし、Ruby の組込み文字エンコーディングに対応

• Document#encoding、XMLDecl#encoding、Output#encoding、Source#encoding が文字エンコーディング名ではなく Encoding オブジェクトを返すので互換性が失われている

Improved!

562011年7月3日日曜日

Page 57: Ruby 1.9.3 の新機能と変更点

Rubygems

• バージョン 1.5.0 になった

Improved!

572011年7月3日日曜日

Page 58: Ruby 1.9.3 の新機能と変更点

stringio

• StringIO#set_encoding がオプションハッシュを受け付けるようになった

(IO#set_encoding との対称性のため)

• オプションハッシュは無視される

Improved!

582011年7月3日日曜日

Page 59: Ruby 1.9.3 の新機能と変更点

test/unit

• テストが並列実行されるようになった。

• 新しいオプションがいくつか追加された。

Improved!

592011年7月3日日曜日

Page 60: Ruby 1.9.3 の新機能と変更点

uri

• URI::Generic#hostname と

URI::Generic#hostname= が増えた。

Improved!

602011年7月3日日曜日

Page 61: Ruby 1.9.3 の新機能と変更点

yaml

• デフォルトの YAML エンジンが Psych になった。

• これまでのように syck を使いたい場合は以下を評価する必要がある:

YAML::ENGINE.yamler = ‘syck’

Changed!

612011年7月3日日曜日

Page 62: Ruby 1.9.3 の新機能と変更点

zlib

• Zlib::Deflate.deflate の短縮形として

Zlib.deflate が追加された

• Zlib::Inflate.inflate の短縮形として

Zlib.inflate が追加された

Improved!

622011年7月3日日曜日

Page 63: Ruby 1.9.3 の新機能と変更点

fileutils

• FileUtils.chmod がモードを chmod(1) コマンドと同じように文字で指定できるようになった。

• こんな感じで:

FileUtils.chmod “u=wrx,go=rx”, filename

Improved!

632011年7月3日日曜日

Page 64: Ruby 1.9.3 の新機能と変更点

言語としての変更点• Regexp が Unicode 6.0 に対応

• Regexp が実験的に Unicode の Age プロパティに対応した。

• マジックコメントに warn-indent: true と書くと、不正インデントを警告してくれる。例) -*- warn-indent: true -*-

例) -*- warn-indent: false -*-

Improved!

642011年7月3日日曜日

Page 65: Ruby 1.9.3 の新機能と変更点

さいごに

• ほかにも変更点はあるはずなんだけど、NEWS に書かれているのは以上でした。

• Ruby 1.9.3 はリリースへ向けて鋭意開発中ですので暖く見守ってください。

652011年7月3日日曜日