ruby-trunk-changes r46950 - r46960

今日はメモリ確保+クリアをまとめて行う ZALLOC()/ZALLOC_N() というマクロの導入や、引き続いての構造体サイズの削減などがありました。

normal: r46950 2014-07-26 05:57:02 +0900

symbol.c で if のブロックの閉じかっこのあとに不要なセミコロン(空文)があったところがあったので削除しています。

svn: r46951 2014-07-26 05:57:15 +0900

version.h の日付更新。

normal: r46952 2014-07-26 06:34:35 +0900

ALLOC()/ALLOC_N() と MEMZERO() でのクリアを同時に行う ZALLOC()/ZALLOC_N() というマクロを導入しています。 xcalloc() を使うことでコードサイズの縮小を狙っているとのこと。拡張ライブラリ書く人にも関係します、が過去のバージョンでもビルドできるようにすることを考えると互換性のための自前の定義などが必要になるのですぐには利用しにくいでしょうね。 [ruby-core:63951] [Feature #10082]

normal: r46953 2014-07-26 06:36:58 +0900

r46952 の ChangeLog エントリに ML とチケットの番号の参照を追記しています。

normal: r46954 2014-07-26 06:47:20 +0900

parser.y の struct parse_params のメンバの順番をいれかえて効率よくパックされるようにして構造体サイズを減らしています。

nobu: r46955 2014-07-26 13:10:25 +0900

r46924 および r46928 の sizes.c の生成のためのルールの記法の nmake 対応で、結局 r46924 を revert しています。が先頭の "$" が残ってますね。 nmake 死すべし、とのことです。 nmake...

nobu: r46956 2014-07-26 15:16:19 +0900

r46955 で消しきれてなかった "$" を消しています。

normal: r46957 2014-07-26 16:30:26 +0900

構造体 rb_iseq_t をさらに iseq_size と line_info_size の型をそれぞれ long と size_t から unsigned int に変更することでサイズ削減しています。 命令列のサイズの上限が 4GB までになるということですが、まあ充分でしょ、ということです。

normal: r46958 2014-07-26 16:57:44 +0900

構造体 struct iseq_compile_data_storage でも pos, size を unsigned long から unsigned int に変更し、さらに別途メモリ領域を確保してそのポインタを buff に保持するようにしていたのを、char buff[1] のような配列として宣言しておいて必要なサイズのぶんこの構造体につけたしてまとめてメモリ確保するようにしてサイズを削減しています。 C ではよくやる手法ですが、いやーすごい執念だなぁ。

shyouhei: r46959 2014-07-26 17:28:05 +0900

拡張ライブラリ objspace の ObjectSpace.dump で全オブジェクトの情報を dump する時に、dump_append() に fflush() があるため1byte 出力するごとに system call が呼ばれて非常に非効率的だったそうで、fflush() の呼び出しを削除しています。

nobu: r46960 2014-07-26 19:06:49 +0900

r46958 の struct iseq_compile_data_storage の型の変更に伴なう追加修正だと思いますが、メモリ確保時にサイズの上限が INT_MAX を越えていないことをチェックするようにしています。