ruby-trunk-changes r66219 - r66246

今日は bigdecimal の再更新や、マルチスレッドで Mutex 使いつつ fork した時の不具合修正、RubyVM::InstructionSequence.of で同じオブジェクトには毎回同じ ISeq を返すようにする変更などがありました。

kazu: r66219 2018-12-05 20:20:29 +0900

r65963 の rubygems による実行コマンドを使うようにする変更で libexec/bundle_ruby が追加されてたのを削除しています。いやその後 r65979 でも削除してたからその後の更新でまた追加されちゃったのかな。 [ruby-dev:50663] [Bug #15291]

hsbt: r66220 2018-12-05 20:29:56 +0900

と、思ったら r66219 が revert されて libexec/bundle_ruby 復活しています。なんでだろ。 [ruby-dev:50663] [Bug #15291]

svn: r66221 2018-12-05 20:29:57 +0900

r66220 で復活した libexec/bundle_rubysvn property 設定。

mrkn: r66222 2018-12-05 20:30:24 +0900

拡張ライブラリ bigdecimal の 1.4.0.pre.20181205a をマージしています。BigDecimal.new の廃止などの再度マージと不具合修正が含まれます。

svn: r66223 2018-12-05 20:30:26 +0900

r66222 の svn property 設定。

mrkn: r66224 2018-12-05 20:30:26 +0900

NEWS ファイルに BigDecimal() の exception: キーワード引数について再度追記しています。

ko1: r66226 2018-12-06 01:15:09 +0900

configure.ac で backtrace() 関数のサポート確認のためにコンパイルするソースコードで変数宣言がブロックの途中で現れていてエラーになってたのを修正しています。

svn: r66227 2018-12-06 01:15:13 +0900

version.h の日付更新。

ko1: r66228 2018-12-06 02:23:32 +0900

COLDFUNC という関数定義の attribute に使うマクロを導入してコンパイラがサポートしていたら(今は clang か gcc の 4.3.0 以降という判定のしかた) __attribute__( (cold) ) をつけるようにしています。 rb_bug() や rb_memerror()、rb_warn() の宣言につけています。この関数はあまり呼び出されないことをコンパイラに伝えてコードの locality や、この関数を呼ぶ path はあまり通らないはずという情報を使って最適化するようにするみたいです。

naruse: r66229 2018-12-06 03:37:47 +0900

r66200 で internal.h に prototype 宣言を追加していた関数、コミットログが間違ってるのかと思ったら宣言のほうが間違ってたみたいで rb_ary_ptr_use_start() に修正しています。

normal: r66230 2018-12-06 03:58:45 +0900

プロセスが fork した時に Mutex から存在しない(メモリ上にはあるけど実体としては存在しない) thread への参照が残っている可能性があるので fork されたことを検出したら(r63210 で autoload のために rb_vm_t に追加されてた fork_gen というのを rb_mutex_t にもコピーしておいてどのプロセスで初期化されたのかを憶えておくようにして、これが rb_vm_t::fork_gen と違ってたら親で初期化されたものということ)再初期化するようにしています。 [ruby-core:90312] [Bug #15383]

normal: r66231 2018-12-06 04:01:29 +0900

r66229 の internal.h への rb_ary_ptr_use_start() のプロトタイプ宣言追加(というか rb_ary_detransient() に間違ってたのを修正)を revert しています。 戻り値の型が違っていてコンパイルエラーになったみたいですね。

duerst: r66232 2018-12-06 09:05:08 +0900

enc/unicode.c から Unicode 11.0.0 の対応によって未使用になった onigenc_unicode_GCB_ranges_GAZ、onigenc_unicode_GCB_ranges_E_Base、onigenc_unicode_GCB_ranges_Emoji といった配列の定義を削除しています。

naruse: r66233 2018-12-06 11:57:04 +0900

r66200 の prototype 宣言の r66209 での修正リトライ。

duerst: r66234 2018-12-06 13:46:57 +0900

regparse.c の node_extended_grapheme_cluster() で r66033 で分離した create_sequence_node() というヘルパー関数は create_alternate_node() と類似点が多いので統一して create_node_from_array() という関数にして引数の kind で処理を分岐するようにしています。

nobu: r66235 2018-12-06 14:29:04 +0900

r65831 で導入した make test_xxx.rb とか make test/xxx みたいなターゲットのコマンドでコマンドラインの引数をオプションと分離するため "--" を追加しています。 test/-ext- のようにハイフンではじまるディレクトリがあるのでこれがオプションとして解釈されないようにするため。

nobu: r66236 2018-12-06 14:29:07 +0900

RubyVM::InstructionSequence の dump/load の round trip テストでエラー時に diff を表示するようにしています。

mame: r66237 2018-12-06 15:40:54 +0900

RubyVM.resolve_feature_path というメソッドを追加しています。引数を require した場合に実際にロードされるのはどのファイルかという解決後のパスとファイルの種類を返すというメソッドです。なにに使うんだろう。static analysis というけど実行時にならないと $LOAD_PATH がわからないような気も。 [ruby-core:89431] [Feature #15230]

nobu: r66238 2018-12-06 16:49:24 +0900

今日も rb_scan_args() のかわりに引数が 0 or 1 のメソッドで rb_check_arity() を使うようにするリファクタリングです。

duerst: r66239 2018-12-06 18:16:43 +0900

regparse.c の node_extended_grapheme_cluster() の Node の配列を r66135 で node_array というのに統合していたのをさらに用途を広げて node_common という変数名に変更しています。しかもこれ用途によって使う位置がちょっとずつオーバーラップしていてかなりトリッキーですね。

duerst: r66240 2018-12-06 18:54:09 +0900

regparse.c の node_extended_grapheme_cluster() で未使用になっていた変数 pbuf1 を削除しています。

naruse: r66241 2018-12-06 19:02:04 +0900

r66200 からの rb_ary_ptr_use_start() の prototype 宣言追加の再修正。 internal.h ではなく include/ruby/ruby.h に移動しています。 拡張ライブラリ socket から使っているからですね。と思ったけど rubysocket.h から #include していますね。 あれ internal.h って開発用にインストールされないよなと思ったけど socket など internal.h に依存しているものは gem になってないですから特別ですね。

normal: r66242 2018-12-06 19:09:30 +0900

io.c の io_write_nonblock() で str に RB_GC_GUARD() を追加して mark 漏れによる利用中のオブジェクトの GC を回避するようにしています。

normal: r66243 2018-12-06 19:09:35 +0900

NEWS ファイルの typo 修正。

normal: r66244 2018-12-06 19:41:07 +0900

io.c の io_fflush() の rb_io_check_closed() のチェックが2度も呼ばれてたので削っています。

naruse: r66245 2018-12-06 19:42:35 +0900

string.c の rb_str_sum() で未使用の変数 vbits が残っていたのを削除しています。

ko1: r66246 2018-12-06 19:52:27 +0900

RubyVM::InstructionSequence.of で同じオブジェクトを渡すと毎回同じ ISeq のオブジェクトが返ってくるようにしています。 あんまりちゃんと読めてないのですが rb_iseq_t に wrapper というメンバーを追加してここにオブジェクトをキャッシュするようにしているようです。