Download - Ruby 1.9.3 の新機能と変更点

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日日曜日