ruby-trunk-changes r40127 - r40166

今日は socket, resolv.rb の機能追加やリファクタリング、defined?(()) の挙動の修正、Solaris でのビルドエラー修正などなど盛り沢山でした。

akr:r40127 2013-04-05 20:44:56 +0900

r40126 で pack/unpack の Q!/q! の型の指定に LONG_LONG を使うようにしたのを long long 型が実際に利用可能かをチェックするマクロ HAVE_TRUE_LONG_LONG というのを定義するようにして、それに応じて Q!/q! をサポートするかを決めるようにして、型の指定は long long に戻しています。 LONG_LONG は long long かもしくは __int64 という型を使うように定義されていて、__int64 の時はダメってことみたいです。 __int64 は VC でサポートされている型みたいです。

akr:r40128 2013-04-05 20:57:59 +0900

r40127 の include/ruby/defines.h の typo 修正。

akr:r40129 2013-04-05 21:06:34 +0900

pack.c の各指示子の case 節に書いてあるコメントの解説を少し詳しくしています。

nobu:r40130 2013-04-05 21:34:43 +0900

configure で warnflags に -Werror=extra-tokens を追加して、#if などのプリプロセッサの directive に余分なトークンがあった時に警告ではなくエラー扱いにするようにしています。 r40128 の typo の影響でしょう。

nobu:r40131 2013-04-05 23:08:21 +0900

r40130 で warnflags に追加した -Werror=extra-token は -Wextra-token が gcc 3 以前でサポートされていなかったので gcc の major version をチェックして 4 以降の時だけ追加するように変更しています。

nobu:r40132 2013-04-05 23:08:27 +0900

r40131 で gcc の major version をチェックするために追加したコードを visibility のオプションを追加するところでも同様のことをしていたので結果を使い回すようにしています。 また cc のバージョンを表示するオプションそのものを検出するコードで変数名を typo していたのを修正しています。

nobu:r40133 2013-04-06 00:21:02 +0900

Thread#[]= で Thread local (正確には Fiber local) 変数のセットで nil を入れるとその項目を削除する動作をしますが、この時にそもそもストレージがまだ未使用だったら st_table を初期化する処理が走っていたので、nil を代入(つまり削除)しようとした時には初期化しないようにしています。

svn:r40134 2013-04-06 00:21:07 +0900

version.h の日付更新。

shirosaki:r40135 2013-04-06 00:30:52 +0900

