ruby-trunk-changes r46876 - r46887

今日は構造体のサイズを小さくする最適化などがありました。

nobu: r46876 2014-07-20 00:32:46 +0900

IO.new の引数の mode の説明の rdoc 用コメントを修正しています。 これ、知らなかったのですが、"a" の append モードって、開いた時に末尾にファイルポインタを移動しておくんじゃなくて、書き込みの都度ファイル末尾への書き込みになるようにしているんですね。ってことは、複数プロセスで開いてた時も(多分ある程度タイミング問題でしょうが)末尾に追記になるんですね。 [ruby-core:63747] [Bug #10039]

svn: r46877 2014-07-20 00:32:58 +0900

version.h の日付更新。

hsbt: r46878 2014-07-20 01:00:51 +0900

拡張ライブラリ thread の undumpable() 関数に rdoc の nodoc タグをつけています。 https://github.com/ruby/ruby/pull/672

hsbt: r46879 2014-07-20 01:10:58 +0900

拡張ライブラリ openssl の OpenSSL::Cipher の rdoc 用コメントのサンプルコードの変数名 typo (?) を修正しています。 https://github.com/ruby/ruby/pull/663

nobu: r46880 2014-07-20 09:13:15 +0900

thread.c の割り込みをチェックする処理が vm_core.h で定義されている RUBY_VM_CHECK_INTS() と全く同じ処理だったのでマクロでおきえています。

normal: r46881 2014-07-20 13:18:49 +0900

鬼雲の構造体 struct re_pattern_buffer のメンバの順番をアライメントを意識して入れ替えて 64bit 環境でのサイズを小さくしています。 しかし "This breaks the ABI" とのこと。ふーむ。 [ruby-core:63708] [Feature #10034]

svn: r46882 2014-07-20 13:18:51 +0900

r46870 の ChangeLog エントリの行末の空白除去。

normal: r46883 2014-07-20 13:18:58 +0900

構造体 rb_io_t のメンバも順序を入れかえて 64bit 環境での構造体サイズを小さくしています。 こちらも ABI の互換性はなくなるとのこと。 [ruby-core:63781] [Feature #10050]

normal: r46884 2014-07-20 13:19:06 +0900

rb_io_buffer_t の宣言に PACKED_STRUCT() をつけて可能ならコンパイラ拡張機能で構造体の padding を抑制してより小さいサイズに詰め込むようにしています。これでこの構造体をキャッシュにのせるためのキャッシュラインがもうひとつ減るのだ、ということで、すごい執念ですね。 [ruby-core:63781] [Feature #10050]

normal: r46885 2014-07-20 13:51:35 +0900

さらに transcode.c の構造体 rb_econv_t もメンバの順序を入れかえてサイズを節約しています。

normal: r46886 2014-07-20 14:34:32 +0900

vm_core.h で定義されている構造体 rb_proc_t の int 型のメンバで決まった小さい範囲(0..3 コメントは 4までになっているけど次で修正されています。)か真偽値しか格納しないため int8_t を使ってサイズを節約するようにしています。ついに型を変えはじめましたね。

nobu: r46887 2014-07-20 21:28:48 +0900

r46886 の rb_proc_t のメンバの型変更で追記したコメントを修正。 safe_level の範囲は今は 0..3 でした。