ruby-trunk-changes r58583 - r58591

今日は Integer の round/floor/ceil/truncate などの数値を丸めるメソッド群に引数で小数点以下の桁数を指定した時にも Integer を返すようにする仕様変更がありました。

nobu: r58583 2017-05-06 23:12:30 +0900

r58573 で $(arch) 毎の timestamp ファイルをサブディレクトリにネストさせるようにしましたが、初回のビルド時にサブディレクトリがなくてエラーになるので ${MAKEDIRS} コマンドの実行を追加しています。

nobu: r58584 2017-05-07 00:14:58 +0900

拡張ライブラリ ripper の Ripper.tokenize でネストしたインデント除去つきヒアドキュメントの要素に削ったインデント分の空白が含まれないという不具合を修正しています。 [ruby-core:80977] [Bug #13536]

svn: r58585 2017-05-07 00:14:59 +0900

version.h の日付更新。

stomar: r58586 2017-05-07 04:58:12 +0900

Integer#round, Integer#floor, Integer#ceil, Integer#truncate などで引数で丸める桁数を指定した時に、Float に変換せずにそのまま Integer を返すようにしています。 Integer を Float にした時に精度が足りずに値が変化してしまうのを避けるためだそうです。とはいえ仕様変更ですね。 [ruby-core:80645] [Bug #13420]

normal: r58587 2017-05-07 13:26:37 +0900

autoload による複数 Thread からの暗黙の require のための排他処理で別 Thread の load 処理待ちのために rb_thread_sleep_deadly() で待っているあいだに非同期な例外などで止められた時に待ちリストからエントリを削除するようにしています。これはデバッグ難しそうでしたね。 [ruby-core:81016] [Bug #13526]

svn: r58588 2017-05-07 13:26:38 +0900

r58587 で新規追加したファイルの svn property 設定。

stomar: r58589 2017-05-07 16:18:10 +0900

NEWS ファイルに r58586 での Integer#round, #floor, #ceil, #truncate の仕様変更について追記しています。 [ruby-core:80645] [Bug #13420]

normal: r58590 2017-05-07 16:38:30 +0900

IO#fcntl に F_DUPFD_CLOEXEC の値を直接渡して呼び出した時に cloexec フラグを立てた fd の最大値を更新するようにしています。 ruby では IO は明示的に立てないように指定されないと cloexec フラグを立てるようにするので、これによって問題を引き起こすようなコードはなかなか書かないと思いますが、直接 fcntl(3) を使ってフラグを立てた場合が抜け穴になっていたようです。

normal: r58591 2017-05-07 17:06:02 +0900

rb_thread_t::running_time_us の型を unsigned long から uint32_t に変更して常に 32bit だけ用意するようにしています。このメンバーの値は特定の範囲に clamp されるので 32bit で充分とのこと。 M:N モデルにした時にはさらに 16bit にまで抑えるつもりだそうで。