ruby-trunk-changes 2020-09-07

今日は既に deprecated になっていたコマンドラインオプション -T の削除などがありました。

[0dbf6e46fb] Nobuyoshi Nakada 2020-09-06 15:59:53 UTC

コマンドライン -T は 3.0 で消すという警告が出ている状態だったので削除しています。 もう指定しても機能していない状態でしたが $SAFE レベルをセットするオプションだったようです。 [ruby-core:99953] [Feature #17157]

[17a27060a7] git 2020-09-07 04:29:42 UTC

version.h の日付更新

[19917d45a3] 卜部昌平 2020-09-07 05:33:38 UTC

GitHub Actions で様々なコンパイルオプションを試す workflow で使うコンテナイメージを GitHub Container Registry のイメージを使うようにしています。

ruby-trunk-changes 2020-09-06

今日は Exception を Marshal.dump/load で復元するとバックトレースへのアクセスが異常終了する不具合の修正などがありました。

[dd83d0c599] Nobuyoshi Nakada 2020-09-05 14:15:59 UTC

Makefile の依存関係を更新するツール tool/update-deps で make のターゲットとして ruby-runner のかわりに exe/ruby を指定するようにしています。 このターゲットは suffix は考慮しなくてもいいのかな。

[170c7528e6] Nobuyoshi Nakada 2020-09-05 14:15:18 UTC

common.mk の依存関係の更新。

[776b3df490] Kazuhiro NISHIYAMA 2020-09-05 16:58:44 UTC

ractor.c のコメントや引数名の typo 修正。

[dfefe0e0d0] git 2020-09-05 16:59:20 UTC

version.h の日付更新

[c12b2703bc] Samuel Williams 2020-08-25 21:06:09 UTC

include/ruby/internal/arithmetic/size_t.h で定義される size_t の型変換のためのマクロ群 NUM2SIZET()/SIZET2NUM()/NUM2SSIZET()/SSIZET2NUM() を定義部分では RB_ の prefix つきで定義しておいて、あとでまとめて #define で prefix なしのバージョンを別名定義するようにしています。

[369cfabd59] Yusuke Endoh 2020-09-05 12:18:45 UTC

例外オブジェクトを Marshal.dump して Marshal.load したものに Exception#backtrace_locations を呼ぶと異常終了する不具合を修正しています。 Exception クラスに Marshal 用の dump/load 用の関数を追加して rb_marshal_define_compat() で登録するようにしています。 https://github.com/ruby/ruby/pull/3521 [ruby-core:99924] [Bug #17150]

[c19f8f6263] Kazuhiro NISHIYAMA 2020-09-06 10:05:30 UTC

doc/.document に "*.md" というパターンを追加して rdoc でドキュメント化させるようにしています。

[b22b3f03f4] Samuel Williams 2020-09-06 07:01:48 UTC

GitHub Actions の macOSMinGW 版でのタイムアウトを伸ばしています。

ruby-trunk-changes 2020-09-05

今日は Symbol#name メソッドの追加などがありました。

[eb67c603ca] Nobuyoshi Nakada 2020-09-04 13:18:59 UTC

Symbol#name というメソッドを追加して fstring の文字列化を返すようにしています。Symbol#to_s が fstring を返すようにしたら互換性の問題があったのでかわりに name で fstring を返すようにしようということのようです。 [ruby-core:99915] [Feature #16150]

[1c78f5d5b8] Nobuyoshi Nakada 2020-09-04 13:20:46 UTC

NEWS のチケット番号の参照のための footnote の順序をソートしています。

[f943566d1c] Nobuyoshi Nakada 2020-09-04 15:34:30 UTC

io.c の関数宣言のスタイル修正。

[1c8fe90760] git 2020-09-04 15:42:35 UTC

version.h の日付更新

[de30450d91] Tom Schady 2020-09-04 16:36:48 UTC

doc/ractor.md の typo 修正。こんなドキュメントファイル入ってたのか。見逃がしてた。

[72757fb596] andrewmelis 2020-09-05 07:18:15 UTC

doc/ractor.md の typo 修正もうひとつ。

[5c49bb5486] Nobuyoshi Nakada 2020-09-05 08:28:06 UTC

marshal.c の r_entry0() で st_lookup() でみつからなかった時のデフォルト値をあらかじめ st_lookup() の第3引数にポインタを渡す変数にセットしておくようにして Qundef で埋めておくのをやめています。 st_lookup() は要素がみつからなかった時に第3引数の内容を書きかえたりはしないのでこれで良いみたいです。

ruby-trunk-changes 2020-09-04

今日はなんといってもお待ちかねの並列化機構 Ractor がコミットされました。

[79df14c04b] Koichi Sasada 2020-03-09 17:22:11 UTC

みなさんお待ちかねの新しい並列化機構 Ractor がコミットされました。 [ruby-core:99449] [Feature #17100]
Ractor については今日 RubyKaigi takeout でささださんが解説したセッションがあったので、そのうちアーカイブも公開されると思うので RubyKaigi の YouTube チャンネルに登録しておきましょう。 https://www.youtube.com/channel/UCBSg5zH-VFJ42BGQFk4VH2A/featured
ざっくりと見所を探していくと、まず ractor.h で構造体 rb_ractor_t が定義されていて、この内容は Thread とか Fiber の構造体とはだいぶ違ってて内部に rb_thread_t と rb_execution_context_t を管理してる linked list があってあとは IO やオブジェクトのやりとりのための排他処理に使ってるらしい構造体などが保持されています。実行コンテキストは rb_thread_t などが持っててその上位構造みたいになってるようですね。また Ractor 間でオブジェクトを移動すると元のオブジェクトを Ractor::MovedObject というクラスに書き換えてしまってなんのメソッドにも反応しないようにしているようです。 gc.c をみると ObjectSpace 自体は共通しているみたいですね。

[b52513e2a1] Koichi Sasada 2020-09-03 09:04:36 UTC

79df14c04b452411b9d17e26a398e491bca1a811 で追加した Ractor を利用したテストを GitHub Actions の .github/workflows/compilers.yml で定義しているいろんなコンパイラでためす workflow 内では実行しないようにしています。たまにメモリ関連のエラーで落ちるのでとのこと。

[3f922f3b77] Koichi Sasada 2020-09-03 19:07:34 UTC

b52513e2a1ede39eef094e9e2cfa8710ce26e1f1 で toplevel return を利用してしまっていたので使わないようにしています。古い BASERUBY を考慮してとのこと。

[e0a749c045] git 2020-09-03 19:09:05 UTC

version.h の日付更新

[d4585e7470] Alan Wu 2020-09-03 19:51:14 UTC

21ad4075a71f302474a78dc744149ac8ce2ff0ec および 21ad4075a71f302474a78dc744149ac8ce2ff0ec で rb_raw_obj_info() で T_STRING 型オブジェクトのダンプ用の文字列をバッファに追加する時の文字列サイズを明示するようにした時に RSTRING_LENINT() を使ってましたが、RSTRING_LENINT() はオーバーフロー時に例外を発生させることがあって、この関数は GC 途中に呼ばれる可能性があるのでここで例外を発生させるのはよくないので str_len_no_raise() という専用の関数を追加してこれを使うようにしています。

[169b1d1aca] Nobuyoshi Nakada 2020-09-04 02:46:50 UTC

79df14c04b452411b9d17e26a398e491bca1a811 の Ractor 追加で VC で未初期化の変数の警告が出てたそうなので初期化を追加しています。

[3b0bcaf287] Koichi Sasada 2020-09-03 20:51:55 UTC

rb_ractor_main_p() が TLS(Thread Local Storage) にアクセスするため遅いので Ractor を利用中でなければ呼ばないように Ractor 利用中かどうかを先にチェックするように rb_ractor_main_p() を変更しています。

[fbaab562d9] Marc-Andre Lafortune 2020-09-02 19:34:33 UTC

標準添付ライブラリ ostruct の 1380aa04a6c3681a232046058f4388f3bce904ae で古い ruby でも動くように FrozenError がなかったら RuntimeError を raise するようにしてたのを revert しています。古い ruby の support を切ったからかな。

[d164eef957] Nobuyoshi Nakada 2020-09-04 06:17:42 UTC

rb_objspace_call_finalizer() で解放処理をスキップする条件に main Ractor であることというのを追加しています。

[d7406ccc2c] Nobuyoshi Nakada 2020-09-04 07:28:40 UTC

common.mk の依存関係更新。

ruby-trunk-changes 2020-09-03

今日は昨日の Warning.warn のキーワード引数 category 対応の追加修正や configure での C++コンパイラの検出の不具合修正などがありました。

[cc5b7ed1dc] Jeremy Evans 2020-09-02 17:34:33 UTC

拡張ライブラリ pathname の Pathname#relative_path_from の rdoc 用コメントでファイルシステムがファイルパスの大文字小文字を区別しないものでも区別する(正確には OS のデフォルトの挙動を用いる)ことを追記しています。 [ruby-core:90543] [Bug #15417]

[0938bad0a5] git 2020-09-02 17:38:01 UTC

version.h の日付更新

[d9b8411a7b] Jeremy Evans 2020-09-02 17:40:17 UTC

拡張ライブラリ strscan の StringScanner#matched_size の rdoc 用コメントの戻り値の記述をより正確にしています。 [ruby-core:99820] [Bug #17139]

[54fb8fb62a] Burdette Lamar 2020-09-02 19:02:34 UTC

Array の rdoc 用コメントの変数名の細かい変更。 https://github.com/ruby/ruby/pull/3506

[eada635033] eileencodes 2020-09-02 12:56:13 UTC

rb_warn_deprecated() から Warning.warn が定義されてたら呼び出す対応を追加しています。また rb_warn_deprecated_to_remove() で Warning.warn でなく Warning#warn のほうを呼んでたのを修正しています。 [ruby-core:99582] [Feature #17122]

[0b81a484f3] John Hawthorn 2020-08-26 06:42:15 UTC

rb_class_allocate_instance() で T_OBJECT 型のオブジェクトを生成する時に struct RBasic::flags に ROBJECT_EMBED フラグを立てるようにしています。これまでは初期化直後にインスタンス変数のテーブルが NULL ということになってて最初にインスタンス変数をセットする時に ROBJECT_EMBED が立てられるようになってて、よくわかりませんがインラインキャッシュに悪影響があったようです。

[933035d303] Aaron Patterson 2020-09-02 23:42:14 UTC

misc/lldb_cruby.py の lldb_inspect コマンドで RUBY_T_MATCH 型のオブジェクトの対応を追加しています。

[3fb255625b] Aaron Patterson 2020-09-02 23:42:56 UTC

misc/lldb_cruby.py にメモリ管理の情報を出力する heap_page、heap_page_body というコマンドを追加しています。

[50b18e8129] 卜部昌平 2020-09-03 06:06:56 UTC

configure で CXX 変数のチェックをする時に組み込みの AC_PROG_CXX は C++コンパイラがひとつもみつからなかった時も CXX に g++ をセットしてしまうそうなので、チェックして使えなかったら AS_UNSET() で変数を削除しておくようにしています。

[7b9ef66747] Alan Wu 2020-09-02 17:58:29 UTC

定数への代入する C API rb_const_set() でネストした名前空間の定数への代入の時に Module/Class へ rb_funcall() で to_s メソッドを呼び出してたところを rb_tmp_class_path() を直接呼び出して名前空間のパスを得るようにしています。最適化かなと思いましたが 5e16857315bf55307c5fc887ca6f03bfa0630a93 の追加修正で、to_s メソッドが再定義されてたりした場合を考慮してということのようです。

[705b908f7d] Kazuhiro NISHIYAMA 2020-09-03 08:54:00 UTC

doc/maintainers.rdoc の default gem の readline のリポジトリ URL がおかしかったのを修正しています。

[eeb5325d3b] Nobuyoshi Nakada 2020-09-02 07:08:51 UTC

rb_warn_deprecated() および rb_warn_deprecated_to_remove() で Warning.warn を呼び出すあたりの処理が共通だったので warn_deprecated() という関数に切り出すリファクタリング

ruby-trunk-changes 2020-09-02

今日は警告の挙動をカスタマイズする Warning.warn メソッドにキーワード引数として category を渡すようにする変更や Range の max, minmax などの変更の revert などがありました。

[6b43200948] David Rodríguez 2020-09-01 11:46:53 UTC

tool/sync_default_gems.rb で bundler の同期時に man/ 配下のファイルを Dir.glob で展開するようにしています。 FileUtils.rm_rf にワイルドカードつきのパスを渡していましたが自動で展開されないので事前に Dir.glob しておくように修正しています。

[be9dbe1c3e] Jeremy Evans 2020-08-31 21:19:23 UTC

configure.ac の pthread_setname_np() の確認のために渡す引数の format 文字列の引数の順序が間違ってたのを修正しています。 [ruby-dev:50643] [Bug #15178]

[f6822e4ed0] Nobuyoshi Nakada 2020-09-01 10:43:15 UTC

gc.c のデバッグ用出力や rb_bug() でのフォーマット文字列での指示子に PRIdSIZE などのマクロを適切に使うようにしたり引数に明示的キャストを追加したりしています。

[41cf17bef0] Nobuyoshi Nakada 2020-09-01 10:45:22 UTC

gc.c の gc_marks_step() の引数の型を int -> size_t に変更しています。

[9d4c51478c] git 2020-09-01 16:46:35 UTC

version.h の日付更新

[94430d009a] Burdette Lamar 2020-09-01 17:49:48 UTC

Array の rdoc 用コメントの不要なサンプルやマークアップの削除など。 https://github.com/ruby/ruby/pull/3499

[e080a4cdee] Jeremy Evans 2020-09-01 16:18:44 UTC

05bf811c2839628aaef3d565daedb28be80d47ef の Range#max の終点が Integer じゃない場合の変更を revert しています。(0..Float::INFINITY) みたいな Range の時の仕様変更ですね。 [ruby-core:99079] [Bug #17017]

[4db4faef0f] Jeremy Evans 2020-09-01 16:19:03 UTC

8900a25581822759daca528d46a75e0b743fc22e の Range#max や #minmax の仕様変更を revert しています。これ不具合修正として入ってるけど実質仕様変更だなとは思ったんですよね。 [ruby-core:99079] [Bug #17017]

[de10a1f358] Jeremy Evans 2020-09-01 16:58:45 UTC

Range#max の rdoc 用コメントに begin と end が逆順になってる時や終端を含まない Range の時の挙動についての説明やサンプルを追記しています。

[6e8ec9ab6d] eileencodes 2020-08-06 17:25:11 UTC

警告のフィルタリングなどを行なえるコールバックメソッドを定義する Warning.warn メソッドのデフォルトの実装に追加のキーワード引数を受け付けるようにして、警告出力時にこのメソッドを呼び出す際に category キーワード引数で警告のカテゴリ(あれば)を Symbol で渡すようにしています。過去に再定義した Warning.warn はキーワード引数を受付けないように定義されてるかもしれないので、呼び出す時に arity をチェックして 1じゃない時だけ渡すようにしています。将来の拡張のために再定義の時も category を直接受け取るように書く(だけ)ではなくて keyword rest 引数として受け取るようにしたほうが良いですね、というのがどこかに書かれてたほうが良さそうですね。 https://github.com/ruby/ruby/pull/3418 [ruby-core:99582] [Feature #17122]

[94b54b038c] Marc-Andre Lafortune 2020-09-02 00:26:45 UTC

e080a4cdeeb55dddb6247ffd2563d2dc8b84c919 で revert した (1..Float::INFINITY) のような Range への max メソッドで Float::INFINITY を返すというテストを再度追加しています。あれ、実装はそのままでいいのかな。

[4c3f0597de] Alan Wu 2020-09-01 02:48:34 UTC

vm_trace() の引数 pc を削除しています。 pc は他の引数 reg_cfp から取得できるので不要なので。

[11922b5e03] Peter Zhu 2020-08-27 13:24:21 UTC

gc.c の gc_verify_internal_consistency() で WB-unprotected なオブジェクト(RGenGC の世代管理の対象にならないオブジェクト)の数のチェックが異常だった時の rb_bug() のメッセージが間違ってたのを修正しています。

[5e16857315] Marc-Andre Lafortune 2020-09-02 01:22:20 UTC

Module#const_set で定数に無名 Module を代入した時の Module#name に名前空間の親のパスを含めるようにする修正。 [ruby-core:87787] [Bug #14895]

[6321330461] Nobuyoshi Nakada 2020-09-02 03:44:28 UTC

range.c の行末の空白除去。

[93b78abd77] Nobuyoshi Nakada 2020-09-02 03:45:11 UTC

parse.y の式埋め込みをもつ文字列リテラルのノードを作成する処理を new_dstr() という関数に切り出して再利用するリファクタリング

ruby-trunk-changes 2020-09-01

今日は minitest などの Ruby のバージョン 3.0.0 対応への追随や標準添付ライブラリ strscan の更新などがありました。

[53ba9fb74e] Yusuke Endoh 2020-08-31 07:49:16 UTC

1行メソッド定義の構文で最後に "=" がつく代入っぽいメソッド (setter method) の定義はできないようにしています。 まだ禁止されてなかったっけ。 [ruby-core:99789] [Feature #16746]

[01f28405b1] Kazuhiro NISHIYAMA 2020-08-31 11:46:42 UTC

NEWS のバージョン番号の記述を 2.8.0 から 3.0.0 に更新しています。

[c76508b88c] Nobuyoshi Nakada 2020-08-31 12:47:25 UTC

拡張ライブラリ strscan の rdoc 用コメントに $KCODE という特殊変数についての記述が残ってたのを削除しています。

[c23c880f56] Sutou Kouhei 2019-10-13 23:11:45 UTC

拡張ライブラリ strscan のバージョンを 1.0.4 に更新しています。

[2e80c8347e] Nobuyoshi Nakada 2019-01-19 02:34:26 UTC

Kernel#iterator? メソッドに deprecated 警告を出力するようにしています。block_given? の別名ですね。知らなかった。 https://github.com/ruby/ruby/pull/2071 [Feature #15547]

[1f4c507afb] Burdette Lamar 2020-08-31 18:16:10 UTC

Array の rdoc 用コメントの不要なサンプルやマークアップの削除など。 https://github.com/ruby/ruby/pull/3477

[18bcfe7144] git 2020-08-31 18:16:30 UTC

version.h の日付更新

[e744d4070c] Burdette Lamar 2020-08-31 19:53:54 UTC

Array の rdoc 用コメントの言い回しの変更や説明の削除など。一言説明とか引数の期待するクラスの明示とか消してるけどいいのかな……。 https://github.com/ruby/ruby/pull/3484

[50736f127a] Burdette Lamar 2020-08-31 21:25:11 UTC

Array の rdoc 用コメントの変更。同じく引数についての期待とか消してるけどいいのかな。 https://github.com/ruby/ruby/pull/3489

[b01d852c2a] 卜部昌平 2020-08-31 05:49:56 UTC

configure での CC 変数の設定で Linux の場合は clang より gcc のほうを優先するように変更しています。以前のツールチェインのコマンドの変数対応時に clang 優先になってたので一応以前と同じく gcc 優先にしておこうということのようです。

[377159370b] Hiroshi SHIBATA 2020-09-01 00:53:27 UTC

minitest と hoe が ruby のバージョン 3.0.0 でも動くようになったということで 86737c509cd49cfe4509a65d300d390da0f07be63e1aea461320094e634ab32ca0b13dd43b69d8b0 の一時的対応を revert しています。

[a3d90f1b9b] Hiroshi SHIBATA 2020-09-01 00:54:16 UTC

gems/bundled_gems の minitest のバージョンを 5.14.2 に更新しています。

[e00eba1ce2] Hiroshi SHIBATA 2020-09-01 00:55:05 UTC

GitHub Actions での make test-bundled-gems でのエラーを無視する gem から xmlprc を削除しています。がこれはそもそも xmlrpc が bundled gems からも消えたからその追随ですね。

[cceba23515] Hiroshi SHIBATA 2020-09-01 01:01:48 UTC

同じく GitHub Actions での make test-bundled-gems で minitest のエラーを無視するようにしていたのも revert しています。

[fbf79f1c11] Nobuyoshi Nakada 2020-09-01 05:33:17 UTC

GitHub Actions での Windows 環境でのビルドのため chocolatey で winflexbison3 というパッケージをインストールする時にバージョンを指定するようにしています。最新版でのインストールがうまくいかなかったみたいなので。

[a137874e67] Koichi Sasada 2020-08-31 21:14:07 UTC

Ubuntu 環境の GitHub Actions で環境変数RUBY_DEBUG=ci をセットしておくようにしています。ちょっと前の変更でこの環境変数設定があると rb_bug() での異常終了時に追加の情報を表示するようにしていたのでそのためのようです。

[21ad4075a7] Peter Zhu 2020-09-01 10:01:32 UTC

gc.c でデバッグ用にオブジェクトを表示する rb_raw_obj_info() で文字列オブジェクト(T_STRING 型オブジェクト)の表示の時に RSTRING_PTR() を C の文字列としてそのまま表示してたのを文字列サイズを精度に指定して NUL 文字による終端がなくても大丈夫なようにしています。

[8d1de3154c] Nobuyoshi Nakada 2020-09-01 10:03:41 UTC

21ad4075a71f302474a78dc744149ac8ce2ff0ec の再修正。 RSTRING_LEN() を int にキャストしていたのを RSTRING_LENINT() マクロを利用するようにしています。