Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2014-08-27 ruby-trunk-changes r47291 - r47301

[][]ruby-trunk-changes r47291 - r47301

今日は win32ole の VT_DATE の変換の精度向上の他は、リファクタリング的な変更が主でした。

hsbt: r47291 2014-08-26 22:30:35 +0900

r47251 と r47263 で削除した test_complex.rb と test_rational.rb から削除したコメントアウトされた assertion のうち通るものを追加しています。

normal: r47292 2014-08-27 08:00:37 +0900

rb_iseq_t の line_seq_table のメモリを確保するのに ruby_xrealloc() を使っていたのを REALLOC_N() に変更して、サイズがオーバフローした時のチェックを強化しています。

svn: r47293 2014-08-27 08:00:47 +0900

version.h の日付更新。

nobu: r47294 2014-08-27 08:24:52 +0900

r47292 の再修正。 REALLOC_N() は変数への代入も含んだマクロなので(再代入前の解放も含んでるからですね)、代入は不要だったので削除しています。

hsbt: r47295 2014-08-27 09:58:16 +0900

Complex と Rational のテスト test_complex.rb と test_rational.rb で mathn が $LOADED_FEATURES に追加されているかどうかで分岐していたところが不要になったので削除しています。

nobu: r47296 2014-08-27 11:10:22 +0900

parse.y の coverage() で内部的に一時バッファとして利用する配列を確保するのに自前で処理を書いてたのを rb_ary_tmp_new_fill() を呼び出すようにリファクタリングしています。

suke: r47297 2014-08-27 19:57:28 +0900

拡張ライブラリ win32ole で VT_DATE 型の WIN32OLE のオブジェクトから millisecond の精度までを Time オブジェクトに変換するようにしています。

hsbt: r47298 2014-08-27 21:10:21 +0900

標準添付ライブラリ drb, irb, net/telnet, rdoc, thwait などで Module#attr を利用していたところを attr_reader を利用するように変更しています。 Module#attr、そういうのもあったなぁと思ったら deprecated になっていたようです。 [ruby-core:64582] [Feature #10172]

hsbt: r47299 2014-08-27 21:21:41 +0900

標準添付ライブラリ drb, erb, observer, rake, rubygems, uri文字列リテラル内の #{expr} と埋め込みされてるところで to_s が明示的に呼ばれているのをやめるようにしています。文字列リテラル内の埋め込みでは暗黙のうちに to_s で変換されるので不要です。 [ruby-core:64584] [Feature #10174]

kazu: r47300 2014-08-27 23:06:58 +0900

r47287 の ChangeLog エントリで理由を修正しています。builddir が srcdir と違うという条件ではなくて、srcdir が絶対パスの時に失敗するというものでした。

glass: r47301 2014-08-27 23:36:25 +0900

標準添付ライブラリ tempfile で require "thread" していたのを削除しています。既に利用していないので不要だったとのこと。

2014-08-26 ruby-trunk-changes r47275 - r47290

[][]ruby-trunk-changes r47275 - r47290

今日は IO のブロックつきメソッド(最後に IO を閉じるもの)が例外を握り潰してしまうことがある不具合の修正や、標準添付ライブラリ mathn の deprecated 化と整理などがありました。

nobu: r47275 2014-08-25 23:55:31 +0900

r45508 の __builtin_longjmp() の変更について ChangeLog エントリに書いていた clang のバージョン情報を修正しています。 5.1 というのは Apple 版のバージョンで llvmsvn 上は 3.4 に相当するバージョンだったとのこと。

hsbt: r47280 2014-08-26 09:25:27 +0900

標準添付ライブラリ mathn.rb のコメントアウトされていたコードを削除しています。

svn: r47281 2014-08-26 09:25:38 +0900

version.h の日付更新。

hsbt: r47282 2014-08-26 09:31:00 +0900

