ruby-trunk-changes 2019-10-24

今日はメソッド呼び出しに使う構造体のメモリ確保の方針変更によるパフォーマンス改善のほか date, fiddle, webrick などのライブラリの更新がありました。

[039faecdb8] aycabta 2019-10-23 14:58:59 UTC

lib/readline.rb で readline.so が require できない時の fallback で require "reline" する時に 既に定数 Reline が定義済みだったら require しないようにしています。require は重複しても false を返すだけなのでここまでしなくてもいい気がしますが、stub で Reline を定義して抑制したいってことかな。

[659f7c0aeb] git 2019-10-23 15:00:59 UTC

version.h の日付更新

[7bc787fa06] aycabta 2019-10-23 15:12:52 UTC

標準添付ライブラリ reline の Windows 環境での Ctrl-Enter で改行を入力する処理を追加。

[7391db4ab3] Nobuyoshi Nakada 2019-10-23 16:18:19 UTC

bundled gems の minitest のバージョンを 5.12.2 に更新しています。

[f1d4216bd9] Nobuyoshi Nakada 2019-10-23 16:42:31 UTC

make refresh-gems というターゲットを追加して bundled gems の更新と展開を行うようにしています。こういうのまだなかったのか。

[6df6611ce7] aycabta 2019-10-23 17:45:15 UTC

標準添付ライブラリ reline で Windows 環境で左側の Alt キーのみを meta キーとして扱うようにしているそうです。German のキーボード配列では右の Alt を Shift として扱うという慣習? があるらしい。いろいろあるんですねー。

[df91896f32] BurdetteLamar 2019-10-20 17:28:22 UTC

ENV#[] と ENV#fetch の rdoc 用コメントの説明を追加しています。 fetch のデフォルト値って nil か文字列じゃなくてもいいんだな……。

[f26f0f4109] Yusuke Endoh 2019-10-23 23:04:45 UTC

df91896f32fdf78c26fc38466927c0bd87444185 の Hash#fetch の rdoc 用コメントで非 ASCII 文字によるクオート記号がまぎれこんでたのを修正しています。

[281f754126] Yusuke Endoh 2019-10-23 23:30:33 UTC

include/ruby/backward/cxxanyargs.hpp の rb_rescue2() が可変長引数を扱う va_end() の前に return してたのを修正しています。 Coverity Scan による検出とのこと。

[2791989a31] Hiroshi SHIBATA 2019-10-24 07:11:01 UTC

tool/sync_default_gems.rb で e2mmap の gemspec ファイルをコピーする先を変更しています。

[ff953a003e] Hiroshi SHIBATA 2019-10-24 07:12:34 UTC

同じく default gem の e2mmap の gemspec ファイルで version.rb を require するパスを修正しています。

[65e8267938] Hiroshi SHIBATA 2019-10-24 07:17:17 UTC

が ff953a003e03f5f070112ececefab4c07ff4cb0e は revert しています。 require_relative を使ってるので gemspec を移動したので require するパスはそのままでよかった。

[4c3e3b8028] Koichi Sasada 2019-10-24 06:03:26 UTC

fa8ac91e957a076f6df1adaecad7896817138009 の Fiber#transfer した時に呼び元の Fiber に transfered のフラグを立てて resume 禁止するよう変更してたのを revert しています。やはりこれはささださんの意図の通りの変更ではなかったか。

[38e931fa2c] Koichi Sasada 2019-10-24 07:28:15 UTC

Fiber#to_s で文字列化した時に Fiber#transfer で起動されたことのある Fiberは "transfered" という文字列を状態のところに追加するようにしています。

[89e7997622] Alan Wu 2019-07-31 01:36:05 UTC

