ruby 1.9.3 の新機能と変更点
DESCRIPTION
Ruby 1.9.3 の新機能と変更点について、2011年7月2日時点での NEWS をベースに解説しました。TRANSCRIPT
Ruby 1.9.3 の新機能と変更点
Kenta Murata
12011年7月3日日曜日
自己紹介•mrkn, 村田賢太 (29)•CRuby committer•Vim•7月20日生http://amzn.to/mrkn-wl
22011年7月3日日曜日
2010年3月1日月曜日 32011年7月3日日曜日
Ruby 1.9.3 の新機能と変更点
Kenta Murata
42011年7月3日日曜日
はじめに
• ruby のソースツリーは NEWS ファイルがあり、次のリリースで加わる新機能や変更点がまとめられている (はず)
52011年7月3日日曜日
注意点
• 今朝の最新の NEWS の内容をベースにお話します。
• まだ ruby_1_9_3 ブランチが切られていないため、現在の NEWS の内容は完全ではありません。
62011年7月3日日曜日
ARGF.read_nonblock
• ARGF.read_nonblock(maxlen)
• ARGF.read_nonblock(maxlen, outbuf)
NEW!
72011年7月3日日曜日
ARGF.to_write_io
• インプレースモードなら、書き込み先の IO オブジェクトを取得できる。
• インプレースモードでなければ IOError
が発生する。
NEW!
82011年7月3日日曜日
ARGF.write
• ARGF.write(str)
• インプレースモードなら、str を書き込む。ARGF.to_write_io.write(str) の短縮形だと思って良い。
NEW!
92011年7月3日日曜日
ARGF 用出力メソッド• ARGF.print
• ARGF.printf
• ARGF.putc
• ARGF.puts
• IO の同名メソッドと同じ。内部で
ARGF.write を使っている。
NEW!
102011年7月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日日曜日
Bignum
• 約1,500桁 (内部表現で150要素) 以上の整数同士のかけ算で使うアルゴリズムが高速なもの (Toom-3) に変更された
Improved!
122011年7月3日日曜日
文字エンコーディング
• CP950 (Big5)
• CP951 (BIg5HKSCS)
• UTF-16
• UTF-32
NEW!
132011年7月3日日曜日
文字エンコーディング
• SJIS が Windows-31J のエイリアスに変更された
• 1.9.2 以前は Shift_JIS のエイリアス
Changed!
142011年7月3日日曜日
File::NULL
• NULL デバイスのパス
• UNIX では “/dev/null”
• Windows では “NUL”
NEW!
152011年7月3日日曜日
IO#putc
• マルチバイト文字に対応した
• putc “あ” の結果を比べてみよう!
Improved!
162011年7月3日日曜日
IO#advise
• IO#advise(advise, offset=0, len=0)
• posix_fadvise(2) と同じ。ファイルへ特定のパターンでアクセスする事を OS に伝えるために使う。
• posix_fadvise(2) が無いプラットフォームでは何もしない。
NEW!
172011年7月3日日曜日
IO.write
• IO.write(name, string, offset=0, opts={})
• ファイル name に文字列 string を位置
offset から書き込む。ファイルを開くモードなどは opts で指定する。
• IO.read の書き込み版。
NEW!
182011年7月3日日曜日
IO.binwrite
• IO.binwrite(name, string, offset=0, opts={})
• IO.write のバイナリ版。
• ファイルを開く際に “wb:ASCII-8BIT” が指定される事と同じ。
NEW!
192011年7月3日日曜日
BasicObject#__id__
• Object から BasicObject に移動した。
• [ruby-dev:42778]
Changed!
202011年7月3日日曜日
Kernel#rand, Random.rand
• Kernel#rand(range)
• Random.rand(range)
• 引き数に範囲を指定できるようになった。浮動小数点数でもOK。
• [ruby-dev:43427], #4605
Improved!
212011年7月3日日曜日
Module#private_constant, Module#public_constant
• 定数の可視性を変更できるようになった。
• プライベート定数は、定義されているモジュールのコンテキスト外から見えない。
NEW!
222011年7月3日日曜日
String#prepend
• String#prepend(str)
• 引き数 str をレシーバの先頭に挿入する破壊的メソッド。
• recv[0,0] = str と動きは同じ (戻り値は異なる)。
NEW!
232011年7月3日日曜日
String#byteslice
• String#byteslice(n)
• String#byteslice(beg, end)
• String#slice のバイト位置指定版。
• エンコーディングに影響されず、必ずバイト単位で位置指定して部分文字列を取れる。
NEW!
242011年7月3日日曜日
Time#strftime
• 新しい書式指定子
• %:z は %H:%M と同じ
• %::z は %H:%M:%S と同じ
Improved!
252011年7月3日日曜日
Process#maxgroups, Process#maxgroups
• なにこれ?
NEW!
262011年7月3日日曜日
BigDecimal.new,Kernel#BigDecimal
• 引き数に Integer、Rational、Float の各オブジェクトを指定できるようになった。
• ただし、Rational と Float については、第2引き数で精度を明示する必要がある。
Improved!
272011年7月3日日曜日
BigDecimal#coerce
• Rational を BigDecimal へ変換する場合に、coerce のレシーバである
BigDecimal の精度で変換する。
• 1.9.2 以前では Rational は一旦 Float に変換されていた。
Improved!
282011年7月3日日曜日
BigMath.exp,BigMath.log
• bigdecimal/math から bigdecimal へ移動された。
• C で実装し直されたけど、アルゴリズムは同じなので速くはなってない。
Changed!
292011年7月3日日曜日
BigDecimal#**
• BigDecimal のべき乗が実数の指数に対応する (予定)。
Improved!
302011年7月3日日曜日
DateTime のオフセット
• DateTime.new のオフセットに Float と
Rational を指定できるようになった。
• ただし、値は日を単位として、秒の精度で丸められる。
Improved!
312011年7月3日日曜日
DateTime#+,DateTime#-
• DateTime と Float との加減算が可能になった。
• ただし、Float 値は単位を日として、ナノ秒の精度で丸められる。
Improved!
322011年7月3日日曜日
その他 date について• 範囲外のオフセット、範囲外の暦開始日を指定しても無視される
• 非常に大きな年の値は strftime で出力できない
(Time#strftime と同じものを使ってるから)
• inspect の書式が変わっている
• marshal のフォーマットが変わってるけど古いものも読める
332011年7月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日日曜日
Matrix の新述語• Matrix#diagnoal? -- 対角行列
• Matrix#hermitian? -- エルミート行列
• Matrix#normal? -- 正則行列
• Matrix#orthogonal? -- 直交行列
• Matrix#permutation? -- 順列行列
• Matrix#symmetric? -- 対照行列
• Matrix#unitary? -- ユニタリー行列
• Matrix#zero? -- 零行列
NEW!
352011年7月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日日曜日
Matrix#lupMatrix#lup_decomposition
• レシーバ行列を LUP 分解する
• l, u, p = matrix.lup
NEW!
372011年7月3日日曜日
Matrix#round
• Matrix#round(n=0)
• 行列の各要素を小数点以下第n位で丸める。
NEW!
382011年7月3日日曜日
Vector#magnitude
• ベクトルの大きさを返す
NEW!
392011年7月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日日曜日
: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日日曜日
: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日日曜日
: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日日曜日
: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日日曜日
: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日日曜日
: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日日曜日
: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日日曜日
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日日曜日
Matrix.zero
• Matrix.zero(row_size, col_size=row_size)
• 非正方零行列を作れるようになった。
Improved!
492011年7月3日日曜日
net/http
• Server Name Indication をサポート (何これ?)
• 100 continue に対応 (何これ?)
• Net::HTTPRequest#set_form が
application/x-www-form-urlencoded と
multipart/form-data に対応
Improved!
502011年7月3日日曜日
webrick
• WEBrick::HTTPRequest#continue が 100
continue レスポンスを生成するために追加された
• “%{remote}p” を使ってクライアントのポート番号をログに出せるようになった
Improved!
512011年7月3日日曜日
openssl
• 鍵の符号化の辺りが変わってるみたいなんですが、私にはよく分かりません。
Improved!
522011年7月3日日曜日
optparse
• bash と zsh の補完に対応したl
Improved!
532011年7月3日日曜日
Rake
• バージョン 0.9.2.1 になった
• 1.9.2 では 0.8.7 だった
Improved!
542011年7月3日日曜日
RDoc
• バージョン 3.8 になった
• 1.9.2 のときは 2.5.8
Improved!
552011年7月3日日曜日
rexml
• iconv への依存を無くし、Ruby の組込み文字エンコーディングに対応
• Document#encoding、XMLDecl#encoding、Output#encoding、Source#encoding が文字エンコーディング名ではなく Encoding オブジェクトを返すので互換性が失われている
Improved!
562011年7月3日日曜日
Rubygems
• バージョン 1.5.0 になった
Improved!
572011年7月3日日曜日
stringio
• StringIO#set_encoding がオプションハッシュを受け付けるようになった
(IO#set_encoding との対称性のため)
• オプションハッシュは無視される
Improved!
582011年7月3日日曜日
test/unit
• テストが並列実行されるようになった。
• 新しいオプションがいくつか追加された。
Improved!
592011年7月3日日曜日
uri
• URI::Generic#hostname と
URI::Generic#hostname= が増えた。
Improved!
602011年7月3日日曜日
yaml
• デフォルトの YAML エンジンが Psych になった。
• これまでのように syck を使いたい場合は以下を評価する必要がある:
YAML::ENGINE.yamler = ‘syck’
Changed!
612011年7月3日日曜日
zlib
• Zlib::Deflate.deflate の短縮形として
Zlib.deflate が追加された
• Zlib::Inflate.inflate の短縮形として
Zlib.inflate が追加された
Improved!
622011年7月3日日曜日
fileutils
• FileUtils.chmod がモードを chmod(1) コマンドと同じように文字で指定できるようになった。
• こんな感じで:
FileUtils.chmod “u=wrx,go=rx”, filename
Improved!
632011年7月3日日曜日
言語としての変更点• Regexp が Unicode 6.0 に対応
• Regexp が実験的に Unicode の Age プロパティに対応した。
• マジックコメントに warn-indent: true と書くと、不正インデントを警告してくれる。例) -*- warn-indent: true -*-
例) -*- warn-indent: false -*-
Improved!
642011年7月3日日曜日
さいごに
• ほかにも変更点はあるはずなんだけど、NEWS に書かれているのは以上でした。
• Ruby 1.9.3 はリリースへ向けて鋭意開発中ですので暖く見守ってください。
652011年7月3日日曜日