ruby-trunk-changes 2019-10-19

今日は AppVeyor でのビルドの一時的な対応や拡張ライブラリ ripper のソース生成のちょっとした変更などがありました。

[9cb809cfef] Nobuyoshi Nakada 2019-10-18 13:17:06 UTC

ddad1fb229421be3dc4b0a3031cb410b62a233a9 で NEWS に追記した optparse で did_you_mean.gem を使うようにした機能のサンプルで例に使われているコマンドラインスクリプトのファイルの関係がわかるようにどの部分がファイルの内容なのか明示するようにしています。

[bf934e4812] Nobuyoshi Nakada 2019-10-18 15:50:17 UTC

parse.y のメソッドの引数まわりで idNil を ID2SYM() で Symbol にして渡してたところを何箇所か ID2VAL() に変更して VALUE を渡すようにしています。たぶん最終的にはどちらも STATIC_ID2SYM() が呼ばれて同じ(ripper の時は違うかも)ものになってたんだと思います。

[7dcc24fd81] git 2019-10-18 15:51:37 UTC

version.h の日付更新

[5c81e19b19] MSP-Greg 2019-10-18 18:03:54 UTC

appveyor.yml の pacman で依存パッケージをインストールする部分をコメントアウトしています。 mingw-w64 の更新でなにか壊れたらしく一時的な措置のようです。 https://github.com/ruby/ruby/pull/2573

[1d435bd51a] Nobuyoshi Nakada 2019-10-19 06:57:25 UTC

拡張ライブラリ ripper に含まれる DSL というクラスがあって、これはソースコード生成のために使うツールから使われるもののようですが "$$" という parse.y のアクション部でそのノードの結果を代入する変数を表す文字列を別の $1 とか $2 とかに変更できるようにしています。現状特に実際に使ってはなさそう。

ruby-trunk-changes 2019-10-18

今日は標準添付ライブラリ optparse でオプションがみつからなかった時に did_you_mean.gem を使って似ている候補があればそれを表示する機能追加や reline の Windows でのキーストローク対応強化などがありました。

[d1a7305848] aycabta 2019-10-17 15:41:17 UTC

標準添付ライブラリ reline のヒストリのインクリメンタルサーチで表示する結果を構築するところの複数行対応らしいです。

[fdfb5100b9] git 2019-10-17 15:46:02 UTC

version.h の日付更新

[0162e7e647] Jeremy Evans 2019-08-11 23:22:58 UTC