メソッド呼び出しでだいたい一緒に使われる struct rb_call_info と struct rb_call_cache を struct rb_call_data という1つの構造体に埋め込んでまとめて確保することで、メモリ消費量の削減とアクセスのローカリティの改善によるパフォーマンス向上を狙っています。なのですがこの実現で VM 命令の attribute を sp_inc から comptime_sp_inc という attribute を分離する必要ができてその関連で VMソースコード生成や MJIT 用のテンプレートにも変更が行なわれています。なぜこれ分けないといけなくなったのかはよくわかってないですが。 [ruby-core:95373] [Misc #16258]

[f1de438380] Alan Wu 2019-10-21 16:56:44 UTC

89e7997622038f82115f34dbb4ea382e02bed163 で追加した compile.c の verify_call_cache() というデバッグ用関数は処理の前に関数の先頭で return するのでなにもしない状態でしたが CPDEBUG マクロが真の時のみチェックを行うように書きなおしています。

[9eb798a3f1] Jeremy Evans 2019-07-17 21:53:55 UTC

拡張ライブラリ date の Date#to_time でユリウス暦の Date オブジェクトを変換すると日付がずれて元に戻せなくなるという不具合を修正しているらしい。暦はむずかしい。 [ruby-core:55065] [Bug #8428]

[4e40ca301c] Jeremy Evans 2019-07-24 15:03:27 UTC

拡張ライブラリ date で Date.new の引数のチェックが不足してて NoMethodError が発生したり TypeError が発生したりとケースバイケースで変わるようになっていたので、チェックを追加して常に TypeError が発生するようにしています。 [ruby-core:72641] [Bug #11935] [ruby-core:89777] [Misc #15298]

[fc0e8d00bc] Jeremy Evans 2019-08-25 17:01:13 UTC

拡張ライブラリ date で Date を Range の終点に持ち、もう一方に -Float::INFINITY を持つようなものが作れなかった不具合を修正しています。 Range が <=> メソッドを呼んで始点終点のチェックをする時に -Float::INFINITY が infinite? メソッドを呼んでチェックするみたいで、Date#infinite? メソッドを追加するだけのシンプルな修正です。 [ruby-core:78220] [Bug #12961]

[2e37c1960a] Jeremy Evans 2019-10-18 18:56:05 UTC

拡張ライブラリ date に rb_check_trusted() での taint チェックや OBJ_INFECT() での taint flag伝播の処理を削っています。 2.7 で taint は deprecated になるそうなのでそれに先んじて削除。date は default gem ですが古いバージョンでも $SAFE がサポートされなくなってきているので削っても大きな影響はないということで。

[913807bd6c] zverok 2019-08-11 10:50:20 UTC

拡張ライブラリ date の Date#inspect および DateTime#inspect の表示をシンプルにしています。暦を意味するなにか? がくっついてたけど、まあ確かに読みかたはわからないんですよねー。とはいえこんなにサラっと変えて大丈夫だろうか…。

[9d3a4ab05b] zverok 2019-08-11 10:56:41 UTC

913807bd6ce98d3d362d27caef4f5e2aef0e5d79 の Date#inspect, DateTime#inspect の表示の変更に合わせて rdoc 用コメントも修正しています。

[487d96c6b1] Hiroshi SHIBATA 2019-08-03 11:37:51 UTC

default gem date の gemspec ファイルから development dependency の rake-compiler を削除しています。

[70ca56deda] Hiroshi SHIBATA 2019-10-24 09:50:57 UTC

rubyspec の Date のテストで変更により失敗するようになってしまったものをとりあえず 2.7 以前でのみテストするように ruby_version_is による guard を追加しています。

[7733db665a] Aaron Patterson 2019-01-10 00:22:26 UTC

拡張ライブラリ fiddle の Fiddle::Function.new で第1引数に渡された関数に対応するオブジェクトが GC で回収されてしまわないようにインスタンス変数 @closure にセットしておくようにしています。 [Bug #13286]

[5ebb0d50f6] Kenta Murata 2019-05-27 09:53:33 UTC

拡張ライブラリ fiddle のテストで環境変数 RUBYOPT や RUBYLIB の影響を受けないようにこれらをクリアしてからテスト実行するようにしています。

[4d844cbaed] Sutou Kouhei 2019-05-27 21:04:19 UTC

5ebb0d50f6560b35bc03deb79341a115c5f782ee の fiddle のテストの修正のリファクタリング。親プロセスで環境変数を一時的に書き換えるのでなく assert_in_out_err の引数で子プロセスに渡す環境変数の指定をするようにしています。

[30d46966a9] Nobuyoshi Nakada 2019-06-13 07:08:22 UTC

拡張ライブラリ fiddle のテスト用ヘルパーでポインタのサイズを得るのに RbConfig::SIZEOF['void*'] を参照するようにリファクタリングしています。

[ce6caade7c] Vít Ondruch 2019-07-10 21:19:32 UTC

拡張ライブラリ fiddle で ffi_closure_free() のかわりに munmap(3) を直接呼ぶ実装があったのですが、どうやらこれは昔の libffi で不具合があったバージョンがあったようで、それを回避するためにやっていた extconf.rb でのチェックや preprocessor でのチェックなど不要になったので削って ffi_closure_free() を常に利用するようにしています。

[b809784817] Jeremy Evans 2019-10-19 23:10:47 UTC

拡張ライブラリ fiddle でも taint flag のチェックや伝播などの実装を削っています。

[f0452574b1] thekuwayama 2019-07-05 14:25:47 UTC

標準添付ライブラリ webrick のテストで Net::HTTP#write_timeout= は 2.6.0 以降でサポートされるようになったので RUBY_VERSION をチェックして代入するようにしています。 webrick も default gems なので古い ruby でもテストできるようにしないといけないため。

[8189d496df] Jeremy Evans 2019-07-08 02:17:10 UTC

標準添付ライブラリ webrick から WEBrick::HTTPResponse#to_s というメソッド定義を削除しています。 この中でなぜか send_response を呼んでその結果というか書き込まれたレスポンスを返すようになっていたので。うへー。 [ruby-core:67428] [Bug #10715]

[84ed4c3d59] Hiroshi SHIBATA 2019-10-04 13:51:39 UTC

webrick のバージョンを 1.5.0 に更新しています。

[37c266aa57] Jeremy Evans 2019-08-06 22:48:18 UTC

標準添付ライブラリ webrick で HTTP header の値の前後の空白を削る処理のなかで連続する空白を空白1つにまとめるという処理もしていましたが、これは標準では許されてない挙動だったので削っています。 [ruby-core:47521] [Bug #7021]

[c28d50a753] Jeremy Evans 2019-08-27 05:22:00 UTC

標準添付ライブラリ webrickWEBrick::HTTPRequest で X-Forwarded-Host ヘッダを処理しているところでホスト部IPv6 のアドレスだった場合を考慮してポート番号との分離を修正しています。

[f126d80b1e] Jeremy Evans 2019-10-18 18:40:36 UTC

標準添付ライブラリ webrick でも tainted? をチェックしていたところを削っています。ただ RUBY_VERSION が 2.7 より古い場合は untaint の呼び出しは残しています。

[efd641ffab] Hiroshi SHIBATA 2019-10-24 10:52:54 UTC

ce6caade7c57a505f73086ccd7b33c14f7715f22 で fiddle で常に ffi_prep_closure() を使うようにしたのを revert しています。 CI には古い環境もあるからそれが壊れたかな?

[de5ee47c3d] Hiroshi SHIBATA 2019-10-24 10:53:26 UTC

fiddle のテストの変更 4d844cbaed518743776594fa5ae33b86fe176ad1 を revert。この変更自体というよりその元になった 5ebb0d50f6560b35bc03deb79341a115c5f782ee の revert のため。

[dc44ab2913] Hiroshi SHIBATA 2019-10-24 10:53:33 UTC

ということで fiddle のテストで RUBYOPT と RUBYLIB をクリアする 5ebb0d50f6560b35bc03deb79341a115c5f782ee を revert。これも CI のエラー対応かなぁ。