ruby-trunk-changes r48948 - r48976

今日も引き続き fiddle の(というより libffi の)ビルドまわりや rb_hash_delete() の互換性がなくなっていた問題の修正、Dir.glob の大文字小文字を区別しないファイルシステムでのパフォーマンスに関する修正などがありました。

naruse: r48948 2014-12-24 03:10:19 +0900

標準添付ライブラリ net/http でレスポンスの HTTP ステータスの行でステータスコードとそのメッセージの間に空白がなくても良くなっていたのを修正しています。 ステータスコードは3桁の数字と決まっているので、そのあとは自動的にステータスメッセージになるようになっていました。 https://github.com/ruby/ruby/pull/782 [ruby-core:66791] [Bug #10591]

naruse: r48953 2014-12-24 05:41:51 +0900

tool/downloader.rb で引数に key: value の記法が使われていたところがあったので 1.8 でも動くように :key => value の記法に直しています。

usa: r48954 2014-12-24 09:36:42 +0900

拡張ライブラリ fiddle の extconf.rb で mswin 版で libffi のバンドル版に ffitarget.h が存在していたら削除するようにしています。 configure で生成されるそうですが cygwin の symlink ファイルなので system attribute を持っていて…とかコメントに書いてありともかく邪魔みたいです。 libffi の configure に cygwin 使うの…。

naruse: r48955 2014-12-24 10:29:03 +0900

tool/downloader.rb で ruby 1.8 でも動くように *rest での引数の渡しかたをやめるようにしています。 *rest の後にキーワード引数が書けなかったんでしたっけ。 1.8 向けのRubyもうすっかり書けなくなってる気がしますね…

usa: r48956 2014-12-24 10:44:51 +0900

r48955 の "." -> "," の typo 修正。

nobu: r48957 2014-12-24 11:29:56 +0900

拡張ライブラリ fiddle で ext/fiddle/win32/libffi-config.rb と ext/fiddle/win32/libffi.mk.tmpl というファイルを追加して mswin 版では configure のかわりにこのスクリプトでバンドル版の libffi の Makefile を生成するようにしているみたいです。自前主義! libffi の mswin 版のビルドがいかにツラかったかがうかがえますね。

ko1: r48958 2014-12-24 11:53:37 +0900

rb_hash_delete() が Qundef を返す場合があるようになってしまっていたのを修正しています。 r48114 で rb_hash_delete() はそのコンテキストにブロックがあっても呼び出しを行わないように変更されていたのですが、キーに該当する値がない時に Qundef を返すことで判定するようになっていて、posix-spawn などの gem がこの変更の影響で SEGV するようになってしまっていたそうです。うーむこれは読んだ時に気がついてもよさそうなものだったけどスルーしていましたね。 rb_hash_delete() は rb_hash_delete_entry() という名称にして、rb_hash_delete() は Qundef がかえってきた時に Qnil を返すようにする wrapper として定義するようにしています。なんでこんなややこしいことになっているかというと Hash の値に nil が入っているのと、そもそもキーがないのを区別するためだと思います。これも rubynil があまり特別扱いされていないから…というやつですね。 [ruby-core:66989] [Bug #10623]

usa: r48959 2014-12-24 11:56:32 +0900

make up の sub make 実行時に Q 変数(verbose の指定)を伝播させるようにしています。

naruse: r48960 2014-12-24 12:06:59 +0900

tool/downloader.rb の RubyGems のダウンロード用メソッドで引数 url は不要だったので削除しています。

naruse: r48961 2014-12-24 12:07:14 +0900

tool/downloader.rb で config.guess と config.status は git.savannah.gnu.org からダウンロードしていたのを gcc.gnu.org/git の GCCリポジトリからダウンロードするようにしています。 なんでも GCCリポジトリにあるもののほうが新しかったとのことでした。

nobu: r48962 2014-12-24 12:16:31 +0900

r48647 で rb_data_type_t のメンバーから parent を削除して reserved にした変更を revert しています。 parent が必要だというチケットが上がってきたので一旦戻したみたいですね。 redmine で議論は続いているようですが。 [ruby-core:66969] [Bug #10621]

nobu: r48963 2014-12-24 13:00:27 +0900

tool/downloader.rb で発生した例外を捕捉してメッセージを再構築して例外を上げ直していたところで例外クラスも引き継いでいたのを RuntimeError で発生させるようにしています。例外クラスによっては必要な引数がメッセージだけではなかったりするのでこういう書きかたは安全ではありませんでした(ArgumentError になる可能性がある)。 [ruby-core:67086] [Bug #10639]

naruse: r48964 2014-12-24 13:26:18 +0900

r48931 の続きと思われます。 tool/redmine-backporter.rb でコミットの changeset 属性が取得できなかった時は権限がないとして例外を発生させるようにしています。

nobu: r48966 2014-12-24 15:58:34 +0900

ext/fiddle/depend で clean-libffi などのターゲットに .PHONY マークをつけるようにしています。

nobu: r48967 2014-12-24 15:58:48 +0900

r48958 での rb_hash_delete() の修正と rb_hash_delete_entry() の追加の対応で rb_hash_delete_entry() の宣言をテスト用の拡張ライブラリにも追加しています。 [ruby-core:66989] [Bug #10623]

naruse: r48968 2014-12-24 17:32:55 +0900

resolv.rb のテストでテストがタイムアウトしてしまうのを避けるため Resolv::DNS#timeout= で名前解決のタイムアウトを追加しています。

usa: r48969 2014-12-24 18:11:05 +0900

r48941 で open-uri で :ssl_ca_cert オプションの配列サポートを追加したところのリファクタリング

ko1: r48970 2014-12-24 18:22:42 +0900

rb_objspace_t のメンバ rgengc::old_objects_at_gc_start を削除しています。

nobu: r48971 2014-12-24 19:18:35 +0900

win32/file.c と win32/win32.c で条件部に代入文が書いてあるところやビット演算で優先度を明示的に指定するためかっこをつけてコンパイラの警告を抑制するようにしています。

nobu: r48972 2014-12-24 20:38:21 +0900

Dir.glob でファイルシステムが大文字小文字を区別しない時に常にアルファベットをメタキャラクタ扱いするようにしていたのを、速度の低下を懸念して条件を追加しています。次のセパレータが文字列末尾か "/" の時にのみメタキャラクタ扱いするようにしているのですが、これでいいのかな…? 確かこれってマッチした結果が実際のファイル名の大文字小文字に一致してないというのを対策するためだったと思うので、全体的にメタキャラクタ扱いしないといけないような。 確かに遅くなりそうだなと思った気はするのですが。 [ruby-core:63591] [Bug #10015]

nobu: r48973 2014-12-24 21:55:20 +0900

r48972 の ChangeLog エントリに ML 番号だけでチケットの番号がなかったので追記しています。

nobu: r48974 2014-12-24 22:25:28 +0900

GC のテストで子プロセスを止めるのに SIGINT を送信してから5秒待って SIGKILL で強制終了させていたのを、SIGSEGV を送信して dump させるようにしています。 Windows 版で SIGSEGV って送信できましたっけ? SIGINT と SIGKILL など一部がエミュレートされているだけだと思うのですが。ってまあ rescue nil で吸収されるからいいのか。

nobu: r48975 2014-12-24 23:39:49 +0900

r48972 とも関連して Dir.glob の大文字小文字を区別しないファイルシステムでの処理を変更していますが、これは次で revert されています。 [ruby-core:63591] [Bug #10015]

nobu: r48976 2014-12-24 23:59:20 +0900

r48975 を revert しています。 CI でテストが失敗したとのこと。 [ruby-core:63591] [Bug #10015]