2.2 からは標準添付ライブラリ mathn は deprecated として require すると(-w や -v オプションつきだと)警告が出るようにしています。悪名高い mathn (require すると数値演算の仕様が変化するためわかりにくい問題を引き起こすことがよくあった)がついに消えるのかー(まだ消えない)。 [ruby-core:64553] [Feature #10169]

hsbt: r47283 2014-08-26 11:39:43 +0900

標準添付ライブラリ thwait の RCS_ID という定数(古えの VCSマクロ置換結果を格納してた)を削除しています。

hsbt: r47284 2014-08-26 11:44:26 +0900

標準添付ライブラリ shell のコメントアウトされていたデバッグ用らしきコードを削除しています。

hsbt: r47285 2014-08-26 12:39:21 +0900

mathn のテストに r47282 の警告追加で結果が変化するところを対応しています。

hsbt: r47286 2014-08-26 13:44:20 +0900

Range のテストでも $VERBOSE 対策として assert_separately の stderr のメッセージを無視するオプションを利用するようにしています。

kazu: r47287 2014-08-26 13:51:19 +0900

template/fake.rb.in のソースディレクトリ取得方法を File.join によるものから File.expand_path による方法に微妙に変更しています。ソースディレクトリ以外でビルドしている場合のエラー対策とのことですが symbolic link がからむ時の対応とかかな…?

[追記]どうやら @srcdir@ のソースディレクトリ絶対パスで取れてしまった時にエラーになったということだそうで、configure を呼ぶ時のパスの指定方法によるのかもしれない、ということでした。そういえば configure は ../ruby/configure みたいにビルドディレクトリからの相対パスで呼ぶようにしてますね。[/追記]

nobu: r47288 2014-08-26 17:12:48 +0900

IO#write で書き込むファイルの存在するディスクがディスクフルでも、Errno::ENOSPC が発生せずになにごともなくかえってきてしまうという不具合を修正しています。 io_close() で rb_rescue() を使って IO#close の呼び出しする時にその時に発生中の例外などを握り潰してしまっていたので、"closed stream" というメッセージをもつ IOError 例外のみ吸収するようにチェックを厳密にしています。 [ruby-core:64463] [Bug #10153]

akr: r47289 2014-08-26 20:48:21 +0900

Time.at に Float を渡して、その結果作成された Time オブジェクトの to_f メソッドを呼ぶと元の Float と一致しない、というのに対処。Time の内部表現が Rational の時の変換を Rational のまま除算してから Float に変換するようにして精度を保つようにしています。 参照されているチケットの元々の報告については Reject されていますが、コメントにあった内容に対応しています。 [ruby-core:64369] [Bug #10135]

nobu: r47290 2014-08-26 21:07:57 +0900

標準添付ライブラリ mathn から累乗(** 演算子)の alias power! の定義や独自の "**" 演算子の再定義などを削除しています。これは昔 Complex や Rational が組み込みでなかった時に追加するためにあったものが、既に不要になったのに残ってたみたいですね。 [ruby-core:63973] [Bug #10086]

2014-08-25 ruby-trunk-changes r47269 - r47274

[][]ruby-trunk-changes r47269 - r47274

今日はおもにリファクタリング的な変更のみでした。

normal: r47269 2014-08-25 11:24:10 +0900

rb_iseq_location_t の first_lineno メンバの型を size_t から VALUE に変更しています。けどセットしているところしか弄ってなくて使ってるところが変更されてないなぁ…と思ったら rb_iseq_first_lineno() は VALUE 型として first_lineno を返していたので、元々型が間違ってた(食い違ってた)ということみたいですねぇ。コミットログをみると rb_iseq_build_for_ruby2cext() は experimental な関数ということなのでここはほとんど使われてなかった模様。

svn: r47270 2014-08-25 11:24:22 +0900

version.h の日付更新。

nobu: r47271 2014-08-25 12:56:53 +0900

標準添付ライブラリ logger で出力するメッセージの時刻の microsecond を strftime の "%N" 指示子を使って出力するようにしています。 https://github.com/ruby/ruby/pull/704

nobu: r47272 2014-08-25 13:03:33 +0900

r47271 の続きで、標準添付ライブラリ logger のメッセージに含める日付の文字列の生成の条件分岐を || 演算子でまとめてより短く書くようにしています。

nobu: r47273 2014-08-25 16:29:50 +0900

標準添付ライブラリ uriURI.decode_www_form_component で % のあとに16進数2文字が続かないような部分文字列があった時にエラーにするための正規表現を否定先読みを使って書くようにして正規表現をシンプルに、効率的にしています。

suke: r47274 2014-08-25 20:18:17 +0900

拡張ライブラリ win32ole で引数文字列が tainted だった時の $SAFE > 0 の時の SecurityError 発生の修正。といっても元々あった処理のメッセージの変更と SafeStringValue() を使っていたため自前の例外発生処理にくる前に例外が発生してしまっていたところを StringValue() を使うように修正するものです。

2014-08-24 ruby-trunk-changes r47260 - r47266

[][]ruby-trunk-changes r47260 - r47266

今日は benchmark ライブラリの時刻取得方法の効率化などがありました。

normal: r47260 2014-08-24 11:03:06 +0900

標準添付ライブラリ benchmark で時間をはかるのに Time.now による時刻ではなく Process.clock_gettime を利用するようにしています。 Time.now はシステムの時計の調整で歪む可能性がありますが、Process.clock_gettime の CLOCK_MONOTONIC もしくは CLOCK_REALTIME のどちらかを利用するようにしています。 チケットをみると精度の問題というより Time.now でオブジェクトが生成されるので速度や GC 圧力になることを避けるのが主目的みたいですね。 [ruby-core:64511] [Feature #10165]

svn: r47261 2014-08-24 11:03:17 +0900

version.h の日付更新。

normal: r47262 2014-08-24 11:10:28 +0900

r47260 の追加修正で benchmark で measure メソッドでも Time.now のかわりに Process.clock_gettime を使って時刻を取得するようにしています。 [ruby-core:64511] [Feature #10165]

hsbt: r47263 2014-08-24 11:44:34 +0900

test/ruby/test_rational.rb のコメントアウトされていた assertion やテストメソッドを削除しています。 ふーむ、これいらないのかなぁ。

hsbt: r47264 2014-08-24 11:47:59 +0900

test/ruby/test_rational.rb のインデント修正のみ。

hsbt: r47265 2014-08-24 12:45:03 +0900

test/ruby/test_complex.rb に Complex や Rational が組込みになる前のものと思われる条件分岐があったので削除しています。

hsbt: r47266 2014-08-24 16:16:25 +0900

古くからある標準添付ライブラリのいくつかにあったインスタンス変数 @RCS_ID を削除しています。 これは古えの VCS による置換マクロを利用したバージョン情報の埋め込みですね。

2014-08-23 ruby-trunk-changes r47257 - r47259

[][]ruby-trunk-changes r47257 - r47259

今日はリファクタリングが少しだけでした。

nobu: r47257 2014-08-23 11:52:23 +0900

ruby.c の process_options() で RARRAY_ASET() の引数関数呼び出しなどを渡していたため、マクロ展開時に RARRAY_PTR_USE_START() から RARRAY_PTR_USE_END() の間に処理が沢山入ってしまうので、あらかじめ引数に渡す値を変数に入れておくようにしています。現状の RARRAY_PTR_USE() の処理をみて、特にここで処理が多いと困る点は見受けられませんでしたが、一般的にマクロ引数は複数回評価されたりする可能性を考慮して関数呼び出しなどの式は避けるほうがいいのでそういうことかもしれません。

svn: r47258 2014-08-23 11:52:34 +0900

version.h の日付更新。

nobu: r47259 2014-08-23 22:32:32 +0900

win32/win32.c の cmdglob() でバッファ内の文字を変換する処理を translate_char() という既に存在していた inline 関数を利用するようにリファクタリングしています。