ruby-trunk-changes r51003 - r51015

今日は拡張ライブラリ socket でのマシンスタックの節約や fstring の生成時に静的文字列を利用できるようにして細かいメモリ最適化などがありました。

normal: r51003 2015-06-24 08:40:53 +0900

拡張ライブラリ socket の bsock_recvmsg_internal() で max のサイズが小さい時用にマシンスタック上に大きな配列を2つ確保していて 8KB も使ってしまっていたので、常に rb_str_tmp_new() を使って一時利用のバッファを確保するように修正しています。 [ruby-core:69595] [Feature #11263]

svn: r51004 2015-06-24 08:41:30 +0900

version.h の日付更新。

normal: r51005 2015-06-24 09:24:32 +0900

r50758 での即値のオブジェクトのインスタンス変数テーブル generic_ivar_tbl の対応削除で消し忘れていた分岐を削除しています。 [ruby-core:69715] [Feature #11299]

hsbt: r51006 2015-06-24 12:21:21 +0900

MatchData#to_a や Regexp#match などの rdoc 用コメントで C のコメントの文法との衝突とをさけるための workaround を変更したり、サンプルを追加したりしています。 https://github.com/ruby/ruby/pull/937

nobu: r51007 2015-06-24 12:47:10 +0900

r47640 で追加した rb_str_new_literal() などの静的文字列を wrap した文字列オブジェクトを作成するマクロからさらに rb_str_new_lit() などのマクロを切り出しています。 mruby の変更に追随しているそうです。

nobu: r51008 2015-06-24 12:47:37 +0900

r51007 で追加した rb_strlen_lit() マクロを利用して rb_fstring_literal() というマクロも定義して、GC::OPTS への文字列の追加で利用するようにしています。単に frozen string ではなく静的領域の文字列を利用した String オブジェクトをつっこむようにしてさらにメモリを削減するようにしています。

nobu: r51009 2015-06-24 12:50:56 +0900

rb_fstring_cstr() という C の文字列(NUL 文字で終端している) から frozen String を作成する API を追加しています。

ko1: r51010 2015-06-24 14:30:27 +0900

RubyCI でたまに GC 関連の不具合と思われる rb_bug() で落ちることがあるのに対して gc_mark_ptr() にチェックコードを追加しています。 [ruby-dev:49049] [Bug #11244]

normal: r51011 2015-06-24 16:17:44 +0900

rb_str_justify() で変数 pad に volatile をつけていたのをやめて RB_GC_GUARD() で最適化から保護するようにしています。

ko1: r51012 2015-06-24 16:56:52 +0900

r51010 の続きで gc_mark_children() にもデバッグ用のチェックコードを追加しています。 [ruby-dev:49049] [Bug #11244]

nobu: r51013 2015-06-24 17:28:47 +0900

load.c の rb_feature_provided() で変数 fullpath に volatile 修飾子をつけていたのを RB_GC_GUARD() を使って最適化から保護するようにしています。

nobu: r51014 2015-06-24 17:29:03 +0900

rb_attr() で id が Symbol と対応しているかどうかのチェックをしていたのをやめています。ここにくる時点で既にチェック済みのはずで冗長だったようです。

nobu: r51015 2015-06-24 17:31:43 +0900

rb_attr() でスコープの visibility (public, protected, private など)のチェックが何度も現在のスコープの visibility を取得するようになってたので、1回取得してそれで分岐するように最適化しています。