ruby-trunk-changes r58419 - r58434

今日は newhash 命令の実装の最適化や rubygems の require によるデッドロックの不具合修正などがありました。

ko1: r58419 2017-04-21 00:02:55 +0900

標準添付ライブラリ rubygems で require を上書きしているところで gem メソッドの呼び出しで例外が発生すると RUBYGEMS_ACTIVATION_MONITOR という Monitor を取りっぱなしにしてしまうようになっていたので Monitor#exit を追加しています。っていうか Monitor#synchronize を使えばいいのになんで enter/exit で書いてるんだろ…。あーこれ require 内でブロック呼び出しにして余計なスタックフレームが入るのをいやがっているのか。じゃあ begin ... ensure ... end とか。

svn: r58420 2017-04-21 00:02:56 +0900

version.h の日付更新。

ko1: r58421 2017-04-21 00:58:35 +0900

r58408 で追加した rb_vmdebug_stack_dump_all_threads() で thread_id を unsigned long にキャストしていたのを void * にキャストしてから %p で表示するように修正しています。なんですがそもそも pthread_t は数値やポインタにキャストできるとは限らないんですよね、ということで続く。

ko1: r58422 2017-04-21 07:52:57 +0900

test/ruby/test_thread.rb のテストで Thread 間の協調を Thread#pass を sleep に頼っていたところを Queue を使ってより信頼性のある同期を取るようにしています。

nobu: r58423 2017-04-21 09:11:56 +0900

include/ruby/win32.h の rb_w32_pow() で戻り値を明示的に double にキャストするようにしています。 long double からの暗黙のキャストの警告がエラー扱いになって失敗していたそうです。 https://github.com/ruby/ruby/pull/1591

nobu: r58424 2017-04-21 09:53:26 +0900

r58421 の続き。 rb_thread_id は整数にキャストできるとは限らないので thread.c にあった rb_thread_id を文字列化する関数から static をはずしてこれを呼ぶようにしています。 [Bug #9884]

nobu: r58425 2017-04-21 11:43:25 +0900

r58404 あたりの make build-ext のログ出力についての変更の続き。たぶん表示方法を工夫している感じだと思います。 [ruby-core:80033] [Feature #13302]

nobu: r58426 2017-04-21 12:01:12 +0900

r58425 のさらに続き。 make build-ext の時のログに色付けをしているようです。 [ruby-core:80033] [Feature #13302]

shyouhei: r58427 2017-04-21 13:21:14 +0900

r58416 で toregexp 命令の実装を最適化したのと同様に newhash 命令で rb_hash_new() と rb_hash_aset() で1つずつ要素をセットしていたのを rb_hash_new_from_values() という関数を切り出して一気に生成するようにしています。ただ GC のための write barrier の不足かなにかで不具合があるんではないかという噂で、追加修正があるかもしれません。

shyouhei: r58428 2017-04-21 13:42:09 +0900

r58427 で追加した hash_insert_raw() の変数名 typo 修正。

shyouhei: r58429 2017-04-21 14:35:34 +0900

r58412 で追加した --with-ext のオプションの新機能について NEWS ファイルに追記しています。 ちゃんと読めてなかったのですが、--with-ext=openssl のように書いたら openssl だけビルドするということで --with-ext=openssl,+ と書くと openssl は必須でほかはデフォルトの挙動という指定ができるんだそうです。 [ruby-core:80033] [Feature #13302]

rhe: r58430 2017-04-21 15:03:12 +0900

missing/strtol.c はもう不要になっているということで削除しています。

nobu: r58431 2017-04-21 15:12:27 +0900

標準添付ライブラリ mkmf.rb の macOS での have_framework のテストで have_framework("Ruby") としていたのを have_framework(%w"Ruby ruby.h") とヘッダ名も渡すようにしています。大文字小文字を区別するファイルシステムではヘッダがみつけられなくなるので別途指定する必要があったようです。なるほどー、チケットは HFS+ ですが AppleFS が来たらデフォルトで大文字小文字が区別されるようになるんだっけ。 [ruby-dev:50093] [Bug #13489]

hsbt: r58432 2017-04-21 15:16:11 +0900

標準添付ライブラリの mathn が削除されています。 r58413 で削除されたのは Rational と Complex に関する拡張ライブラリ部分だけでしたね。 [ruby-core:64553] [Feature #10169]

kazu: r58433 2017-04-21 20:00:10 +0900

r58413 で空になっていたディレクトリ ext/mathn/ を削除しています。

ko1: r58434 2017-04-21 20:02:10 +0900

r58427 で追加した rb_hash_new_from_values_with_klass() で st_init_table_with_size() で作成した st_table に挿入中に frozen string が mark されるルートがなくなってしまうそうで、先に hash_alloc_from_st() でオブジェクトで包んでおいてそこ経由で mark されるようにして保護しています。