ruby-trunk-changes r58488 - r58492

今日は newhash 命令の最適化のリベンジがありました。

stomar: r58488 2017-04-27 05:09:34 +0900

Warning.warn の rdoc 用コメントのちょっとした修正。

svn: r58489 2017-04-27 05:09:35 +0900

version.h の日付更新。

nobu: r58490 2017-04-27 05:13:07 +0900

r58487 の Warning#write メソッドの追加を revert して Warning::buffer という String を継承した内部的クラスを導入して(名前が大文字で始まってないので定数から参照できない)、そこに write メソッドを追加して、 rb_str_tmp_new() で生成した一時的文字列オブジェクトの klass をこの内部的クラスにしてから rb_io_puts() を使って複数行の文字列を1つの String オブジェクトに組み立ててから rb_write_warning_str() を呼ぶようにしています。うーん細かい。 [ruby-core:80875] [Feature #12944]

normal: r58491 2017-04-27 12:16:39 +0900

rb_provide() で rb_fstring_cstr() を使って fstring を、rb_require() では rb_str_new_cstr() で静的 String オブジェクトを利用するようにして object slot を消費しないようにしています。

shyouhei: r58492 2017-04-27 13:21:04 +0900

r58427 で導入して、GC 回りで不具合があったので r58463 で一旦 revert した newhash 命令の最適化を再度入れています。 要素を1つずつ insert せずに rb_hash_bulk_insert() という関数で C 関数レベルで一度に要素をセットした Hash を作るようにしています。はじめから必要な要素数に見当ったサイズのテーブルを作っておいてから最後に rehash するようにしています。最後の rehash つきでもこっちのほうが速いのか(特に大きな Hash リテラルの場合)。 https://github.com/ruby/ruby/pull/1600