ruby-trunk-changes r30987 - r31001

今日は String#byteslice という新規メソッドの追加、rubygems 1.6.0 のマージなど比較的大きな変更がありました。

kosaki:r30987 2011-02-28 22:52:58 +0900

Windows の system() 等のコマンドラインに "^" が含まれていたり、ダブルクオートが含まれていたりしたら shell *1経由で実行するようにしています。挙動が変化したのでテストも変更。なんとなくこちらのほうが仕様がわかりやすくなったような気がします。が、これではだめだった模様。

nagachika:r30988 2011-02-28 23:56:01 +0900

testunit の rake の TestTask との競合問題のテストで make test-all 時にメッセージが漏れていたので、余分なメッセージが出力されないようにパイプで読み取るテストに変更しています。

arton:r30989 2011-03-01 00:15:32 +0900

include/ruby/win32.h で _WIN64 が未定義の時に WIN32 が #define されるようにしています。この後の #include で WIN32 の有無で構造体のパッキングの指定が変化してしまうので拡張ライブラリ(?)などで統一されたメモリレイアウトを見せるために必要なのだそうです。

svn:r30990 2011-03-01 00:15:37 +0900

version.h の日付更新。

naruse:r30991 2011-03-01 10:35:17 +0900

新規追加になったメソッド String#byteslice を実装しています。 [ruby-core:35376] [Feature #4447]
その名の通り文字列をエンコーディングに寄らずバイト列として slice するメソッドです。force_encoding("ASCII-8BIT") して slice するのとだいたい同じですが force_encoding が破壊的メソッドなのでレシーバの文字列のエンコーディングを変更せずに操作できます。

あと細かいことですが byteslice(beg, len) で len < 0 の時が slice() と違っていますね。

> "hello".slice(0,-1)
=> nil
> "hello".byteslice(0,-1)
=> ""

naruse:r30992 2011-03-01 13:28:58 +0900

String#byteslice の rdoc 用コメントを修正。

naruse:r30994 2011-03-01 16:02:08 +0900

String#byteslice() が返す文字列が元の文字列のエンコーディングを保持するようにしています。
うーんこれは ASCII-8BIT でよかったような気がするんですがどうでしょう。[ruby-core:35400] Martin Dürst 先生もそんなことを仰ってますね。

usa:r30995 2011-03-01 16:23:37 +0900

r30987 の修正で webrick 等のテストが失敗してしまうらしく revert されています。

ryan:r30996 2011-03-01 18:41:32 +0900

rubygems 1.6.0 がマージされています。たくさん変更が入りました。
cache の実装のリファクタリングとか api_key の取得方法の変更とか、サブコマンドのオプションの追加削除(setup の --quiet 削除、uninstall の --[no-]format-executable 追加)、custom_require の変更(また gem のバージョン指定などを考慮するようになってる?)、などなどたくさんです。差分の大部分はリファクタリングみたいです。
個人的には gem install で bin に置かれる rspec とか racc などのツールにはこれまで ruby 本体の --program-suffix による接尾文字がつなかったのが考慮されるようになっているようなのが気になるところです。複数の環境を使いわける時は --prefix ごと分離するようにしているので(RVM みたいに)この恩恵はそんなにないですが環境構築の手順に影響しそうです。RVM なども影響があるかも?

tadf:r30997 2011-03-01 19:48:23 +0900

r30961 以降 date のテストが失敗していたのですが、それをコメントアウトしています。 [ruby-dev:43280]
inspect の結果が変化したからみたいなのですが、予測される答のほうを変更すればいいわけじゃないんでしょうかね。

kosaki:r30998 2011-03-01 20:56:06 +0900

[Bug #4396] について追加してあった Windows での system() についてのテストを削除しています。 [Bug #4396]reject されたようです。

sorah:r30999 2011-03-01 21:54:39 +0900

testunit の並列テスト機能の修正が入っています。Windows 向けとありますが Linux でも時々失敗していた原因とおぼしき部分の修正も入っているので他の環境でも良くなったかもしれません。またテスト中に余分な出力があったのを抑制している、とコミットログにはあるのですがまだ出ているような(@ Mac OS X)。

sorah:r31000 2011-03-01 22:05:17 +0900

r30999 で STDOUT を何度も dup して file descriptor を変更しているっぽい処理があるのですがその dup を繰り返す回数を 500 -> 32 に減らしています。システムによっては同時に open できる file descriptor の数が少なかったりしますしね。ところでこの dup は file descriptor の番号を大きくしたいんでしょうかね。なんのためなのかよくわからない……。
もしかして: increment_io

akr:r31001 2011-03-01 22:29:41 +0900

ext/openssl/ossl_pkey.h の関数マクロの引数にかっこをつける修正です。

*1:cmd.exec とか command.com? すみません Windows よくわかりません