メソッド引数などでデフォルト引数の値には任意の式が書けますが、そこに循環参照になるような式(最も単純には m(a=a) みたいなの)があったら警告を出して実行時に nil として扱うようにしてましたが、parse 時点で SyntaxError 例外を発生させるようにしています。 [ruby-core:65356] [Bug #10314]

[13b106a19c] aycabta 2019-10-17 17:15:53 UTC

標準添付ライブラリ reline に Windows 環境でのキー入力処理で 0x00 を読み飛ばしてたのを修正。また Alt-` というキーシーケンスに対応するようにしています。これは IME の On/Off に使われるらしい。

[53c05a6cf4] aycabta 2019-10-17 17:29:13 UTC

標準添付ライブラリ reline でテーブルとして使われる定数に格納する Hash リテラルなどに freeze をつけてたのを消してます。Hash の key が Array なやつの key を freeze してるのはやっておいてもいいような気はしますけどね。

[58657fa134] aycabta 2019-10-17 17:31:17 UTC

標準添付ライブラリ reline の Windows 向けのキーストロークのテーブル Reline::Windows::RAW_KEYSTROKE_CONFIG にカーソルキーや Home/End などのキーを追加しています。

[8c0629ba58] aycabta 2019-10-17 17:51:12 UTC

標準添付ライブラリ reline の Windows 向けのキー入力処理で 58657fa134852311ce6ce2827f72ba2d1b29a8bb で追加したような特殊なキーストロークの処理を強化しています。

[ee821e9074] Jeremy Evans 2019-10-17 17:16:32 UTC

Time オブジェクトの ObjectSpace.memsize_of をチェックするテストで struct RVALUE のサイズが 24 の場合に対応するようにしています。32bit 版で 24 になるそうな。 [ruby-core:94068] [Bug #16030]

[9026e12f93] Aaron Patterson 2019-10-17 20:30:09 UTC

拡張ライブラリ json の generator (JSON エンコードする処理)で JSON::SAFE_STATE_PROTOTYPE という定数を C の拡張ライブラリ部分で参照するのに最初の参照時に static 変数にキャッシュしておいてそれ以降そちらを参照するようにしていたのをやめて、毎回 rb_const_get() を呼ぶようにしています。 GC.compact での移動に対応するためみたいです。

[1d564acedc] Aaron Patterson 2019-10-17 20:35:26 UTC

9026e12f93bb0f3f63d7449cdb5eabb2e660088f と同様に拡張ライブラリ json で定数 Regexp::MULTILINE の内容を static 変数にキャッシュしていたのをやめています。こっちは単にこの変数すでに参照されていなかったみたいです。

[5ca5529d22] Seiei Miyagi 2019-10-17 16:34:18 UTC

標準添付ライブラリ racc で生成する ruby スクリプトでクラス名の名前空間がネストしている時? に module X ... end の end の行のインデントがずれてて警告が出るのを修正しています。 https://github.com/ruby/ruby/pull/2571

[c3b64a86bc] Yusuke Endoh 2019-10-16 07:31:41 UTC

標準添付ライブラリ optparse でオプション名を間違えた時に did_you_mean.gem を使って近い名前のオプションの候補を表示するようにしています。

[ce7942361d] Nobuyoshi Nakada 2019-10-17 17:51:15 UTC

hash.c の ID ベースのテーブルを指定するための変数 identhash を rb_hashtype_ident と改名して static 宣言を外し、gc.c で ObjectSpace::WeakMap の実装に使うテーブルの初期化時に使うようにして st_init_numtable() のかわりにするようにしています。 [ruby-core:94101] [Feature #16035]

[095cdca15b] Nobuyoshi Nakada 2019-10-18 05:03:28 UTC

ObjectSpace::WeakMap の finalizer 用のコールバックを rb_obj_method() で Method オブジェクトとして作るのではなくて rb_func_lambda_new() で C の関数を wrap した Proc オブジェクトとして作るようにしています。

[e50b8949fa] Nobuyoshi Nakada 2019-10-18 05:59:26 UTC

template/unicode_norm_gen.tmpl で numbered parameter と解釈される _2 のようなローカル変数を使っているところがあって警告が出てたので変数名変更しています。

[46fa301e82] Nobuyoshi Nakada 2019-10-18 06:15:59 UTC

c3b64a86bcd7773c081f5049115c57ec73d7a76a の続きで標準添付ライブラリ optparse で did_you_mean.gem を使った補完候補表示するのにメッセージ部分を独自に書いてたのを DidYouMean.formatter.message_for というメソッドを流用するようにしています。

[d4e52f672c] Nobuyoshi Nakada 2019-10-18 06:19:26 UTC

c3b64a86bcd7773c081f5049115c57ec73d7a76a の optparse に補完候補を出す機能追加でのテストに近いオプションがひとつもなくてただのエラーになるケースのテストを追加しています。

[e29e49abf0] Nobuyoshi Nakada 2019-10-18 07:43:40 UTC

続きで標準添付ライブラリ optparse で did_you_mean.gem を使う際に DidYouMean.formatter が DidYouMean::PlainFormatter じゃなかったら DidYouMean::PlainFormatter に設定しなおすようにしています。しかしインスタンス変数の @formatter にはセットしなおしてないけどいいのかな。
[追記]インスタンス変数 @formatter は teardown で元に戻すためのバックアップなのでこれで良かったようです。[/追記]

[b4d308b419] Nobuyoshi Nakada 2019-10-18 08:39:16 UTC

さらに続きで標準添付ライブラリ optparse で did_you_mean.gem のインスタンスを作ったりするのは例外を rescue して message が呼ばれた時に行うようにしています。これは rescue してそのまま無視されたり message が呼ばれないっていう場合に余計なことをしないためなんだろうか。

[e2b719bed6] Nobuyoshi Nakada 2019-10-18 08:46:53 UTC

さらにさらに続きで標準添付ライブラリ optparse で did_you_mean.gem を使って候補を出すために追加した処理で AmbiguousOption 例外が発生するパターンでも対応するようにしています。

[ddad1fb229] Yusuke Endoh 2019-10-18 08:53:17 UTC

NEWS ファイルに c3b64a86bcd7773c081f5049115c57ec73d7a76a 以降の対応による標準添付ライブラリ optparse の did_you_mean.gem を使った候補表示の機能追加について追記しています。

[58e2ca31db] Kazuhiro NISHIYAMA 2019-10-18 11:24:36 UTC

e50b8949fad96a30226e4122172822a2a4c7301d で警告除去のため template/unicode_norm_gen.tmpl のローカル変数名を変更したのですが _2 と _2_ のように変更してましたが、これは元々代入するけど使わないものを警告避けのため _ ではじまる変数名にしてただけなので、どちらも _ という1文字の変数に変更しています。

ruby-trunk-changes 2019-10-17

今日は標準添付ライブラリ drb の修正や reline の複数行対応強化や File.extname の "." で終わるファイル名に対する仕様変更などがありました。

[f8fb51c976] Nobuyoshi Nakada 2019-10-16 12:00:36 UTC

43015275b9a7f2833c93ad11ea96ae4cb3b7acd7 の assert_raise_message の alias 追加を revert しています。 test-unit の assert_raise_message は tool/lib/test/unit/core_assertions.rb の assert_raise_with_message と仕様が違ってて例外クラスの検査をしないので同一視はできなかったようです。

[7df227804a] aycabta 2019-10-16 13:34:58 UTC

標準添付ライブラリ reline の ヒストリ検索で複数行対応。

[5c80dffd05] Takashi Kokubun 2019-10-16 15:28:53 UTC

e8124729fbeaf159ae615f61980ee10018ed5134 の .travis.yml で arm64-linux 環境において ccache を無効化したのを revert しています。一度は効果があるかと思ったけどやっぱりエラーになったとのこと。Travis-CI の環境はインスタンスガチャ的な要素があるのかなかなか安定しないですね。

[e003f29e21] git 2019-10-16 15:29:39 UTC

version.h の日付更新

[3fea2d91ad] Benoit Daloze 2019-10-16 16:21:18 UTC

NEWS ファイルのサンプルコード部分のインデントを変更。偶数個スペースのインデントにしたいらしいです。

[e26c6d4ab8] aycabta 2019-10-16 16:51:29 UTC

標準添付ライブラリ reline の Reline::LineEditor#reset と #rerender からプロンプト処理の部分をメソッドとして切り出しています。

[db84123600] aycabta 2019-10-16 17:19:01 UTC

e26c6d4ab840c100c4f3ad20d0399598ef427c13 で切り出したメソッド check_multiline_prompt でプロンプトの幅も返すようにして呼び元で上書きするようにしています。

[2993b24a1e] Jeremy Evans 2019-08-25 00:11:06 UTC

public/private/protected/module_function などのメソッドは引数を渡さずに呼ぶと class 文や module 文のそれ以降のメソッド定義に効くようにモードを変更するような働きをしますが、これをメソッド内で呼んだ時にはおそらく誤用なので警告を出すようにしています。 [ruby-core:79751] [Bug #13249]

[50b8033d6b] Jeremy Evans 2019-08-14 23:44:11 UTC

標準添付ライブラリ drb でサーバー側でのオブジェクトのメソッド呼び出しで発生した例外をレスポンスとして返すようにしてたのを NoMemoryError, SystemExit, SystemStackError, SecurityError はそのまま再 raise するようにしています。 [ruby-core:40942] [Bug #5618]

[567e312d1f] Jeremy Evans 2019-08-08 22:44:26 UTC

標準添付ライブラリ drb で Socket#setsockopt を実行した時の IOError, Errno::ECONNRESET, Errno::EINVAL などの例外を無視するようにしています。 socket が close 済みの時にこれらの例外が発生する可能性があるみたいです。 [ruby-core:53186] [Bug #8039]

[d5744aff3a] Jeremy Evans 2019-10-14 16:00:42 UTC

標準添付ライブラリ drb の DRbServer#any_to_s で d0ed935d5bf8c3fce9800742a36e44fb7f63dda4 で BasicObject 対応で UnboundMethod を使って kernel#to_s を呼ぶようにしたところでオブジェクトのクラスが Object を継承してるかというチェックをしてましたが、ここが既に to_s の呼び出しに失敗したケースだったのでこの分岐を消して常に bind_call を使うようにしています。

[37457117c9] Kazuhiro NISHIYAMA 2019-10-17 03:51:29 UTC

標準添付ライブラリ shellwords の escape で文字列置換の結果にグループのキャプチャを参照する \1 を使ってたのを、かっこを消してマッチした全体の \& を使うようにしています。

[60a0c20cb6] aycabta 2019-10-17 07:35:11 UTC

e26c6d4ab840c100c4f3ad20d0399598ef427c13 で切り出した reline の prompt 処理メソッド check_multiline_prompt の引数から special_prompt を削除してメソッド内に呼び元のロジックを移動しています…が、なんかメソッド内に移動したところには special_prompt への代入部分がなくて、常に nil になって NameError になってしまいそうな気がします。

[41457dcbe0] aycabta 2019-10-17 07:54:06 UTC

と思ったら 60a0c20cb637ac3b2edc561dbc5888fae290b0e6 の special_prompt の nil 初期化が不要だったようで削除しています。 あーなるほどそもそもこの変数参照してるところがなくなってるんだ。

[2a22a6b2d8] Kenichi Kamiya 2019-10-17 08:44:46 UTC

String や Symbol の match/match? メソッドで引数に nil が渡された時に nil や false を返していたのを、Regexp#match や #match? と同じ挙動になるように TypeError を発生させるように変更しています。 https://github.com/ruby/ruby/pull/1506

[2a261909cc] git 2019-10-17 08:45:02 UTC

2a22a6b2d8465934e75520a7fdcf522d50890caf の行末の空白除去。

[e169ad93f4] Nobuyoshi Nakada 2019-10-17 05:42:38 UTC

File.extname は通常拡張子の "." (ドット)も含んだ部分を返しますが、ファイルの末尾が "." で終わる場合はこれを削って(拡張子ではない、ということなんでしょうね)空文字列を返していましたが、この例外処理のためファイル名が basename + extname で復元できないエッジケースができてしまうということで仕様変更して "." を返すようにしています。なるほどなー。確かにこっちのほうが一貫してる気はする。 [ruby-core:89615] [Bug #15267]

[4f13927f1f] Nobuyoshi Nakada 2019-10-17 10:42:25 UTC

e169ad93f44e1944ecf7bb65133fd34e8b868ea8 の File.extname の変更は実は Windows 環境以外でのみの変更なので rdoc 用コメントや NEWS の記述に追記しています。あれ、そうなのか。 File.extname の実装は Windows 版は別のところにあるのか。 [ruby-core:89615] [Bug #15267]

ruby-trunk-changes 2019-10-16

今日は Comparable#clamp の引数に Range オブジェクトを許容する機能追加、Kernel#ruby2_keywords の機能追加などがありました。

[81176095f4] Nobuyoshi Nakada 2019-10-15 13:38:39 UTC

Comparable#between? と Comparable#clamp の rdoc 用コメントのマークアップの修正。

[c01df7e58f] Nobuyoshi Nakada 2019-10-15 14:13:49 UTC

f94202fcc228d0348ca050a7b18a8f8a538a7305 の irb のオブジェクト表示で循環参照検出に使う Hash を compare_by_identity にする変更で一箇所 object_id の呼び出しを削り忘れていたところがあったので追加修正。 [ruby-core:95318] [Bug #16250]

[375cf12918] Yusuke Endoh 2019-10-15 14:29:49 UTC

標準添付ライブラリ csv のテストで Encoding.default_internal を変更する前後で $VERBOSE を nil にセットして警告を抑制しています。

[929d5fd3b9] Nobuyoshi Nakada 2019-10-15 13:32:10 UTC

Comparable#clamp に切り詰める範囲を min, max の2引数のかわりに Range オブジェクトで受け取れるようにしています。 Range オブジェクトの begin/end を取り出してかわりに使うようです。終端を含まない Range や beginless/endless Range だと ArgumentError が発生します。 [ruby-core:87241] [Feature #14784]

[1c50ce2cf8] git 2019-10-15 16:42:52 UTC

version.h の日付更新

[a5245c1658] aycabta 2019-10-15 17:08:44 UTC

標準添付ライブラリ reline の vi insert mode での Ctrl-r の操作を insert からインクリメンタルサーチの前方検索に割り当てるように修正しています。

[259601ab57] aycabta 2019-10-15 17:55:45 UTC

標準添付ライブラリ reline の Reline::LineEditor でヒストリ検索? するのに終了待ちする Proc でキーが Ctrl-h もしくはキーコード 127 の時も検索続行するようにしています。

[6081ddd6e6] Jeremy Evans 2019-10-15 19:46:24 UTC

Kernel#ruby2_keywords つきで定義したメソッドでキーワード引数から変換されたHashオブジェクトにフラグを付与して、それを*argsのように渡して委譲した先でも keyword splat として扱うよう にしてましたが、これがさらに別のメソッドに委譲される時にフラグがついたままだと ruby2_keywords がついてないメソッドでも同じ扱いがされてしまうので、Hash オブジェクトを複製してフラグがないインスタンスを作るようにしています。

[d97229de5c] Jun Aruga 2019-10-16 03:59:40 UTC

Travis-CI にも ARM の環境があるみたいなので .travis.yml に arm64-linux でのビルドを追加しています。 https://github.com/ruby/ruby/pull/2559 [ruby-core:95201] [Misc #16234]

[2679e10942] Takashi Kokubun 2019-10-16 04:37:00 UTC

.travis.yml の make-test-only というラベルで make test だけでなく指定したファイルのみの make test-all も実行するようにして test/ruby/test_jit.rb のテストを実行するようにしています。

[759576a03f] Takashi Kokubun 2019-10-16 05:01:25 UTC

2679e10942c8cebc11423cac8303bea7b4c1522a で指定してたテストファイルのパスをビルドディレクトリからの相対パスに変更しています。

[4ccb49bad3] Takashi Kokubun 2019-10-16 05:47:20 UTC

2679e10942c8cebc11423cac8303bea7b4c1522a と 759576a03f0a39f3190e79526d138adc3a3f0a62 を revert して test/ruby/test_jit_debug.rb というファイルを追加して MJIT のテストで常に --jit-debug オプションを付けるように指定する方法を環境変数からこのファイル内で設定されるインスタンス変数によるようにしています。この setup って常に実行されるのかな? されなさそうだけど……。

[e8124729fb] Takashi Kokubun 2019-10-16 05:54:43 UTC

.travis.yml の arm64-linux 環境のビルドで ccache を利用しないようにしています。 https://github.com/ruby/ruby/pull/2559

[006d9013ea] Takashi Kokubun 2019-10-16 05:56:19 UTC

arm64 でのテストは Travis-CI で行なうようにしたので .drone.yml は削除しています。

[eef25f95b7] Takashi Kokubun 2019-10-16 06:04:34 UTC

.travis.yml の build matrix 定義内の arm64-linux の alias の挿入位置を "(Allowed Failures)" というコメントの行の後ろに移動しています。

[c15856d76d] Takashi Kokubun 2019-10-16 06:14:55 UTC

4ccb49bad31b3c4a9cc7c6138cae93bd60a7bec4 で追加した test/ruby/test_jit_debug.rb でコマンドライン引数 --jit-debug を追加するためのフラグになるインスタンス変数の設定は TestJIT がロードされている時だけにし、またビルド時の CPPFLAGS に -DVM_CHECK_MODE が設定されていた時も抑制するようにしています。

[17ee01e3f6] Nobuyoshi Nakada 2019-10-16 06:16:07 UTC

test/rdoc/test_rdoc_rdoc.rb の未使用のローカル変数を削除しています。

[d70855c725] Nobuyoshi Nakada 2019-10-16 06:16:51 UTC

標準添付ライブラリ rdoc のテストにコマンドラインオプション --force-update/--no-force-update/-U のテストを追加しています。

[5437d7c879] Takashi Kokubun 2019-10-16 07:11:05 UTC

4ccb49bad31b3c4a9cc7c6138cae93bd60a7bec4 で追加した test/ruby/test_jit_debug.rb ですがやっぱり消してます。 AppVeyor などいくつかの Ci が失敗したとのこと。

[43015275b9] Nobuyoshi Nakada 2019-10-16 08:22:31 UTC

tool/lib/test/unit/core_assertions.rb で定義している(えーとこっちが bundled gem のテストでも使えるほうだっけ) assert_raise_with_message に assert_raise_message という別名を追加して test-unit と同名の assertion が使えるようにしています。

ruby-trunk-changes 2019-10-15

今日は irb の循環参照のあるオブジェクトの表示の不具合修正や rubygems のバージョン更新などがありました。

[c3a6260302] Masatoshi SEKI 2019-10-14 13:56:37 UTC

8488d5b5b6cc9205e8e0641c514f1f2e38bf7d1e で drb で MonitorMixin を利用するようになってたのに require "monitor" が抜けてたので追加しています。

[978276a7d9] Jeremy Evans 2019-10-15 00:43:11 UTC

File.readable?、File.writable?、File.readable_real?、File.writable_real?、File.executable?、File.rxecutable_real? というったメソッドの rdoc 用コメントに OS のセキュリティ機能によっては誤った真偽値が返される可能性があると追記しています。 たとえば ファイルシステムが read-only で mount されている時に writable? が真(permission 的には書き込み操作の権限はある)でも実際には書き込めない、というようなことを言ってるようです。 [ruby-core:93764] [Bug #16002]

[ddd42d8ebd] git 2019-10-15 00:55:44 UTC

version.h の日付更新

[96617ad1d5] Ary Borenszweig 2019-10-15 04:25:05 UTC

irb再帰的に自分自身を要素に含む Array や Hash の表示で無限再帰に陥ってしまうという不具合を修正。 あれ、pretty print してるだけじゃないんだっけ? と思いましたが今は色付けするようになったために独自に表示を実装してるんですね。同じオブジェクトが循環しているのを検出する機能を追加しています。 https://github.com/ruby/ruby/pull/2555 [ruby-core:95318] [Bug #16250]

[c800967acd] Takashi Kokubun 2019-10-15 04:58:13 UTC

96617ad1d57a13e9a282fb663ea73e4801519389 の続きで irb でオブジェクトを表示する時に循環参照を検出するために持ち回る Hash の引数をキーワード引数に変更し、共通のチェック処理をメソッドに切り出しています。 [ruby-core:95318] [Bug #16250]

[b7079e5384] Kazuhiro NISHIYAMA 2019-10-15 09:50:46 UTC

Thread と Process.spawn や Kernel#system を一緒に使うテストで Thread が sleep に入ったことを確実にしてタイミングによって稀にエラーになるのを避けるため Queue を使って子 Thread と協調するようにしています。 [ruby-core:69304] [Bug #11166]

[f94202fcc2] Nobuyoshi Nakada 2019-10-15 00:54:23 UTC

978276a7d9249535f855088f866551b6557f321f および 96617ad1d57a13e9a282fb663ea73e4801519389 のさらに続きで irb でオブジェクトの表示をする時の循環参照検出のための Hash を Hash#compare_by_identity で同値性チェックするようにして Object#object_id の呼び出しを不要にしています。 [ruby-core:95318] [Bug #16250]

[d2982bea67] Kazuhiro NISHIYAMA 2019-10-15 11:18:06 UTC

doc/contributing.rdoc の余分なコンマを削除。

[51a31b86e9] Hiroshi SHIBATA 2019-10-15 11:21:09 UTC

rubygems のテストでテスト用に作る gemspec で要求する rubygems のバージョンを本体の次の変更に先立って 3.1.0.pre2 に更新しています。

[e0e93a199d] Hiroshi SHIBATA 2019-10-15 11:15:28 UTC

rubygems のバージョンを 3.1.0.pre2 に更新しています。

ruby-trunk-changes 2019-10-14

今日は拡張ライブラリ json のいくつかの最適化や標準添付ライブラリ drb の修正や機能強化などがありました。

[26fae9aa9d] Takashi Kokubun 2019-10-13 16:59:43 UTC

MJIT の JIT コンパイルコンパイラを起動する mjit_worker を停止する時に static 変数 mjit_pause_wait_p を使って早期停止を促す処理を消しています。現状だとこれはもう不要になってそうな感じというのと、これから入れようとしている変更がこの処理と相性がよくないらしい。

[673f3842dd] git 2019-10-13 17:05:30 UTC

version.h の日付更新

[183b421509] Takashi Kokubun 2019-10-13 21:11:02 UTC

mjit_worker.c のコンパイル失敗時の struct rb_mjit_unit の解放処理を convert_unit_to_func() の中から呼び元の mjit_worker.c に引き上げています。解放後に unit を触る可能性があったので解放を遅延させるようにしています。

[6fa3492362] Takashi Kokubun 2019-10-14 02:29:46 UTC

さらに 183b42150962e507cd69ceddb64ad2a10f02fdfa に続いて JIT コンパイルした struct rb_mjit_unit を active_units のリストに繋ぐのも convert_unit_to_func() から呼び元の mjit_worker() に引き上げています。リストに繋げた要素が free されてしまうのを避けるためとのこと。

[95c420c4a6] Sutou Kouhei 2019-10-14 03:40:50 UTC

拡張ライブラリ strscan に upstream から 1.0.3 をマージしています。 StringScanner.new の機能追加や不具合修正が含まれているようです。 https://github.com/ruby/ruby/pull/2553

[d0ed935d5b] Jeremy Evans 2019-10-14 05:20:32 UTC

標準添付ライブラリ drb のオブジェクトの同一性チェックや呼んではいけないメソッドの判定などで BasicObject に対応すべく __id__ メソッドや private_methods, protected_methods などのメソッドを UnboundMethod#bind_call を使うようにしたりしています。また同じプロセス内の DRbObject へのメソッドコールで不要な接続をはらないようにする修正など。 https://github.com/ruby/ruby/pull/2552 [ruby-core:26554] [Bug #2339] [ruby-core:28089] [Bug #2718] [ruby-core:52148] [Bug #7833] [ruby-core:85524] [Bug #14471]

[3e763883ea] Nobuyoshi Nakada 2019-10-14 06:10:33 UTC

拡張ライブラリ strscan で onig_region_set() への引数のオーバーフローを考慮してこの関数を使わず構造体の内容を直接セットするようにしています。 onig_region_set() の引数が int なのにもかかわらずセットすべき構造体メンバーが OnigPosition で実質 ptrdiff_t なので関数のインターフェースの設計にミスっている感じ。だけど公開 API なのでさっと直すわけにもいかずという。

[0195966ba2] Nobuyoshi Nakada 2019-10-14 06:42:27 UTC

rubyspec で Thread.exclusive の deprecated 警告が出てたところを抑制するため $VEEBOSE を一時的に nil にするようにしています。

[ede1a3dc11] Kazuhiro NISHIYAMA 2019-10-14 08:30:04 UTC

ccan/list/list.h のコメントの typo 修正。このヘッダは外からもってきたソースコードの一部だと思うけど元から typo してたのかなぁ。

[7376d70cb0] Florian Frank 2019-04-29 13:56:14 UTC

拡張ライブラリ json の parser.rl および生成されるソースコードでの else 節内の if を else の直後に置くスタイル変更です。これ dangling else (はこういうのじゃなかったかも)であんまりいいスタイルじゃないと思うけども…。

[d9e50fcbeb] Sho Hashimoto 2019-01-15 13:16:05 UTC

拡張ライブラリ json で組込みのクラスの to_json メソッド定義する時に引数を as_json の結果の to_json 呼び出しに委譲するようにしています。

[641136c4af] Watson 2018-03-04 14:34:26 UTC

拡張ライブラリ json で文字列が正しい UTF-8エンコードがされているかの確認は文字列全体が ASCII compatible だった時は不要なのでスキップするように最適化しています。

[40724d7d10] Watson 2018-03-01 15:51:30 UTC

拡張ライブラリ json で文字列の Encoding の変換を rb_funcall() で encode メソッドを呼び出していたのを直接 rb_str_encode() を呼ぶように最適化しています。

[d7fa7e2c86] Watson 2018-03-02 16:16:34 UTC

先の 40724d7d10e9902fcdc4149326acbfe4dd95d3c7 で rb_str_encode() を呼び出して UTF-8エンコードしていたのは ASCII incompatible な文字列の時だけにしています。んー、これはいいのかな? 実際のバイト列が ASCII Compatible というのと Encoding が US-ASCII か UTF_8 かというのは別の話ではあると思うけど。実用上は必要なら適宜変換される場合が多くてこれでこけることはあまりないかもしれない。

[2003755a2c] Nobuyoshi Nakada 2019-10-14 10:13:20 UTC

と、思ったら d7fa7e2c860430a3dfa1b08be96734925b6c81d8 の再修正で、rb_enc_str_asciicompat_p() で判定していたのを US-ASCII もしくは UTF-8 であることをチェックするようにしています。これは内容は ASCII compatible なんだけど付与されている Encoding は UTF-8 以外という文字列で変換されなくてエラーになることがあったという修正だそうです。なるほどそっちのほうが問題か。

[a2f9c38a71] Watson 2018-03-01 15:33:18 UTC

標準添付ライブラリ json の Hash をエンコードする時に rb_funcall() で Hash#keys メソッドを呼び出してキーの全リストを取得してからループを回していたのを rb_hash_foreach() を利用してコールバックで逐次エンコードしていくように最適化しています。

[98a9445db9] Watson 2018-03-01 15:45:28 UTC

同じく拡張ライブラリ json の Hash のエンコード時にキーを rb_funcall() で to_s メソッドを呼び出して文字列化していたのを、元々 String オブジェクトだった時と Symbol だった時はメソッド呼び出しを回避するようにしています。 JSON に渡すようなほとんどの場合でメソッド呼び出しを回避できるので結構速くなりそうですね。ベンチマークだと 20%弱くらい速くなってそう。

[308bbb4e10] Sho Hashimoto 2019-01-08 00:12:05 UTC

拡張ライブラリjsonJSON::Ext::Generator::State.new という内部的に使われてるオブジェクトの rdoc 用コメントに ascii_only というキーワード引数について追記しています。

[a4cf11c10f] Florian Frank 2017-12-21 08:57:16 UTC

拡張ライブラリ json のテストで NaN を含んだものを parse するテストはかわりに Infinity を使うようにしています。 NaN 同士の比較は false になるけど、配列の要素として NaN が含まれている時には配列の一部としての要素の比較時にはたまたま同一視されるという挙動に依存していたので。 https://github.com/flori/json/issues/343

[8488d5b5b6] Masatoshi SEKI 2019-10-14 11:30:22 UTC

標準添付ライブラリ drb で remote への接続をはるのを Mutex を使って直接 connection pool を実装していたのを別 Thread を立ててその Thread にリクエストを投げて通信(というかメソッド呼び出し)させるようにしています。主眼は fork した時に Thread が死ぬのでその結果接続が自動的に回収されるというのを狙っているところかなぁ。

ruby-trunk-changes 2019-10-13

今日は Coverity Scan で検出されたコーナーケースでの不具合の修正などがありました。

[90b9900dc1] Yusuke Endoh 2019-10-12 15:49:18 UTC

io.c の rb_update_max_fd() に fd に負値を渡された時に無視するという処理を追加。 Coverity Scan による指摘。

[a5ecf7e0a1] Yusuke Endoh 2019-10-12 15:51:50 UTC

dir.c の join_path_from_pattern() でコピー先に確保するバッファのメモリ確保失敗の NULL チェック漏れの修正。実際にはメモリ確保失敗時には例外発生するんじゃないかなと思ったけどこいつは素の malloc() の wrapper になっていたので NULL チェックが必要(サイズ計算のための乗算時にオーバーフローを検出した時だけ NoMemoryError 発生させる処理はある)。

[6ee2fb5021] git 2019-10-12 15:54:04 UTC

version.h の日付更新

[6a1809e2e1] Burdette Lamar 2019-10-13 00:48:20 UTC

ENV.delete の rdoc 用コメントの説明に例も追加して戻り値やブロックを渡した時の挙動など大幅に追記しています。