ruby-trunk-changes r57908 - r57960

今日は File.join でデリミタを決める仕様の変更や Vm 命令列コンパイル時の最適化などがありました。

nobu: r57908 2017-03-12 22:51:12 +0900

compile.c の compile_colon2() を compile_const_prefix() と文法上の見た目ではなく意味を元にした名前に変更して、呼び元でエラーチェックをするように修正しています。

naruse: r57942 2017-03-13 03:31:38 +0900

tool/redmine-backporter.rb で Backport フィールドの対象のバージョンのエントリがない時にも DONE を埋めるようにしています。

svn: r57943 2017-03-13 03:31:39 +0900

version.h の日付更新。

naruse: r57944 2017-03-13 03:40:07 +0900

IO#puts の rdoc 用コメントで内部で print を呼び出すと書かれていのを現状にあわせて write メソッドを呼ぶと記述を修正しています。また特殊変数 $/ をデリミタとして使わないことを明記しています。

nobu: r57946 2017-03-13 09:11:24 +0900

0..10 みたいな開始も終了もリテラルのみからなる Range リテラルで値がすぐに捨てられてしまうものはそもそもオブジェクト生成しないように VM 命令列へのコンパイル時に最適化するようにしています。

nobu: r57947 2017-03-13 09:11:25 +0900

iseq_compile_each0() で flip flop 演算子コンパイル時に compile_branch_condition() を呼んでいたのを compile_flip_flop() を呼ぶように書きかえています。そうすると compile_branch_condition() の中での NODE_FLIP2/NODE_FLIP3 の分岐は不要になるのかなぁ。

nobu: r57948 2017-03-13 11:14:15 +0900

rb_thread_fd_close() を DEPRECATED_INTERNAL_FEATURE() で呼ぶとエラーにするようにしています。r57422 で削除されたのですが abi check でエラーになるので宣言は戻したということみたいですね。なるほど…。 [ruby-core:80078] [Bug #13304]

nobu: r57949 2017-03-13 12:30:11 +0900

r57948 の続きで rb_thread_fd_close() は異常終了するので NORETURN() でマークしています。

nobu: r57950 2017-03-13 14:30:44 +0900

r57948 と r57949 の deprecate した rb_thread_fd_close() の定義はやめて while (rb_notify_fd_close(fd)); の実装に戻しています。 ABI の互換性のためにインタフェースだけ戻しても呼べなくては意味がないってことですかね。 [ruby-core:80078] [Bug #13304]

mrkn: r57951 2017-03-13 15:03:18 +0900

拡張ライブラリ bigdecimal を upstream から 1.3.2 をマージしています。差分 https://github.com/ruby/bigdecimal/compare/v1.3.1...v1.3.2 BigDecimal と Float/Rational を比較すると時々間違った結果になるケースが存在するという不具合を修正しています。 [ruby-core:79603] [Bug #13232]

nobu: r57955 2017-03-13 17:38:12 +0900

ブロック引数を指定する引数の前の & についてかっこを使わないメソッド引数で警告を表示するようにしていましたが、その後に続くのが :sym や :"sym" のようなシンボルリテラルだったら警告しないようにしているようです。 [ruby-core:79926] [Misc #13283]

naruse: r57956 2017-03-13 18:05:35 +0900

rubygem の Gem::Specification._latest_specs で specs に nil が混っていることがあるそうで、デバッグのためにチェックして明示的に Gem::Exception 例外を発生させるようにしています。

nobu: r57958 2017-03-13 18:12:05 +0900

Init_String() で特殊変数 $; (ファイルパスのデリミタ)の rb_fs を GC の root として登録するようにしています。つまり $; に文字列を代入して他から参照していないと GC されてエラーになる可能性があるのですね。 [ruby-core:79582] [Bug #13223]

nobu: r57960 2017-03-13 18:29:19 +0900

File.join で常にファイルパスを "/" で連結するようにして File::SEPARATOR や File::Separator は参照しないようにしています。 [ruby-core:79579] [Bug #13223]