ruby-trunk-changes r62706 - r62716

今日は ISeq の GC mark の処理を変更して不要な mark 用の Array オブジェクトの保持をやめる変更などがありました。

tenderlove: r62706 2018-03-10 05:11:45 +0900

RubyVM::InstructionSequence (いわゆる ISeq) が保持しているオブジェクトへの参照を GC の mark の対象にするために Array オブジェクトを作って、そこに mark が必要なオブジェクトは入れるようにしていましたが、これをやめて直接 mark するようにしています。このために、命令毎に mark が必要なオブジェクトを operand に持っているかどうかを示すフラグを追加して、mark 時には必要な命令だけ解釈して(decompilation と表現されてるので、デコンパイルして?) mark すべきオブジェクト参照を取り出すようにしています。これでメモリ使用量が抑えられるようになるみたいです。 [ruby-core:84909] [Feature #14370]

svn: r62707 2018-03-10 05:11:46 +0900

version.h の日付更新。

kazu: r62708 2018-03-10 09:33:11 +0900

r62706 の変更の警告除去のため明示的なキャストを追加しています。

kazu: r62709 2018-03-10 09:34:24 +0900

さらに VALUE と int の変換をやめるため rb_vm_insns_translator_t() という関数の返り値の型を int -> VALUE に変更しています。

suke: r62710 2018-03-10 11:16:30 +0900

拡張ライブラリ win32ole のソースコードのヘッダに書かれてた開発元 ActiveWare Internet Corp. が今は ActiveState Tool Corp. という名前に変わっていたそうで、名前と web サイトの URL を変更しています。

suke: r62713 2018-03-10 15:46:01 +0900

r62710 のコメントの typo 修正。

k0kubun: r62714 2018-03-10 16:05:32 +0900

mjit.c の worker() で終了時に worker_finished という変数に TRUE をセットするところで mutex で排他処理していたのをやめています。 mjit_finish() でここで lock しようとしてた mutex を pthread_mutex_destroy() しようとしてエラーになることがあるらしく、それを避けるためにとのこと。ふーむ、いいのかな。まあでも他で worker_finished を参照しているところは排他していないので condition variable として使っているわけでもなさそうなので良いのかな。上のほうの pch_status == PCH_FAILED のところではまだロックを取っているけど、ここは mjit_client_wakeup で rb_native_cond_wakeup() を呼んでいるので必要なのかな。しかし mjit_client_wakeup という変数で wait してるところをみるとチェックしている変数は in_jit という変数みたいだから、こっちもロックと rb_native_cond_wakeup() を消していいのではないかな。

nobu: r62715 2018-03-10 19:36:35 +0900

Signal.trap で文字列を渡した時に NUL 文字が含まれていたら ArgumentError を発生させるようにしています。

nobu: r62716 2018-03-10 20:26:54 +0900

signal.c の signm2signo() という関数を強化してシグナルを指定する名前の文字列 or Symbol から名前を正規化して文字列にし、またシグナル番号を int で返すようにして、各所で利用するようにしています。エラーメッセージを良くするためみたいですね。