ruby-trunk-changes 2022-06-03

今日は主にドキュメントの修正や拡張ライブラリ nkfリファクタリングなどがありました。

[eb5a01970f] David Rodríguez 2022-06-02 10:08:05 UTC

bundler のテストで Bundler::Digest.sha1 のテストをしているところで渡す文字列に長いものを追加しています。SHA1 の仕様で特定のケースがカバーされてなかったからとのこと。

[4eb140b0e4] David Rodríguez 2022-06-02 10:12:21 UTC

bundler の Bundler::Digest.sha1 の実装の冗長なビットマスクの演算があったのを削っています。なるほどこの変更が問題ないのを確認するための eb5a01970ffd7a84029cf7d541c942418a2d8f44 のテストケース追加だったわけですね。

[5342fcb67f] Nobuyoshi Nakada 2022-06-03 05:09:11 UTC

Module#autoload および Kernel#autoload の rdoc 用コメントの call-seq の第1引数の名前を module から const に変更しています。autoload で定義させるのは Module/Class に限らないので、ということでしょう。

[1b44fcf222] Nobuyoshi Nakada 2022-06-03 05:10:30 UTC

さらに Module#autoload と Kernel#autoload の rdoc 用コメントに既に定数が定義されていた時や別の autoload が設定されていた時の挙動について追記しています。

[512d8a25e9] git 2022-06-03 05:13:31 UTC

version.h の日付更新

[a4721ec6cd] Kouhei Yanagita 2022-05-27 21:04:02 UTC

Numeric#div の rdoc 用コメントに Complex もこの実装を使っていると挙げられていましたがこれは事実と異なる(Complex では undef されている)ので削除しています。

[d142eff658] Nobuyoshi Nakada 2021-02-06 04:04:29 UTC

拡張ライブラリ nkf の定数テーブル encoding_name_to_id_table や nkf_char に static 修飾子や const 修飾子をつけたり、いくつかの構造体の typedef にメンバーに const 修飾子をつけてたのをかわりに構造体全体に const をつけるように変更したりしています。この場合全メンバーに const をつけたのと同じ意味になるのかな。 https://github.com/ruby/nkf/pull/1

ruby-trunk-changes 2022-06-02

今日は YJIT の不具合修正、Bignum の乗算の不具合修正などがありました。

[9d18661e1d] Noah Gibbs 2022-06-01 14:22:08 UTC

YJIT のコード生成実装でオペランドなどのオブジェクトのクラスが前提を満たす時の最適化で T_STRING の時にクラスが String じゃなくても(String を継承したサブクラス)最適化してしまっていた不具合を修正しています。 https://github.com/ruby/ruby/pull/5969

[689b5ae752] Nobuyoshi Nakada 2022-05-27 02:27:15 UTC

defs/gmake.mk から YJIT 関連のルールを yjit/yjit.mk というファイルに分離して include で取り込むようにしています。

[f35c5a2856] git 2022-06-02 01:13:03 UTC

version.h の日付更新

[9108db961d] Nobuyoshi Nakada 2022-05-09 08:15:59 UTC

bignum.c の Bignum の乗算の実装でバッファを確保しなおすかどうかの判定の計算を修正しています。確保が必要なのにしてないケースがあったみたいです。

[b96a3a6fd2] Nobuyoshi Nakada 2022-06-02 06:32:00 UTC

