ruby-trunk-changes r54661 - r54706

今日はメモリ確保の処理の最適化や WEBrickSSL 関連オプションの追加、at_exit の不具合修正などがありました。

naruse: r54661 2016-04-22 05:59:39 +0900

gc.c のメモリ確保関係の関数群で確保するサイズが負になってないかのチェックを重複していた場合があるので、整理して objspace_xmalloc() でチェックして、チェックなしの objspace_xmalloc2() という関数を導入しています。また include/ruby/ruby.h で定義していた inline 関数の ruby_xmalloc2_size() のオーバフローチェックに使っていた定数を unsigned の SIZE_MAX から SSIZE_MAX に修正しています。

naruse: r54662 2016-04-22 05:59:39 +0900

internal.h から include/ruby/ruby.h に LIKELY() と UNLIKELY() マクロを移動しています。

svn: r54663 2016-04-22 05:59:40 +0900

version.h の日付更新。

naruse: r54664 2016-04-22 05:59:40 +0900

r54661 と同様に rb_alloc_tmp_buffer() のサイズチェック部分を省いた rb_alloc_tmp_buffer_with_count() という関数を切り出して rb_alloc_tmp_buffer2() で利用するようにしています。メモリ確保の最適化のためみたいです。

nobu: r54665 2016-04-22 06:38:21 +0900

spec/default.mspec で同じメソッド呼び出しを繰り返しているところをローカル変数に受けて使いまわすようにしています。

nobu: r54666 2016-04-22 06:59:01 +0900

spec/default.mspec で rubyspec の CAPI のテストのためのディレクトリを OBJDIR という定数で指定するため代入しています。 rubyspec 側でもこの定数を参照するように機能が追加されているようです。 https://github.com/ruby/spec/pull/247

hsbt: r54667 2016-04-22 10:02:01 +0900

benchmark/bm_so_meteor_contest.rb のコメントの typo 修正。 https://github.com/ruby/ruby/pull/1330

hsbt: r54668 2016-04-22 10:43:31 +0900

file.c および win32/file.c で $SAFE の 4以上かどうかのチェックが残っていたので削っています。 https://github.com/ruby/ruby/pull/1327

hsbt: r54669 2016-04-22 10:51:18 +0900

標準添付ライブラリ webrickWEBrick::Config::GenericServer の SSL 関係のオプションに :SSLCiphers を追加し利用する暗号化方式の指定を可能にしています。 https://github.com/ruby/ruby/pull/1321

hsbt: r54670 2016-04-22 11:27:10 +0900

標準添付ライブラリ net/http で httpsSSL ありの GET は今は簡単に URIスキーマhttps にして Net::HTTP.get メソッドで可能になっているので rdoc 用コメントを加筆修正しています。

usa: r54677 2016-04-22 14:52:30 +0900

tool/merger.rb で一時ファイル revision.tmp を削除するようにしています。こんなのできてたっけ…。

usa: r54679 2016-04-22 15:07:19 +0900

tool/redmine-backporter.rb の backport サブコマンドで表示するコマンドラインの merger.rb のパスを Windows 環境では単に "merger" とするようにしています。 usa さん専用ですね。

nobu: r54681 2016-04-22 15:09:29 +0900

at_exit で登録したプロセス終了時に実行するブロック内で例外発生と rescue 節での捕捉を行うと errinfo が上書きされてしまう不具合を修正しています。うーんなるほど。そんなことするなよ……と思わなくもなかったのですが、終了時に止まる原因になった例外を使ってなにかしたいというのは確かにありそう。 [ruby-core:75038] [Bug #12302]

nobu: r54682 2016-04-22 15:14:21 +0900

拡張ライブラリ tk の extconf.rb で並列ビルド時にプログレス表示を抑制するために MAKEFLAGS 環境変数をみるということをしています。

nobu: r54699 2016-04-22 18:45:24 +0900

r54144 の ChangeLog エントリの typo 修正。

naruse: r54700 2016-04-22 18:47:34 +0900

struct gen_ivtbl::numiv は 32bit に収まらないといけないのに long 型を使っていたので uint32_t に変更しています。混乱を避けるためとあるので実際に超えてしまってたというわけではなさそうです。

nobu: r54701 2016-04-22 19:04:47 +0900

r54700 の追加修正。 gen_ivtbl_dup() と rb_ivar_set() で明示的なキャストと変数の型の変更などを追加しています。

nobu: r54703 2016-04-22 20:34:05 +0900

Time#asctime と Time#ctime の rdoc 用コメントの用例に ctime の例も追記しています。 [ruby-core:75126] [Bug #12310]

naruse: r54704 2016-04-22 20:42:31 +0900

整数の乗算のオーバフローチェックをする関数 rb_mul_size_overflow() を include/ruby/ruby.h で inline 関数として導入して rb_alloc_tmp_buffer2() で使うようにしています。 またこれにより xmalloc2_size() は gc.c に移動して同じく rb_mul_size_overflow() を呼ぶようにしています。その LONG_LONG または uint128_t がある環境ではこれを使って乗算した結果が元の型での最大値を超えてないかをチェックすることで除算なしでオーバフローチェックするようにしています。除算の命令は遅いのでそれを避けることによる最適化と思われます。

akr: r54705 2016-04-22 20:44:34 +0900

Array#sum の rdoc 用コメントに配列の要素が数値以外のオブジェクトでも使えるのでその例を追記しています。

akr: r54706 2016-04-22 21:20:06 +0900

Time のテストから Europe/Moscow のタイムゾーンを利用したものを削除しています。 tzdata のパッケージに修正があり、 Europe/Moscow のタイゾーンで過去の時刻が DST (いわゆる夏時間)の処理の間違いがあったのが修正された? らしく、過去の時間にずれが発生してしまった影響を受けてしまったので、テストを削除したようです。こんなことがあるんですね… (参考URL: tz の修正。https://github.com/eggert/tz/commit/8ee11a301cf173afb0c76e0315b9f9ec8ebb9d95 )