ruby-trunk-changes r48867 - r48879

今日は先日の r48748 あたりの Struct の高速化のためのしくみのリファクタリングや、最適化命令による不具合を回避するための変更などがありました。

usa: r48867 2014-12-17 01:08:16 +0900

拡張ライブラリ win32 の Win32API.rb で引数に引数を * で配列展開して渡さないといけないところがそのまま渡されていたのを修正しています。 git の履歴だと r41936 で dl/fiddle から移動してきた時からなので結構前から壊れてたみたいですね。

svn: r48868 2014-12-17 01:08:28 +0900

version.h の日付更新。

normal: r48869 2014-12-17 09:54:13 +0900

文字列の freeze や Hash の [] のアクセスの最適化命令がブロック渡しされている場合にそれを打ち消してしまうらしいので、ブロック付きのこれらのメソッド呼び出しは(実際にメソッドが再定義されているかどうかにはかかわらず)コンパイル時に最適化命令を生成しないようにしています。うーむ、よくぞリリース前にこれ気がついてくれましたね。 Thank you Bartosz!! [ruby-core:66595] [Bug #10557]

ko1: r48870 2014-12-17 10:20:22 +0900

r48869 の続きで、さらに specialized_instructions というコンパイルオプション(実は RubyVM の命令列へのコンパイルにはオプションがあるのです)をチェックして、これが有効な時だけ最適化命令を生成するようにしています。

hsbt: r48871 2014-12-17 10:50:14 +0900

拡張ライブラリ gdbm の each_key が Enumerator を返すかどうかというテストを追加しています。 https://github.com/ruby/ruby/pull/783

nobu: r48872 2014-12-17 11:52:19 +0900

r48851 の Struct の高速化のための ISeq 生成の処理で caller_location() という関数を切り出したものに、さらに絶対パスを返させて prepare_iseq_build() への引数に使うようにしています。

nobu: r48873 2014-12-17 11:57:51 +0900

rb_iseq_new_with_opt() で option 引数が NULL だった時にデフォルトのコンパイルオプションを参照するようにしています。 だいたい渡されてそうなのですが compile.c の method_for_self() という関数から呼び出される時は 0 が渡されています。これ親から引き継げたほうがいいんじゃないかなぁと思いますが、Struct の最適化のために動的に呼ばれている部分なので引き継げないんですね…。

nobu: r48874 2014-12-17 11:57:53 +0900

compile.c の static 関数 iseq_set_local_table() の第2引数 ID *tbl に const を追加しています。

nobu: r48875 2014-12-17 12:08:20 +0900

vm.c の rb_vm_get_binding_creatable_next_cfp(), rb_vm_get_ruby_level_next_cfp(), vm_get_ruby_level_caller_cfp() および vm_insnhelper.c の vm_get_ruby_level_caller_cfp() などの関数の rb_thread_t * の引数に const を付加しています。

nobu: r48876 2014-12-17 12:20:58 +0900

Struct のattribute アクセスの高速化のために ISeq を生成する関数を iseq.c から compile.c に移動して、Array を作って rb_iseq_build_from_ary() でロードするのではなくて通常のコンパイルと同様に rb_iseq_t のリストを生成するように変更しています。だいぶスッキリしましたね。

nobu: r48877 2014-12-17 17:17:46 +0900

ext/io/console/console.c から古いバージョンとの互換性のための条件コンパイルなどを削除しています。多分 1.8 サポートを止める感じですかね。

nobu: r48878 2014-12-17 17:17:49 +0900

ext/io/console/io-console.gemspec のバージョンを 0.4.2 から0.4.3 に上げています。

kazu: r48879 2014-12-17 20:12:23 +0900

r48866 での NEWS ファイルの更新の typo 修正。