0de1495f358e9b892dfa63d4b74f59b1d2903703 および 0c36ba53192c5a0d245c9b626e4346a32d7d144eGC.compact 関連のメソッドの実装を C 実装に戻して GC.compact がサポートされてない環境で respond_to? で判定できるようにするため rb_f_notimplement() を使うようにしてたもののうち GC.verify_compaction_references はまた ruby 実装にして、compaction がサポートされない環境でのみ C の rb_define_singleton_method() によるメソッド定義をするようにしています。 [ruby-core:108543] [Bug #18779]

[af90433876] Nobuyoshi Nakada 2022-06-02 07:03:55 UTC

ruby 実装の組み込みメソッド定義の関数のために引数の数ごとに関数の prototype 宣言をしていたのを関数ポインタの型の typedef として定義して b96a3a6fd2093e1dbea5491c002da515652dd347 で rb_f_notimplement() を渡すところで複雑な関数型へのキャストを型名を使えるようにしています。

[1d924ae410] David Rodríguez 2022-06-02 08:31:34 UTC

bundler のテストに消し忘れの puts が残ってたのを削除しています。

ruby-trunk-changes 2022-06-01

今日は rubygems と bundler の legacy な実装の削除や不具合修正などがありました。

[fd83b8887f] David Rodríguez 2022-05-31 07:49:50 UTC

bundler が Gemfile の記述の警告を冗長に出力していたのを1回にまとめる修正。

[936e54063d] git 2022-05-31 15:14:46 UTC

version.h の日付更新

[ebb534801f] David Rodríguez 2022-03-22 12:52:19 UTC

rubygems の Gem::Specification の Marshal.load 用の _load メソッドで load した配列から Psych::PrivateType というクラスのインスタンスを削る処理がもう不要になってたとのことで削除しています。

[89ec3def74] David Rodríguez 2022-03-22 13:12:47 UTC

rubygems の Gem::Specification の Marshal.load のテストのチェック方法を緩めています。これも先の変更と同じく過去の不具合に対応したものみたいなので ebb534801f7032476fa069be11ee1e52f54819f5 の変更への追随なのかもしれません。

[8381c568e7] David Rodríguez 2022-03-22 13:21:59 UTC

ebb534801f7032476fa069be11ee1e52f54819f5 のさらに続きで rubygems の Gem::Specification の Marshal.load 対応で文字列を load した時に定数 YAML がなくて例外が発生したと思われる時には Psych を YAML に代入(Object.const_set)してから再実行するように fallback しています。

[f5b88d93ae] David Rodríguez 2022-05-30 19:46:47 UTC

bundler の Bundler::StubSpecification#full_gem_path で method_missing を呼ぶ fallback を削除しています。なんとなく古式ゆかしいメタプログラミング作法を感じますね。

[0a6b9924bd] David Rodríguez 2022-05-30 19:48:49 UTC

bundler の Bundler::StubSpecification に full_gem_path= というメソッドを追加しています。 default gems 用の specification に使われるクラスみたいですね。 bundle install 時の動作のために setter が不足してたみたいです。

[1177665e62] Ellen Marie Dash 2022-03-31 23:44:31 UTC

bundler の bundle remove サブマンドの実装に Bundler.reset_paths! の呼び出しを追加しています。コミットメッセージによると Gemfile.lock から削除した gem も消すために必要だったみたいです。

ruby-trunk-changes 2022-05-31

今日は TracePoint の不具合修正などがありました。

[c50c9d4051] Burdette Lamar 2022-05-30 17:29:54 UTC

標準添付ライブラリ fileutils の rdoc 用コメントのサンプルに謎のコマンド実行の Kernel#system の呼び出しを追加したり(たぶん結果を表示してみるという意味じゃないかと思うけどその内容は埋め込まれてないので意味あるのかな……)、いくつかのメソッドの説明を強化したりしています。

[3bef9584a8] git 2022-05-30 17:30:23 UTC

version.h の日付更新

[a687756284] Alan Wu 2022-04-29 22:54:16 UTC

TracePoint に複数の種類のイベントを指定した時に不正なメモリ参照をする可能性があった不具合を修正しています。 [ruby-core:108237] [Bug #18730]

[7a0e681426] "dependabot[bot]" 2022-05-30 15:23:54 UTC

rubygems の Rust 実装の gem のテスト用のサンプルの Cargo.lock ファイルのパッケージのバージョンを更新しています。dependabot で更新するように(upstream で)設定されているみたいですね。

[31bd79dda3] Jakub Kulík 2022-05-30 22:30:57 UTC

template/Makefile.in の DTRACE_DEPENDENT_OBJS 変数に $(YJIT_OBJ) を追加しています。 [ruby-core:107071] [Bug #18480]

[360c5fd6f9] "dependabot[bot]" 2022-05-30 22:12:24 UTC

7a0e68142630cca9679cb3c19bf58de899a195be と同様に rubygems の Rust 実装 gem のテスト用のサンプル Cargo.lock のパッケージバージョンの更新。

[0cae30e1d3] Hiroshi SHIBATA 2022-05-31 02:40:38 UTC

ファイルシステムFIFO を require した時に GVL 解放していることを確認するテストが FreeBSD でエラーになることがあるとのことで omit でスキップするようにしています。

[9241d75a61] Jemma Issroff 2022-05-31 03:50:39 UTC

doc/hacking.md を削除して doc/contributing/building_ruby.md と doc/contributing/testing_ruby.md に記述を移動しているようです。 https://github.com/ruby/ruby/pull/5963

[e2b421d679] David Rodríguez 2022-05-29 14:47:22 UTC

bundler の依存関係解決で conflict が起きた時の対処法についてのメッセージで Gemfile を整理してから bundle update してみる、と書いてたのを Gemfile.lock を削除してから bundle install しなおすというふうに変更しています。

ruby-trunk-changes 2022-05-30

今日は拡張ライブラリ stringio の区切り文字とキーワード引数 chomp の組合せで起きる様々な不具合の修正、要求 Rust バージョンの引き下げ、bundler の不具合修正、一部テストの FreeBSD でのスキップなどがありました。

[373dabe00a] David Rodríguez 2022-05-29 11:51:13 UTC

bundler の lockfile を File#flock でロックする(ややこしい)時に無視する例外クラスに Errno::EPERM を追加しています。

[08b82e6b40] David Rodríguez 2022-05-29 13:30:44 UTC

373dabe00a71214e12702ff1ccda88f865b504c4 と同じく bundler が lockfile を File#flock でロックする時に無視する例外に Errno::EROFS も追加しています。

[93d1eb71b8] git 2022-05-29 15:27:59 UTC

version.h の日付更新

[899c90cf8a] Alan Wu 2022-05-29 17:43:02 UTC

YJIT 用の Rust 自走の Cargo.toml で rust の要求バージョンを 1.60.0 から 1.58.1 に落としています。

[cc63718694] Hiroshi SHIBATA 2022-05-30 01:53:45 UTC

Thread#join とシグナルハンドラの組合せのテストが FreeBSD で失敗するとのことで omit で実行しないようにしています。 [ruby-core:107790] [Bug #18613]

[11793f897c] Nobuyoshi Nakada 2022-05-28 06:52:57 UTC

template/Makefile.in で変数 YJIT_LIBS と OBJEXT をその場で展開せずに変数の参照として埋め込むようにしています。

[bb6357cddd] Nobuyoshi Nakada 2021-11-16 08:39:32 UTC

拡張ライブラリ stringio の StringIO#ungetbyte の実装のちょっとしたリファクタリングとついでに? (どっちかというとこっちが本命?)テストの追加をしています。

[1f82269f4e] Jeremy Evans 2022-05-26 22:22:28 UTC

拡張ライブラリ stringio で StringIO#each や #readlines で区切り文字の引数とキーワード引数 chomp: true を渡すと無限ループに陥いっていた不具合を修正しています。 https://github.com/ruby/stringio/pull/30 [Bug #18769]

[adaaf12857] Jeremy Evans 2022-05-26 19:17:55 UTC

拡張ライブラリ stringio の StringIO#each や #readlines で区切り文字の引数に明示的に nil を渡してかつキーワード引数 chomp: true を渡した時に誤った分割が行なわれていた不具合を修正しています。 [ruby-core:108502] [Bug #18770]

[7e3920f0d9] Jeremy Evans 2022-05-30 03:56:13 UTC

adaaf12857ce41d35b282e3fb5aa330934ce45c6 の続きで新規に導入したローカル変数の宣言を関数の先頭に移動しています。 [ruby-core:108502] [Bug #18770]

[609d73e892] Jeremy Evans 2022-05-26 22:01:44 UTC

拡張ライブラリ stringio の StringIO#each や StringIO#readlines などで区切り文字として空文字列が指定され複数の改行を1つの区切りとして扱うパラグラフモードで呼び出しつつキーワード引数 chomp: true を指定した時に改行が全て消えてなかったのを修正しています。 [ruby-core:108500] [Bug #18768]

[12e34a4276] Jeremy Evans 2022-05-30 04:25:05 UTC

rubyspec の StringIO の行分割系メソッド群(each, readlines など)のテストを 609d73e8925f807786686caf635178bb1de74256 のパラグラフモードの修正に追随して変更しています。

[4cc880e994] Hiroshi SHIBATA 2022-05-30 05:28:27 UTC

Thread の IO 待ち中の kill についてのテストが FreeBSD 12 で失敗するとのことで omit でスキップするようにしています。 [ruby-core:107790] [Bug #18613]

[d3e986d9ab] Nobuyoshi Nakada 2022-05-30 04:46:31 UTC

拡張ライブラリ stringio の StringIO#set_encoding に ":" で区切った external encoding と internal encoding の両方を指定する記法に対応するようにしています。

[7976142791] Nobuyoshi Nakada 2022-05-30 05:16:03 UTC

d3e986d9ab9a880b58a0b4fc68dadc2b10f4cf12 の続きで拡張ライブラリ stringio で文字列の mode 指定から Encoding を抜き出す処理で internal と external の Encoding の解釈の順序が間違ってた? のを修正しています。

[0a974e4700] David Rodríguez 2022-05-27 19:08:14 UTC

bundler で不要になっていたコードの削除。

[7001e34323] David Rodríguez 2022-05-27 21:06:15 UTC

bundler のテストで Windows 環境で skip していたテストを Tempfile を利用しないように書きなおして修正しています。

[0d7d8f3777] David Rodríguez 2022-05-27 21:09:29 UTC

bundler のテストで symbolic link を作るために標準添付ライブラリ fileutils を使ってたのを File.symlink を使うようにして fleutils 不要にしています。

[ea31c5bcd1] David Rodríguez 2022-05-27 18:46:42 UTC

bundler の bundle install 時に BUNDLE_PATH のファイルパスを symbolic link にしているとエラーになる場合があった不具合を修正しているようです。

[d6684f063b] David Rodríguez 2022-05-28 16:37:41 UTC

bundler の config ファイルに "#mirror.https://..." のようなコメントアウトされた? 行があった時の不具合修正みたいです。

[a78f003c30] Hiroshi SHIBATA 2022-05-30 09:40:26 UTC

File#flock のテストも FreeBSD で失敗することがあるとのことで omit で除外するようにしています。 [ruby-core:107790] [Bug #18613]

ruby-trunk-changes 2022-05-29

今日はドキュメントの修正だけでした。

[8038d5e40a] Burdette Lamar 2022-05-28 19:20:00 UTC

abd473928ec54e2ee990d178e42f2f544f21b041 で変更した Enumerable#slice_after, #slice_when, #chunk_while の rdoc 用コメントの説明が間違っていたとして revert しています。 https://github.com/ruby/ruby/pull/5952

[931b013b9f] git 2022-05-28 19:20:27 UTC

version.h の日付更新

ruby-trunk-changes 2022-05-28

今日は主に IO の write 系の実装のリファクタリング(出力中の割り込みポイントを減らす)や rubygems の gem update サブコマンドの不具合修正/リファクタリングなどがありました。

[fc184ca1f7] John Hawthorn 2022-02-06 21:48:09 UTC

メモリを特定の型の配列として扱うための API Memory View の lookup_memory_view_entry() 内で引数のクラスの継承関係を辿るのに rb_class_get_superclass() のかわりに Class#superclass の実装である rb_class_superclass() を利用するようにしています。 adc709adb8c7fbe83a20b7c9b554856c98346a4b と同様に不要な T_ICLASS をスキップするためのようです。

[c3fd2e497b] git 2022-05-27 20:38:55 UTC

version.h の日付更新

[ac405dc214] Jemma Issroff 2022-05-26 19:42:42 UTC

misc/lldb_cruby.py の object space の page の内容を出力する関数で未使用の slot の表示に freelist の次の要素のアドレスを追加しています。変数名は klass となってるけたぶんそういうことだと思う。

[8a13a2e8d1] Jemma Issroff 2022-05-26 19:36:41 UTC

struct RBasic::flags のビットフラグで T_CLASS 型の時に使う定数を FL_USER5〜FL_USER8 の範囲を使って定義していたのを FL_USER0〜FL_USER3 の範囲に移動しています。軽く grep した感じで RUBY_FL_SINGLETON が FL_USER0 で被ったりしてるけど大丈夫なのかな?

[ce23cfa518] Samuel Williams 2022-01-08 12:47:51 UTC

io.c の io_binwrite_string() から主要な処理を io_binwrite_string_internal() に切り出して渡されたバッファの途中までしか書き出せてなかったら続きを呼び出すようループする実装にしています。主な呼び元の io_binwrite() でしていたリトライをこの関数内に移動したという感じです。

[15ebfe2849] Samuel Williams 2022-01-08 22:41:20 UTC

ce23cfa5182bb53e8b6555fb6a5b2846cd559922 と同様に io_binwritev() でバッファを全て書き出すまでリトライしていたのをそこから呼ぶ io_binwritev_internal() (元は call_writev_internal() という関数名だったのを改名している)内でループするようリファクタリングしています。コミットメッセージをみると i_binwritev() を atomic にする、とありますがなにか機能的な意味があるのかなこれ?

[216593f59b] Samuel Williams 2022-01-09 06:46:42 UTC

benchmark/io_write.rb という IO#write のマイクロベンチマークスクリプトを追加しています。どうも先の 2つの変更 ce23cfa5182bb53e8b6555fb6a5b2846cd55992215ebfe28493560f8368fc9a2fe7d9b5913051b84 はロック取得の粒度を荒くして性能をかせぐという目的があったみたいですね。

[585e97142d] machty 2022-01-16 14:44:41 UTC

io.c の io_allocate_write_buffer() で書き込み用のバッファを新規確保してなくても rb_io_t::write_lock が未初期化なら mutex を初期化するようにしています。

[c6cd9e180e] Samuel Williams 2022-05-09 10:21:07 UTC

io.c の fptr_finalize_flush() 内の変数 err を error に改名しています。コミットログをみるとなにか他にも変更してそうな雰囲気なんですけど、たぶん改名と少しスタイルの変更だけだと思う。

[ac499bb511] Samuel Williams 2022-05-09 10:21:47 UTC

io.c の finish_writeconv() 内でリトライに goto 文を使っていたのを while 文によるループにまかせるようにリファクタリングしています。

[4efccd28e4] Samuel Williams 2022-05-09 10:36:33 UTC

io.c の io_binwritev_internal() の 15ebfe28493560f8368fc9a2fe7d9b5913051b84リファクタリング時にコピーしてきた errno = EAGAIN の代入の削除。これ要らない気がしたんだけどやっぱり不要だったみたい。

[1589ac6291] Samuel Williams 2022-05-09 11:44:44 UTC

io.c の io_binwrite_string() や io_binwritev_internal() で書き込み用の関数が書き込んだサイズとして 0 を返した時に errno = EAGAIN をセットしておくようにしています。

[753d305503] Samuel Williams 2022-05-10 01:22:09 UTC

io.c で rb_io_t::write_lock が存在する時だけロック取得しているか確認して呼び出し、そうでない時は rb_thread_io_blocking_region() を経由して呼び出すみたいなことをしていたところが 585e97142d4df1e27633afaf98ba589512215c58 で不要になった為? 分岐をなくしています。しかし rb_io_t::write_lock が Qnil になるということはあるみたいでそのチェックをしているように変更しているところもあります。いつ Qnil 入れてるんだろう……と思ったら filnalize 時に 0 をセットしてたのを Qnil を入れるように変更していました。うーんこれ必要なの? また ce23cfa5182bb53e8b6555fb6a5b2846cd55992215ebfe28493560f8368fc9a2fe7d9b5913051b84リファクタリングで long 型の変数を return している関数なのに戻り値を VALUE で宣言していたのはどちらも ssize_t に修正しています。

[6b0131db6f] Samuel Williams 2022-05-28 02:42:02 UTC

Kernel#p の実装で rb_io_flush() を呼び出す時にも rb_uninterruptible() を経由するようにして割り込みされないようにしています。

[e78c1ddb1e] David Rodríguez 2022-05-25 11:33:20 UTC

rubygems の gem update サブコマンドの --install-dir 指定があった時にそれを利用していなかったところがあったのを修正しています。

[e9c4e37f1f] David Rodríguez 2022-05-26 10:44:33 UTC

rubygems の gem update サブコマンドの実装の Gem::Commands::UpdateCommand#highest_remote_name_tuple で引数の spec から platform などが一致しているものを絞る処理は呼び元で行なわれているため冗長とのことで削除しています。