ruby-trunk-changes r45588 - r45592

今日は Enumerable#each_slice、 #each_cons で内部の一時オブジェクト生成抑制による効率化や Windows 版のコマンドライン処理の内部的な変更などがありました。

kazu: r45588 2014-04-14 22:43:10 +0900

r45587 の ChangeLogtypo 修正。

nobu: r45589 2014-04-15 12:49:55 +0900

Enumerable#each_slice と Enumerable#each_cons で渡されたブロックのブロックパラメータが2つ以上の時は内部で一時的に利用しているArrayオブジェクトを使いまわすようにして一時オブジェクトの生成を抑制するようにしています。 https://github.com/ruby/ruby/pull/596

svn: r45590 2014-04-15 12:49:59 +0900

version.h の日付更新。

akr: r45591 2014-04-15 19:29:01 +0900

ext/extmk.rb で extmk.mk の再生成をする時に一時ファイルに書き出してから内容をチェックして rename するようにすることで、複数のプロセスから同時に変更しようとして競合するのを避けるようにしています。 make test-all を並列で動かした時に問題が起きるのに対処しているそうです。

usa: r45592 2014-04-15 19:39:36 +0900

Windows 環境でコマンドライン引数を処理しているとおぼしき rb_w32_cmdvector() という関数を内部的な関数 w32_cmdvector() と改名し、コマンドライン文字列を GetCommandLine() ではなく GetCommandLineW() で取得して const WCHAR * で渡すようにしています。これに対応して引数に code page も追加して、関数内の文字列の比較等の処理も WCHAR * 用のものに変更しています。これによる動作の変化はまだないはず(ないといいなぁ、くらいかも)とのことです。
知らなかったのですが Windows 環境では main() 関数が受け取る argc, argv は rb_w32_sysinit() という関数で独自にコマンドライン文字列から読みとったもので置き換えられているんですね。