ruby-trunk-changes r37196 - r37227

今日も引き続きメソッド呼び出しの最適化の再修正やベンチマークの表示の変更などがありました。

ko1:r37196 2012-10-16 02:22:57 +0900

昨日の r37180 のコメントで触れたように rb_call_info_t::flags のビットフラグの定数は全て _BIT という suffix がついていたのですが、この suffix を削除しています。

ko1:r37197 2012-10-16 02:40:50 +0900

r37186 で導入したメソッド呼び出しの rb_call_info_t の情報の構築結果をキャッシュして2度目以降はスキップする CI_SET_FASTPATH() マクロを使った処理は OPT_CALL_FASTPATH というマクロが 非0 に定義されていた時だけ有効になるようにしています。今のデフォルトは有効になっています。

ko1:r37198 2012-10-16 06:24:08 +0900

メソッドの種別に VM_METHOD_TYPE_CFUNC_FAST というのを追加しています。これは VM_METHOD_TYPE_CFUNC と同様 C で書かれたメソッドを呼び出しますが、コントロールスタックを積まずに呼ぶので高速に呼べるようようになっています。
rb_method_definition_struct の OPTIMIZED_TYPE に gcc 拡張の書きかたが紛れこんでいるような気が。

ko1:r37199 2012-10-16 06:35:29 +0900

rb_call_info_t::flags に VM_CALL_ARGS_SPLAT が立っていた(メソッド呼び出しの引数に "*" つきの引数があったら)、引数の数のチェックが動的に必要になるので CI_SET_FASTPATH() でショートカットしないようにしています。

ko1:r37200 2012-10-16 06:45:24 +0900

VM_CALLEE_SETUP_ARG() で CI_SET_FASTPATH() を有効にするかどうかのための protected のチェックの条件が反転していたのを修正。

usa:r37201 2012-10-16 09:31:20 +0900

正規表現のテストで警告良けのための $VERBOSE の操作が setup で既にまとめて行なわれていて不要になっていたものを修正しています。

usa:r37202 2012-10-16 09:40:26 +0900

正規表現の文字クラス内の "-" の位置によって出力される警告がリテラルだとパース時に出てしまうため抑制できないので Regexp.new を使って実行時にコンパイルするようにしています。

nobu:r37206 2012-10-16 10:53:32 +0900

file.c の basename などでファイルパスのエンコーディングが ASCII 互換であることをチェックする処理が重複していたので関数としてくくり出すリファクタリングをしています。

nobu:r37207 2012-10-16 10:54:05 +0900

File.join でも r37206 で切り出した関数を使って文字列が ASCII 互換かどうかチェックするようにしています。[ruby-core:48012] [Bug #7168]

nobu:r37212 2012-10-16 11:27:07 +0900

さらに File.join で NUL 文字を含む文字列や文字以外のオブジェクトが渡された場合 to_s して使う動作を考慮するようにしています。 [ruby-core:48012] [Bug #7168]

nobu:r37213 2012-10-16 11:30:20 +0900

File.join の実装で内部的にバッファとして使う文字列オブジェクトの struct RBasic::klass をクリアして ObjectSpace から見えないようにしています。

kazu:r37214 2012-10-16 13:02:01 +0900

r37198 および r37199 の ChangeLog エントリの typo 修正。

kazu:r37215 2012-10-16 13:02:04 +0900

r37193 で test/ruby/envutil.rb に導入した file_assertion を assert_file に再度改名しています。

nobu:r37216 2012-10-16 14:56:25 +0900

File.join で文字列の連結のたびにエンコーディングのチェックをするようにしています。 [ruby-core:48012] [Bug #7168]

ko1:r37224 2012-10-16 22:07:44 +0900

make benchmark でベンチマーク結果の評価、表示などを変更しています。ベンチマークの数回の試行の結果を平均するのではなく最良な結果を採用するようにしています。これは背後で動いているプロセスの存在など外部要因によるノイズにひきずられないようにするためです。その他ディレクトリの指定方法の変更やログファイルパスの表示など。

ko1:r37225 2012-10-16 22:26:46 +0900

make benchmark で複数の実行体でのベンチマークが指定された場合に速度の変化が比として表示されるようにしています。

nagachika:r37226 2012-10-17 00:32:19 +0900

r37198 の method.h の enum の定義から最後の要素のあとのカンマを削除しています。

svn:r37227 2012-10-17 00:32:23 +0900

version.h の日付更新。