ruby-trunk-changes r48977 - r49008

今日も fiddle (というか同梱の libffi)のビルド関係の修正やテストの修正、uri の最適化、io/console の不具合修正などがありました。そして今日 ruby 2.2.0 がリリースされました。新しい安定版リリースです。

https://www.ruby-lang.org/en/news/2014/12/25/ruby-2-2-0-released/

Symbol GC, Incremental GC など新たな GC の実装をはじめ最適化や新機能があります。ただ今回互換性に影響する変更もあり Rails 3.2 は 2.2.0 では動かなくなる機能があったり、その他古い gems パッケージでは依存関係の不足(test/unit が標準添付ではなくなったことなどから)や拡張ライブラリのビルドの失敗の可能性などがありますので、各種ライブラリも更新して最新版を追うのが良さそうです。

naruse: r48977 2014-12-25 03:59:45 +0900

r48968 の再修正。 resolv のテストでタイムアウトに Resolv::DNS#timeout= を使ったタイムアウトの設定を使うより Timeout.timeout による割り込みを使うようにしています。ついでにタイムアウトも 5秒にまでのばしています。

svn: r48978 2014-12-25 03:59:57 +0900

version.h の日付更新。

nobu: r48979 2014-12-25 08:11:44 +0900

rdoc のテストで fd leak があったので File.open のブロックを使う記法を利用するように書きかえています。

normal: r48980 2014-12-25 08:50:37 +0900

標準添付ライブラリ uri で比較や Hash のキーとして渡すための文字列リテラルなどに freeze の呼び出しを追加する最適化のための変更を行なっています。文字列リテラルは freeze を呼ばれていると fstring といって共有文字列になり評価されるたびにオブジェクトを確保しなくなるので、GC pressure を下げてパフォーマンス改善に繋がります。 [ruby-core:67018] [misc #10628]

usa: r48981 2014-12-25 09:21:00 +0900

標準添付ライブラリ resolv のテストでダミーサーバのスレッドで UDPSocket#recvfrom を呼ぶところにタイムアウトをかけています。クライアント側のスレッドで例外が発生したりするとここで待ち続けてテストが固まってしまうようになっていたようです。

nobu: r48982 2014-12-25 10:09:17 +0900

拡張ライブラリ console で IO.console というメソッドで内部的に定数として扱う "console" という識別子の id を rb_mod_remove_const() に渡していましたが、この名前は定数としては不正なので NameError が発生する状態だったのでより内部的な rb_const_remove() に id_console を直接渡すように修正しています。
この前の変更で入ったのかなと思いきや 2.0.0/2.1 でも同様のソースなので多分バックポートが必要ですね。というわけでチケットにしておきました [Bug #10649]

nobu: r48983 2014-12-25 10:23:57 +0900

r48981 の resolv のテストでのサーバスレッドの Timeout.timeout の追加でブロックを導入したため変数のスコープが変わってしまっていた不具合を修正しています。

usa: r48984 2014-12-25 11:37:17 +0900

r48982 の IO.console.close の修正でテストに追加したユーティリティメソッド run_pty にブロックが渡されなかった時のことを考慮するようにしています。

nobu: r48985 2014-12-25 12:37:54 +0900

rubygemsrubygems/compatibility.rb で ruby 1.9.2 向けの対応をしているところでブロックの中のスコープの変数を参照してしまっているのを修正しています。元は TODO コメントがついてましたけど、TODO で済ませてちゃいかんでしょこれ…。またブロックパラメータとメソッド名が衝突していたところを(おそらく警告除去のため)ブロックパラメータの名前を変更しています。

nobu: r48986 2014-12-25 12:47:46 +0900

ブロックのスコープのダイナミック変数をそのブロックの外側で参照しているような時にパース時に警告を出すようにしています。 これテストで BEGIN{ throw tag } しているのは単に実際に実行させないため(a がみつからなくてエラーになる)からだと思います。けどこのテストでいうと a という名前のメソッドがあるかもしれないですが…まあそれも衝突はしているので警告されてもいいのかも。

nobu: r48987 2014-12-25 12:51:27 +0900

拡張ライブラリ io/console のテストの run_pty で IO#readlines にブロック引数として &:chomp を渡していたのを readlines.map(&:chomp) と修正しています。 readlines はブロックを受け取っても呼び出していませんでした。

nobu: r48988 2014-12-25 13:59:20 +0900

mingw-w64 でのシステムヘッダファイルの不具合に対処するため NET_LUID というマクロの検出時に #include を追加するようにしています。 [ruby-core:67103] [Bug #10640]

nobu: r48989 2014-12-25 15:17:49 +0900

拡張ライブラリ io/console のテスト再修正。 pty から readlines で EOF まで読もうとすると固まってしまうので引数 n を追加して n 行だけ IO#gets で読み込むようにしています。

nobu: r48990 2014-12-25 15:36:18 +0900

昨日の r48972 および r48975 のリベンジ。 Dir.glob で最後の部分(basename 部分)だけファイルシステムの大文字小文字に合わせるようにしていたのを、getattrlist(2) というシステムコールが利用できる時はこれを使って ATTR_CMN_NAME という属性を取り出して利用するようにしています。このシステムコールよく知らないのですが、どうもこれで取り出せるのが大文字小文字を保持した名前になっているみたいですね。 [ruby-core:67116] [Bug #10015]

nobu: r48991 2014-12-25 16:01:22 +0900

File.expand_path で OS Xファイルシステム(HFS)で無視されるような文字を含んでいたらそれを削って処理するようにしています。

nobu: r48993 2014-12-25 16:14:12 +0900

拡張ライブラリ io/console で IO.console に Symbol を引数として渡してそのメソッドを呼ぶことができるようにしています。 特に :close が渡された時は内部で直に rb_io_close(con) を呼ぶようにしています。ブロック渡しとかではなくて Symbol でメソッドを指定させているのは何か理由があるんでしょうか?

nobu: r48997 2014-12-25 17:27:09 +0900

r48988 の mingw-w64 向けのビルドの再修正。 #include の追加のかわりに #include を追加して #include も削除するようにしています。 [ruby-core:67125] [Bug #10640]

ngoto: r48999 2014-12-25 17:33:41 +0900

WeakRef の finalizer で ruby_sized_xrealloc2() の呼びかたに不具合があり不正なメモリアクセスが行なわれる可能性があったのを修正しています。 2.2 のリリースぎりぎりに修正が入ってたっぽいですね。 [ruby-dev:48779] [Bug #10646]

usa: r49006 2014-12-25 19:01:41 +0900

r48936 で拡張ライブラリ fiddle に同梱する libffi にあてているパッチで mswin32 向けの修正も追加しているようです。

nobu: r49007 2014-12-25 21:58:18 +0900

拡張ライブラリ fiddle の extconf.rb でバンドルされている libffi でインストールしようとするとコンパイルエラーになることがあるのを修正。共有ライブラリとしてリンクされる場合に -fPIC などの適切なオプションをつけてコンパイルされるように --enable-shared/--enable-static オプションつきで libffi をビルドするようにしています。 ライブラリを libffi.a から libffi_convinience.a にしているのはなんでしょうね。 [ruby-core:67128]

kazu: r49008 2014-12-25 22:53:36 +0900

2.2 がリリースされたので ChangeLog と NEWS ファイルを doc/ の下に移動して新たに 2.3.0 向けに作りなおしています。