require が同じファイルパスを2度ロードしないようにしているのがファイルパスにマルチバイト文字が含まれていると正しく同一ファイルを検出できず何度もロードされてしまっていた不具合を修正しています。 [ruby-core:53733] [Bug #8165]

akr:r40136 2013-04-06 01:40:36 +0900

r33596 で存在したら使うようにした accept4(2) で accept して作られた新しい fd に最初から SOCK_CLOEXEC を付加するようにしているのですが、SOCK_CLOEXEC が未定義だった時のことを考慮するように #ifdef を追加しています。 しかし SOCK_CLOEXEC がなかったらもう accept4() を使う意味もないような気もしますね。

tenderlove:r40137 2013-04-06 02:11:21 +0900

拡張ライブラリ psych で String オブジェクトのインスタンス変数にその String オブジェクト自身を参照するようにタグをつけた YAML をロードできるように修正しています。 YAML でこんなことまでできるんですね。 https://github.com/tenderlove/psych/issues/135

nobu:r40138 2013-04-06 02:30:42 +0900

defined? を defined? () とした時と defined?(()) とかっこをつけた時とでそれぞれ "nil" と "expression" が帰ってくるという動作の違いが生じていたので空の式に対して "nil" を返せるようにしています。昨日の r40124 で修正した defined? の続きですね。 [ruby-core:54024] [Bug #8224]

tenderlove:r40139 2013-04-06 02:55:53 +0900

拡張ライブラリ pysch で発生させる例外に psych 独自の例外のベースとなる Psych::Exception を導入してこれを継承するようにしています。といっても Psych::SyntaxError と Psych::BadAlias くらいしかないみたいですけど。 https://github.com/tenderlove/psych/issues/125

nobu:r40140 2013-04-06 02:57:43 +0900

r40139 で追加されたファイルの svn property 設定。

tenderlove:r40141 2013-04-06 03:02:22 +0900

psych のテストのテストメソッド名をひとつ、より説明的な名前に変更しています。

tenderlove:r40142 2013-04-06 03:12:52 +0900

拡張ライブラリ psych で Hash (YAML 的には map?) のキーに Symbol を使えなかったのを修正しています。

akr:r40143 2013-04-06 08:00:59 +0900

pack.c の HAVE_TRUE_LONG_LONG の判定している部分を移動して、LONG_LONG ではなく long long を使っているのは意図的であることをコメントとして残しています。

akr:r40144 2013-04-06 09:10:22 +0900

pack のテストのコメントに Q!/q! は long long が使えるプラットフォームでのみ利用可能であることがコメントとして書かれていたのですが、そこに「今どきそんなプラットフォームあるのか?」と追記しています。

nobu:r40145 2013-04-06 09:54:23 +0900

r40143 で NATINT_LEN_Q の定義と一緒に移動してしまった NATINT_LEN の定義を元の位置に戻しています。 NATINT_LEN の定義は NATINT_PACK の後でないといけなかったため。

nobu:r40146 2013-04-06 09:56:06 +0900

r40145 の ChangeLog が重複していたので1つ削除しています。

nobu:r40147 2013-04-06 09:59:12 +0900

DTrace のテストで子プロセスで sudo を使う場合に LD_LOAD_PATH(正確には RbConfig::CONFIG["LIBPATHENV"] でプラットフォームによって適切な環境変数名が選択される)、RUBY、RUBYOPT などの環境変数を明示的に子プロセスに渡すようにしています。

shirosaki:r40148 2013-04-06 11:30:52 +0900

r40135 で追加した require のテストで子プロセスで $LOAD_PATH を書き換えているところを修正しているのですが、ここで RUBY_PLATFORM を使っている意味がよくわからないです。なぜだろう。

akr:r40149 2013-04-06 11:39:44 +0900

拡張ライブラリ socket の例外のメッセージを全体的により詳しくしています。 bind や connect で失敗した時にアドレス(ホストとポート番号)などを出すようにしています。これはいいですね。 [ruby-core:45617] [Feature #6583]

akr:r40150 2013-04-06 11:50:08 +0900

r40149 で追加した UNIX ドメインソケットの操作時の例外メッセージを詳細化した rsock_sys_fail_path() で path が '\0' を含む文字列だった時に扱えるようにするために一旦 rb_str_inspect() を通すようにしています。

akr:r40151 2013-04-06 12:41:01 +0900

r40149 で追加した例外発生用の関数の宣言に NORETURN() をつけるようにしています。

akr:r40152 2013-04-06 13:14:57 +0900

r40149 で追加した UNIX ドメインソケット操作時の例外発生用の関数 rsock_sys_fail_path() で引数 path に String でないオブジェクトが渡された時のことを考慮するようにしています。

akr:r40153 2013-04-06 13:35:29 +0900

r40149 で追加した rsock_sys_fail_sockaddr の第2引数を削除しています。詳細を読んでないですが rb_cSocket 決め打ちでよかったみたいです。

akr:r40154 2013-04-06 14:50:42 +0900

r40149 の変更の続き。 rsock_sys_fail_addrinfo() と rsock_sys_fail_sockaddr_or_addrinfo() という例外発生用の関数も追加してアドレスの表示の方法を変更しています。 またこのために SockAddrStringValueWithAddrinfo() というマクロを新設してソケットアドレスの文字列表現を取得するのと同時にその元となった Addrinfo を取っておくようにしています。

nobu:r40155 2013-04-06 16:58:47 +0900

r40149 の続きの続き。 r40154 で追加した rsock_sys_fail_sockaddr() の警告除去のためキャストを追加しています。

nobu:r40156 2013-04-06 16:58:51 +0900

拡張ライブラリ socket で使うための RSTRING_LEN() の結果を socklen_t にキャストするマクロを RSTRING_SOCKELEN() として定義して、socket のコード内で利用するようにしています。

akr:r40157 2013-04-06 20:04:45 +0900

r40149 で追加して r40154 で変更した rsock_sys_fail_sockaddr() の引数を String から struct sockaddr と socklen_t に変更しています。もう直接呼んでいるところはなくて rsock_sys_fail_addrinfo_or_sockaddr() からしか呼ばれていないので変更の影響も軽微ですね。

akr:r40158 2013-04-06 20:21:05 +0900

そして 40154 で追加した rsock_sys_fail_addrinfo() と rsock_sys_fail_addrinfo_or_sockaddr() を rsock_sys_fail_raddrinfo() と rsock_sys_fail_raddrinfo_or_sockaddr() に改名しています(addrinfo -> raddrinfo)。

akr:r40159 2013-04-06 22:16:36 +0900

チケットに詳細な動機が書かれているので(日本語だし)そちらを呼んでいただくのがいいと思います。標準添付ライブラリ resolv.rb の Resolv::DNS.fetch_resource というメソッドを新設して each_resource がこのメソッドを利用して実装するようにリファクタリングしています。 extract_resources の部分を差し替えしやすくするためみたいです。 [ruby-dev:43587] [Feature #4788]

akr:r40160 2013-04-06 23:32:34 +0900

標準添付ライブラリ resolv.rb に Resolv::MDNS というクラスを新設して Multicast DNS (mDNS) のサポートを追加しています。 RFC 6762 で定義されているらしいです。 Resolv を使った経験がなくてあまり自信はないですが、使いかたはだいたい Resolv::DNS と同じでいいみたいです。 [ruby-core:53387] [Feature #8089]

ngoto:r40161 2013-04-06 23:45:06 +0900

addr2line.c で quad_t と u_quad_t が Solaris で使えないこと、また古い Sun Studio で __inline が使えないことでコンパイルできないことがあったので代替の定義を追加しています。 [ruby-dev:47229] [Bug #8227]

akr:r40162 2013-04-06 23:52:48 +0900

標準添付ライブラリ resolv.rb に LOC の参照するための機能を追加しています。位置情報の取得ですね。 Resolv::LOC::Size、Resolv::LOC::Alt および Resolv::LOC::Coord というクラスを追加して、Resolv::DNS::Resource::LOC でこれらの情報をオブジェクト化して返せるようにしているみたいです。 [ruby-core:23361] [Feature #1436]

ngoto:r40163 2013-04-07 00:00:44 +0900

ruby_atomic.h で Solaris 9 以前では atomic.h が利用できないためコンパイルできないというのを回避するため HAVE_ATOMIC_H のチェックを条件コンパイルの #if directive に追加しています。 [ruby-dev:47229] [Bug #8228]

svn:r40164 2013-04-07 00:00:48 +0900

version.h の日付更新。

akr:r40165 2013-04-07 01:02:46 +0900

Time#strftime で "%j" (1年の通算の日数)の文字列化の時に yday の数値の範囲チェックがされていなかったので追加しています。 [ruby-core:44088] [Bug #6247]

knu:r40166 2013-04-07 01:43:32 +0900

misc/ruby-electric.el の修正です。コミットログをそのまま書いてしまいますが、

  • 文字列内での # を #{} に展開する機能の追加
  • %r{} や %w{} の { ではスペースを入れない(これはOK)
  • ruby-electric-newline-before-closing-bracket ({ の展開時に改行も入れる)がオフのとき、 { } と空白が1つしか入っていなかったので { } と閉じ括弧の前にも入れるようにした

だそうです。 knu さんコメントありがとうございます。