ruby-trunk-changes r33647 - r33657

Windows の IO出力のパフォーマンス改善、 Psych の不具合修正、close-on-exec フラグセットシリーズなどがありました。

ayumin:r33647 2011-11-07 01:18:26 +0900

lib/debug.rb の help で表示されるヘルプメッセージに pp と restart (r) を追加しています。 [ruby-dev:44222] [Bug #5093]

svn:r33648 2011-11-07 01:18:31 +0900

version.h の日付更新。

usa:r33649 2011-11-07 19:27:19 +0900

r33627 から r33629 で対応した Windows での改行コードの変換処理のテストを追加しています。 [Backport #5565]

akr:r33650 2011-11-07 19:44:02 +0900

exec(2) 前に file descriptor を閉じるために open 済みの file descriptor の最大値を取得するところで NetBSD では fcntl(2) の F_MAXFD というコマンドが利用できるそうでこれを使って最大の file descriptor を取得してみるようにしています。

usa:r33651 2011-11-07 20:08:39 +0900

Windows 環境で io_fflush() で fsync() を呼んでいたのを rb_io_flush() と rb_io_rewind() に移動しています。fsync() の回数を減らして Windows での出力のパフォーマンスを改善するためのようです。 [ruby-list:48515] [Bug #5585]
なんとなく見おぼえのある変更だなぁと思ったら r31901 の逆向きの変更なんですね。

akr:r33652 2011-11-07 20:17:17 +0900

拡張ライブラリ dbm で dbm_pagfno() と dbm_dirfno() という関数がサポートされていたらこれを使って file descriptor を取り出して rb_fd_fix_cloexec() を呼んで、 close-on-exec フラグのセットと最大値の更新をするようにしています。

tenderlove:r33653 2011-11-07 20:22:22 +0900

test/psych/test_yamldbm.rb の YAMLDBMTest を MiniTest::Unit::TestCase から継承している Psych::TestCase (test/psyck/helper.rb で定義)を継承するようにしています。独自の assert が定義されています。また require "yaml/dbm" の LoadError を捕捉しようとしているところで、例外が発生すると require "tmpdir" がスキップされてしまっていたのを修正しています。

tenderlove:r33654 2011-11-07 20:27:27 +0900

test/psych/test_yamlstore.rb の YAMLStoreTest も同様に Psych::TestCase を継承するようにしています。 それに伴ない assert_raise -> assert_raises に変更。うーんこれは何故だろう?

tenderlove:r33655 2011-11-07 20:33:39 +0900

Psych で 60進数(":" で区切る)の読み込みする時に先頭が 0 を許容するようにしています。テストが追加されているんですが、このテスト内容だと、60進数っぽい文字列を dump してそれが文字列としてロードされることを確認しています。なぜか数値としてパースされるとちゃんと文字列として dump されて、そうでないとそのまま出力される(ので load 時に数値になってしまう)みたいです。なんでだろ。
あとこの最初のトークンだけ[0-5][0-9] じゃなくて [0-9][0-9] なのは仕様なのかなぁ。と思ったらどうやら YAML の仕様みたいです。参考 URL: http://yaml.org/type/int.html

akr:r33656 2011-11-07 21:16:10 +0900

r33652 で dbm_pagfno() と dbm_dirfno() を使うようにしたコミットのコメントに追記しています。これらの関数(or マクロ)は標準化されていないとのこと。

akr:r33657 2011-11-07 22:05:43 +0900

gdbm も gdbm_fdesc() という関数を用いて file descriptor を取り出して rb_fd_fix_cloexec() を呼んで close-on-exec フラグをセットするようにしています。