今日は拡張ライブラリ thread の組み込みクラス化や文字列リテラルの freeze 化の実験用に RubyVM::InstructionSequence.compile_option= にオプション追加などがありました。
ko1: r51659 2015-08-22 05:47:53 +0900
将来(3.0)文字列リテラルが freeze される(fstring になる)構想があり、その検証のために RubyVM のコンパイルオプション RubyVM::InstructionSequence.compile_option = {frozen_string_literal: true} というのが追加されています。このオプションを指定した後で eval とか require でロードされたスクリプトは文字列リテラルが最初から freeze された状態になります。なおこれはお試しのためなのできちんと動作確認がされているわけではないと思います。ちなみに設定はできるものの RubyVM::InstructionSequence.compile_option で取得してもまだ :frozen_string_literal オプションは表示されません。 [Feature #11473]
ko1: r51660 2015-08-22 08:36:23 +0900
拡張ライブラリ thread の Queue, SizedQueue, ConditionVariable などを thread_tools.c に移動して ruby core の組み込みクラスに昇格しています。 ext/thread は互換性のため require はできるように残されていますが、からっぽの拡張ライブラリになっています。 また Mutex は Thread::Mutex に移動されています。 ::Mutex にも別名として代入されているので、これまで通り ::Mutex も使えます。 [ruby-core:57256] [Feature #8919]
svn: r51661 2015-08-22 08:36:41 +0900
r51660 で追加されたファイルの svn property 設定。
nobu: r51663 2015-08-22 11:05:57 +0900
構造体 struct rescue_funcall_arg に defined_class と me メンバを追加して check_funcall_exec() および check_funcall_missing() で method entry の探索を1回にまとめて結果を使いまわすようにしています。
nobu: r51664 2015-08-22 14:43:59 +0900
r51663 の追加で struct rescue_funcall_args に th メンバも追加して check_funcall_exec() で GET_THREAD() のかわりにこの構造体メンバから rb_thread_t を取得するようにしています。ここが切り替わってる可能性ってあるんでしょうか…。
nobu: r51665 2015-08-22 15:43:14 +0900
さらに r51663 と r51664 の続きで struct rescue_funcall_args に respond と respond_to_missing という bit field メンバを追加して check_funcall_missing() での basic_obj_respond_to_missing() の結果を使いまわすようにしています。 またこのために basic_obj_respond_to_missing() の戻り値が method entry がみつからない時に Qfalse でなく Qundef を返すように変更されています。この対応で method_missing 関連のコードも変更されています。
nobu: r51666 2015-08-22 15:45:44 +0900
Symbol#inspect の実装 sym_inspect() で引数を上書きしていたのを str 変数に最初に代入しておくようにしたり共通部分を分岐の外に括り出すなどのリファクタリング。
nagachika: r51667 2015-08-23 03:11:47 +0900
svn: r51668 2015-08-23 03:12:12 +0900
version.h の日付更新。