ruby-trunk-changes r45800 - r45809

今日は主に time.rb でのタイムゾーンの設定についての修正/変更がありました。

akr: r45800 2014-05-04 03:11:53 +0900

標準添付ライブラリ time.rb の Time.rfc2822 の year の推測方法の修正と Time#localtime に指定のタイムゾーンを反映するようにする修正、および Time.xmlschema も Time#localtime にタイムゾーンの指定を反映させるように修正しています。

akr: r45801 2014-05-04 03:27:21 +0900

標準添付ライブラリ time.rb の Time.make_time のタイムゾーン設定処理のリファクタリング

akr: r45802 2014-05-04 03:47:29 +0900

標準添付ライブラリ time.rb の Time.httpdate では常に UTC の Time オブジェクトを返すように Time#utc の呼び出しを追加しています。 rfc2822 の形式をパースしている分岐でだけ Time#utc を呼んでいなかったみたいなので仕様変更というよりは不具合修正のようです。

akr: r45803 2014-05-04 03:47:41 +0900

NEWS ファイルに r45796、r45798、r45800、r45802 などの Time.strptime や Time.rfc2822、Time.xmlschema がシステムのローカルタイム以外のタイムゾーンも正しく解釈して変換した Time オブジェクトを返すことや Time.httpdate が常に UTC を返すようになったことを追記しています。

nobu: r45804 2014-05-04 08:41:04 +0900

test/ruby/test_math.rb で check というメソッド名で定義されていた独自の assertion 用メソッドを assert_float と改名して、check は alias として定義しています。バックトレースからの除外が効くようにするため assert_xxx という名称にする必要があるそうです。

nobu: r45805 2014-05-04 10:23:01 +0900

Math.atan2 の2つの引数にとどちらも Float::INFINITY を渡した時に Math::DomainError 例外を発生させていたのを値(Math::PI / 4.0)を返すように変更しています。 C の atan(3) の C99 での挙動にあわせるようにしているそうです。 [ruby-core:62310] [Feature #9799]

nobu: r45806 2014-05-04 11:41:35 +0900

r45805 の preprocessor の条件分岐にテスト用に常に真になるように "|| 1" を追記していたのをそのままコミットしてしまっていたので削除しています。

akr: r45807 2014-05-04 18:01:19 +0900

標準添付ライブラリ time.rb に頻出してた zone が UTC でない時に Time#localtime でタイムゾーンを設定する処理を Time.force_zone! というメソッドに抽出しています。また標準添付ライブラリ rss で定義している Time.w3cdtf でも Time.force_zone! を利用するようにリファクタリングしています。

akr: r45808 2014-05-04 20:52:26 +0900

Time.force_zone! で Time#localtime でタイムゾーンを設定する際、一度無引数で Time#localtime を呼んでから zone が UTC でない時にあらためて引数つきの Time#localtime を呼ぶように変更しています。なんでかなーとしばらく考えていたのですが、UTC(標準時)と時差はない(offset は同じ)けど異なるタイムゾーンも存在する(GMT など)ので、それらが UTC になってしまうのを避けるためではないかと思います。

nobu: r45809 2014-05-04 22:04:37 +0900

インタプリタの初期化時に Init_BareVM() で Init_heap() よりも前に rb_hash_new() を呼び出してしまっていたので、VM が内部的に利用するオブジェクトを確保する処理を Init_vm_objects() として切り出して Init_heap() の後に呼び出すように修正しています。よく動いてましたね。あと Init_top_self() からも内部的な配列オブジェクトの確保を Init_vm_objects() に移動しているのですが、この Init_top_self() はどこから呼ばれているのか…。