ruby-trunk-changes 2022-09-04

今日は Range#last の不具合修正と昨日に続いて主に cross compiling 時のためのビルドプロセスの修正などがありました。

[7b11247b4d] Nobuyoshi Nakada 2022-09-03 12:02:29 UTC

7c67d0fd79a3cffe857587fa3cf576b611023840 の変更で $(RBCONFIG) の依存関係に修正が必要だったみたいです。しかし $(HAVE_BASERUBY) の判定を 2回書いているけどこれはどう読むんだろう。

[a01271c1c4] Nobuyoshi Nakada 2022-09-03 12:37:24 UTC

configure で cross compiling 時には変数 BOOTSTRAPRUBY_COMMAND に fake.rb を -r オプションで読み込ませるように修正しています。これも 7c67d0fd79a3cffe857587fa3cf576b611023840 で自動生成に BOOTSTRAPRUBY を利用するようにした変更の追随のためだと思われます。

[2767cb2825] Nobuyoshi Nakada 2022-09-03 12:57:17 UTC

tool/make-snapshot で noarch-fake.rb という空ファイルを生成しておくようにしています。今度は a01271c1c46079cb6f7f32051f1253cf3d9bca6b の変更に追随するためだと思われます。

[fe865c5262] Burdette Lamar 2022-09-03 13:36:44 UTC

Time の rdoc 用コメントの手直し。Time#strftime のフォーマット指示子の説明が別ファイルへのリンクになってしまったので ri ツールなどで参照する時にちょっと面倒だなぁ。 https://github.com/ruby/ruby/pull/6320

[baf050100d] Nobuyoshi Nakada 2022-09-03 14:26:07 UTC

fe865c5262bb2daea64f488b9247780e5fae7ac7 の rdoc 用コメントからの別ファイルへのリンクのパスを修正。

[0111dc5b79] Nobuyoshi Nakada 2022-09-03 14:47:46 UTC

doc/command_injection.rdoc のドキュメント内でバッククオートをマークアップとして解釈させないようにエスケープを追加しています。

[45004bba6b] Nobuyoshi Nakada 2022-09-03 13:24:49 UTC

common.mk の fake.rb の依存関係に id.h を追加しています。

[13a59747c8] git 2022-09-03 18:01:51 UTC

version.h の日付更新

[cfa40e225a] Takashi Kokubun 2022-09-04 03:01:50 UTC

MJIT のコマンドラインオプションを保持する構造体 struct mjit_options で真偽値用のメンバーの型を char から bool に変更しています。

[bbe5ec7846] Jean Boussier 2022-09-04 07:44:59 UTC

始点と終点が同じで終点を含む整数の Range に対して末尾の要素を Range#last で取り出そうとすると本来は 1つだけ要素が含まれた配列を返すはずが空の配列が返されていたという不具合を修正しています。 [ruby-core:109834] [Bug #18994]

ruby-trunk-changes 2022-09-03

今日は主に cross compiling 時を考慮したビルドプロセスの修正などがありました。

[5044832fec] Nobuyoshi Nakada 2022-09-02 13:11:12 UTC

0608a9a08693286a7d84845a216927ff2e3c9951 で Marshal.dump の T_BIGNUM の整数の出力を最適化するために導入した w_bigfixnum() の定義を long が 64 bit 以上の環境でのみ定義するようにしています。

[1b8a644b44] Nobuyoshi Nakada 2022-09-02 18:24:43 UTC

標準添付ライブラリ reline のコメントの typo 修正。

[6bb2a43ca3] git 2022-09-02 18:28:11 UTC

version.h の日付更新

[bc5b9be1ee] Nobuyoshi Nakada 2022-09-02 13:41:07 UTC

template/Makefile.in、win32/Makefile.sub に書いてた rbconfig.rb の依存関係を common.mk に移動しています。また template/Makefile.in の verconf.h から $(RBCONFIG) への依存関係を削除しています。

[c4f2f2ef2b] Nobuyoshi Nakada 2022-09-03 07:20:58 UTC

cygwin/GNUmakefile.in で @var@ のようにテンプレート展開時に展開される変数のうち Makefile.in で既に定義ずみの変数があるものはそれを利用するようにリファクタリングしているようです。

[652a624891] Nobuyoshi Nakada 2022-09-03 06:10:23 UTC

GitHub Actions の WASM 用の workflow で make ruby でビルドしているところに make mini と明示的に miniruby をビルドするようターゲットに追加しています。通常は ruby のビルドの途中で miniruby もビルドされますが cross compiling 時には作られないため。

[d8f81ffdff] Nobuyoshi Nakada 2022-09-03 05:45:23 UTC

common.mk に cross compile 時の builtin.o の依存関係に mini_builtin.c と miniprelude.c を追加しています。 miniruby 用の ruby 製組み込みメソッド定義の読み込みと prelude のためのソースコードだと思いますが cross compile 時には ruby 本体のビルド時にも必要になるのかな。

[21a5da3c4c] Nobuyoshi Nakada 2022-09-02 18:21:23 UTC

configure で MinGW 環境で MSys の shell がドライブレターつきのコマンドが使えるか確認して、だめだったら BASERUBY が使えないという設定にするようにしています。

[6f5305e0d2] Nobuyoshi Nakada 2022-09-02 16:08:47 UTC

exe/ruby の依存関係から miniruby を削除して miniruby のかわりに $(BOOTSTRAPRUBY) を利用してスクリプトを実行するようにしています。

[8f13d75a8c] Nobuyoshi Nakada 2022-09-02 18:31:30 UTC

common.mk の common-srcs ターゲットの依存関係に preludes を追加しています。

[7c67d0fd79] Nobuyoshi Nakada 2022-09-02 14:41:41 UTC

enc/ のソースファイルや VM 命令のソースコードなどビルド時に生成する時に利用する ruby を $(MINIRUBY) から $(BOOTSTRAPRUBY) に変更して BASERUBY が使える環境では BASERUBY を利用するようにしています。

ruby-trunk-changes 2022-09-02

今日は YJIT の不具合修正や定数の inline cache のための専用の VM 命令の導入、Complex の coerce の対応の強化などがありました。

[462a8be511] Nobuyoshi Nakada 2022-09-01 10:54:46 UTC

ee09f75a6ba2c485260f07eb7d9382850def56bf で切り出した VCS#revision_header メソッドの未使用の引数 changed を削除して他の引数を省略可能にしています。パッケージ作成のための revision.h 生成の時の呼び出し時に省略するため。

[4144abee42] Takashi Kokubun 2022-09-01 18:55:39 UTC

YJIT 用のコマンドラインオプション --yjit-dump-disasm=all を指定した時に outlined cb なるコード部分もダンプするように対応しているようです。 https://github.com/ruby/ruby/pull/6309

[419118473e] git 2022-09-01 18:56:03 UTC

version.h の日付更新

[064944c902] Takashi Kokubun 2022-09-01 20:38:38 UTC

YJIT の arm64 アーキテクチャレジスタの使いまわしで SEGV が発生することがあった不具合を修正しています。 https://github.com/ruby/ruby/pull/6312 [ruby-core:109789] [Bug #18985]

[7064d259bc] Takashi Kokubun 2022-09-01 21:12:24 UTC

NEWS の YJIT の項目に arm64 サポートの追加と Rust のバージョンの要求について追記しています。 [Feature #18481]

[679ef34586] John Hawthorn 2022-08-10 17:35:48 UTC

定数の inline cache の解決をするための専用の VM 命令 opt_getconstant_path というのと導入して opt_getinlinecache/opt_setinlinecache を組み合わせて実現しているのを 1命令で実行するようにしています。効率化というよりも命令列で参照している定数を知るために opt_getinlinecache/opt_setinlinecache の間に putobject しているところの値を知る必要があって大変なので、VM 命令列を1度スキャンするだけで定数名がわかるようにしたいというのが動機みたいです。

[1cc97412cd] John Hawthorn 2022-07-27 01:19:44 UTC

679ef34586e7a43151865cb7f33a3253d815f7cf の変更で未使用になった関数 rb_iseq_each() の定義を削除しています。

[fc2d9fedc2] John Hawthorn 2022-08-25 22:01:27 UTC

iseq_peephole_optimize() による VM 命令列の peephole 最適化で getblockparam のあとに分岐の命令(branchif/branchunless)が置かれてた時に getblockparam を getblockparamproxy に置き換えるようにしています。ブロック引数の Proc オブジェクト化を遅延するため。

[fb5fa84f83] Takashi Kokubun 2022-09-02 03:05:13 UTC

.cirrus.yml で test/ruby/test_gc_compact.rb のテストを除外して別コマンドで分けて実行するようにしていたのをやめています。 https://github.com/ruby/ruby/pull/6310

[e896b33860] Takashi Kokubun 2022-09-02 03:05:49 UTC

.cirrus.yml で YJIT を有効にしたテストを arm64 環境で実施するようにしています。 https://github.com/ruby/ruby/pull/6313

[a9b59e24f4] Nobuyoshi Nakada 2022-08-31 01:59:05 UTC

complex.c の f_zero_p() という関数の戻り値を int から bool に変更し、safe_mul() の引数の int も bool に変更しています。

[9212d96307] Nobuyoshi Nakada 2022-08-31 02:01:59 UTC

Complex#<=> で d5f50463c2b5c5263aa45c58f3f4ec73de8868d5 で Numeric でない値を渡された時の coerce 呼び出し対応した続きで real? に false を返すようなオブジェクトの時の対応を追加しています。 [ruby-core:109311] [Bug #18937]

[b5cf356447] Nobuyoshi Nakada 2022-08-31 04:20:40 UTC

9212d963070612e669c40e5fde7954f19d648002 のテストで使うクラスを Numeric を継承するように修正しています。また Complex.polar の実装や Complex を生成する f_complex_new2() で引数に Complex が渡された時も assert() で異常終了させず対応するようにしています。

[92d2476208] Nobuyoshi Nakada 2022-09-02 05:49:42 UTC

compile.c、marshal.c、proc.c のコーディングスタイルの修正のみ。

[e7a8e3e91f] Hiroshi SHIBATA 2022-09-02 06:25:46 UTC

spec/README.md に make test-bundler-parallel というターゲットと特定のファイルのみテスト実行する指定のしかたについて追記しています。

[740d530bb0] Hiroshi SHIBATA 2022-09-02 06:30:46 UTC

spec/README.md に syntax_suggest のテストを実行する make test-syntax-suggest とこれも特定のファイルのみテスト実施する方法について追記しています。

[f069bc79f2] git 2022-09-02 06:57:18 UTC

spec/README.md のファイル末尾に改行がなかったので追加しています。

[7ff50ee35c] Hiroshi SHIBATA 2022-09-02 05:25:51 UTC

標準添付ライブラリ reline の Reline::GeneralIO に hide_cursor と show_cursor というクラスメソッドを追加しています。 Reline::ANSI などに追加されたメソッドに追随が漏れてたみたいですね。

[0d2422cf63] Hiroshi SHIBATA 2022-09-02 05:26:17 UTC

標準添付ライブラリ reline の Reline::LineEditor#padding_space_with_escape_sequences というメソッドでダイアログ内の文字列の末尾に空白を追加する時にその数の計算結果が負になってしまったら無視して 0 にしておくようにしています。 Aracritty という端末? でこの問題が起きるそうです。

ruby-trunk-changes 2022-09-01

今日は主に YJIT の arm64 向けの機械語出力の小さな変更や rubygems の platform 対応の arm-linux-eabi 対応、標準添付ライブラリ did_you_mean の不具合修正などがありました。

[be55b77cc7] Kevin Newton 2022-08-31 19:44:26 UTC

YJIT の arm64 アーキテクチャ向け実装で中間表現から機械語への変換時の条件つき命令の生成のロジックを整理しています。 https://github.com/ruby/ruby/pull/6305

[036bb55980] git 2022-08-31 19:44:44 UTC

version.h の日付更新

[d41be1ac37] Burdette Lamar 2022-08-31 21:36:22 UTC

Time の rdoc 用のコメントやファイルの移動や手直しなど。 https://github.com/ruby/ruby/pull/6308

[811ca75f3b] Nobuyoshi Nakada 2022-08-31 09:37:07 UTC

CI の設定ファイル .cirrus.yml でテストの make のオプションに数値の指定のない -j を渡していたのを削っています。そのほうが速いからということみたいです。 https://github.com/ruby/ruby/pull/6307

[a0d2320f30] Takashi Kokubun 2022-09-01 00:16:29 UTC

doc/yjit/yjit.md に YJIT のビルドのために必要な Rust のバージョンの条件を追記しています。

[ce70cb6469] Takashi Kokubun 2022-09-01 00:18:18 UTC

a0d2320f30109bbfcb36d3ece1c67cad2f08541c でdoc/yjit/yjit.md に追記した Rust バージョンのところでリンクにした Cargo.toml へのリンクを ruby リポジトリの構造にあわせて修正しています。

[941e9be0d9] Mau Magnaguagno 2022-02-22 11:47:20 UTC

標準添付ライブラリ reline のダイアログ表示用の処理で不要な文字列への空文字列の連結を削っています。

[aded6971ad] なつき 2022-08-31 05:08:45 UTC

rubygems で arm の環境(arm-linux-eabi)を platform として処理できるように Gem::Platform を修正しています。

[aa5c1a0483] なつき 2022-08-31 17:33:04 UTC

aded6971ad37a75e4eb0493159c19c94971e80e4 の再修正で arm-linux-eabi のアーキテクチャglibc でない libc (msul など)を使う環境の考慮も追加しています。

[f229b36087] Hiroshi SHIBATA 2022-09-01 07:15:51 UTC

806583c093ecc2d67830f0a8f0d94decf0ed71e5ruby のテスト用の assert_separately メソッドで子プロセス内で require する順序を変更しています。標準添付ライブラリの upstream でテストする時に問題があったみたいです。ということは、バックポートは必要なのかな……? テスト時にローカルの ruby のソースツリーをみるのだろうか。

[59e8569cf9] Nobuyoshi Nakada 2022-09-01 05:14:46 UTC

標準添付ライブラリ reline で Windows 環境で環境変数 TERM が dumb だった時には Reline::GeneralIO を使って端末の機能を利用してなかったのを常に Reline::Windows を利用するようにしています。

[f3becd73e3] Hiroshi SHIBATA 2022-09-01 08:02:52 UTC

tool/sync_default_gems.rb の did_you_mean の同期時に test/did_you_mean/lib を削除するようにしています。upstream に tool/lib/core_assertions.rb などをコピーしているということなのかな。じゃあ ruby/ruby の(特に安定版の)内容を変更しても直接は影響はなさそう。

[762fca9b12] Nobuyoshi Nakada 2022-08-31 12:53:01 UTC

tool/make-snapshot で Kernel#open を利用していたところを File.open に変更したり、ファイルの作成に File.open を使ってたのを File.binwrite を使う特異メソッドを定義してこれを使うようにしたりというリファクタリング

[ee09f75a6b] Nobuyoshi Nakada 2022-08-31 10:51:49 UTC

tool/file2lastrev.rb から revision.h の自動更新の内容を構築する処理を tool/lib/vcs.rb に VCS#revision_header というメソッドとして切り出しています。

[55b1600987] Nobuyoshi Nakada 2022-08-31 10:56:57 UTC

ee09f75a6ba2c485260f07eb7d9382850def56bf で切り出した VCS#revision_header メソッドにキーワード引数 time を追加して RUBY_RELEASE_DATETIME マクロの定義を出力するかどうかを指定できるようにして、tool/make-snapshot でパッケージ作成する時の revision.h の生成にも VCS#revision_header を呼び出すようにしています。パッケージ作成時には time: false を指定して RUBY_RELEASE_DATETIME の定義は出力しないようにしています。

[f67ab7f30c] Imir Kiyamov 2022-05-20 13:32:11 UTC

標準添付ライブラリ did_you_mean で変数名とメソッド名などで同じ名前が存在していた時に候補に重複して出現することがあったのを修正しています。

ruby-trunk-changes 2022-08-31

今日は net/protocol のバッファの取扱いの最適化などがありました。

[497b5ee180] Takashi Kokubun 2022-08-30 19:44:08 UTC

CI の設定ファイル .cirrus.yml で rdoc 生成のタスクの削除? と btest の make のターゲットを btest から test に変更しています。だいたいいっしょですが make test のほうが known_bugs.rb の実行などを含んでてちょっとだけ対象が広いという感じですね。

[918a658556] Takashi Kokubun 2022-08-30 19:44:55 UTC

同じく .cirrus.yml に YJIT 関連の Rust コードのテストのため? cargo test の実行をするタスクを追加しています。

[5dbc725f4d] Takashi Kokubun 2022-08-30 20:02:26 UTC

YJIT の Rust 実装の arm64 アーキテクチャ向けのコードでテストのスキップのための cfg attribute を追加しています。

[4a4daf00af] Maxime Chevalier-Boisvert 2022-08-30 20:04:02 UTC

497b5ee1803e67efe641671276a05831ad788898 の続きで .cirrus.yml で make test を実行するようにしたタスクの名前も make_btest_script から make_test_script に変更しています。

[f4cdfff084] git 2022-08-30 21:22:01 UTC

version.h の日付更新

[221a523683] Takashi Kokubun 2022-08-31 00:07:27 UTC

doc/mjit/mjit.md という MJIT のドキュメントのファイルを追加しています。主に MJIT 自体の開発のための Tips を書く場所みたいです。

[739380c97d] Jean Boussier 2022-08-20 09:25:54 UTC

net/xxx 系の標準添付ライブラリが共通して使っているソケット通信用の net/protocol の Net::BufferedIO クラスのバッファ用の文字列オブジェクトを極力変更せずに読み出し時に部分文字列を切り出すようにして不要なオブジェクトの生成を押さえるように最適化しています。実装は複雑になりましたがベンチマークは若干速く……うーんそんなにめざましい効果という感じではないですけどね。

[08c3d08a18] Nobuyoshi Nakada 2022-08-31 06:23:50 UTC

rubystub.c に #include "internal/missing.h" を追加しています。 ruby_init_setproctitle() の宣言のために必要とのこと。

[dc66f7246a] Nobuyoshi Nakada 2022-08-31 06:24:37 UTC

defs/gmake.mk の SCRIPTPROGRAMS という変数に設定するファイルを探索するディレクトリの libexec/ を bin/ に変更しています。

[22542a6fb0] Nobuyoshi Nakada 2022-08-31 06:28:31 UTC

defs/gmake.mk で依存関係のためのタイムスタンプファイル .exec.time の利用をやめて SCRIPTBINDIR ディレクトリを単に mkdir するようにしています。既にあっても再実行しても問題ないからということみたいですね。元はなんでタイムスタンプファイル利用してたんだろ。

[9dc60653db] Nobuyoshi Nakada 2022-08-30 05:16:02 UTC

sprintf.c の rb_str_format() という関数内で文字列の coderange をスキャンしてオブジェクトにセットする一連の処理を update_coderange() というマクロに切り出してリファクタリングしています。引数にない変数などに依存しているのでこの関数内でのみ使えるマクロですね。

[576bdec03f] Nobuyoshi Nakada 2022-08-30 09:12:08 UTC

Kernel#sprintf や String#% で %c 指示子で 128-255 の範囲の 8bit 文字を追加する時に文字列オブジェクトの Encoding を ASCII-8BIT に変更するようにしています。 [ruby-core:109645] [Bug #18973]

[2b967cd4b7] Nobuyoshi Nakada 2017-08-30 13:49:53 UTC

template/fake.rb.in でシンボルの置換時に行末のバックスラッシュでエスケープされた改行? に対応しているみたいです。

[32a0591515] Nobuyoshi Nakada 2017-08-30 14:23:38 UTC

ruby -v オプションなどで表示するためのマクロ RUBY_DESCRIPTION_WITH の定義を version.h から version.c に移動しています。

ruby-trunk-changes 2022-08-30

今日は主に YJIT の arm64 アーキテクチャ対応の大量の変更と mspec/rubyspec の更新がありました。

[4bc782ed87] Yusuke Endoh 2022-08-29 11:23:51 UTC

7bdb999d0f28c7bb9d7a35ca775e405674527e5frubygems のヘルパーメソッドの FileUtils.rm_rf の例外発生時の調査用コードを入れていたのを revert しています。 MJIT が起動した gcc が一時ディレクトリにファイルを置いているらしいことを確認できたとのこと。

[a319d3cfdc] Benoit Daloze 2022-08-29 13:32:48 UTC

GitHub Actions の make test-spec 実行時の workflow にて環境変数 CHECK_LEAKS を指定してリソースのリークチェックを有効にしています。

[4ee1a68776] Benoit Daloze 2022-08-29 13:36:29 UTC

rubyspec に upstream から最新版をマージ。

[18dc379aca] git 2022-08-29 15:45:14 UTC

version.h の日付更新

[b5358a98e6] Benoit Daloze 2022-08-29 16:18:20 UTC

spec/mspec に upstream から最新版をマージ。 Thread の leak check 用のメソッドで無視するようマークした Thread の対応を追加しているみたいですね。

[1315c5aad9] Benoit Daloze 2022-08-29 16:18:23 UTC

spec/ruby に upstream から最新版の rubyspec をマージ。

[737402e938] Takashi Kokubun 2022-08-29 16:55:53 UTC

GitHub Actions の annocheck を使ったテストで rubyspec の一部のテストがこけるとのことでスキップするようにしています。

[ddca3482ef] Takashi Kokubun 2022-08-30 01:05:06 UTC

YJIT の Rust 実装でオペランドのオブジェクトの型チェックで Symbol の flags チェック内容を修正しています。 https://github.com/ruby/ruby/pull/6301

[d6acaa4d42] Nobuyoshi Nakada 2022-08-30 02:21:20 UTC

debug.c の関数 ruby_debug_log() の定義前にマクロの ruby_debug_log を #undef しておくようにしています。 27173e3735ff509dc8d9cc9b410baff84adf57dc で関数マクロ定義を導入した時から問題があったようです。

[b98653f766] David Rodríguez 2022-08-30 08:05:18 UTC

rubygems のテスト用ヘルパーの setup で環境変数 TMPDIR にも Dir.mktmpdir で作成した専用の一時ディレクトリを指定していたのをやめています。 MJIT が起動した gcc がこの環境変数の指定の影響でテスト用の一時ディレクトリにファイルを生成してしまうのが一部環境で削除できなくてエラーを引き起こしていたのでそれを避けるためとのことです。 13d2225c460cfc3daa679acb89433289527a844f とか 458d49a04ab7ce8a61be11fbaf341ee252b8253a とか 95d2d7920c97d0502ebed4ba439177325ad05e57 のあたりの一連の変更の集大成という感じですね。

ruby-trunk-changes 2022-08-29

今日は bundler の WIndows 環境での platform 対応の変更などがありました。

[8799c91205] shields 2022-08-28 13:40:02 UTC

bundler が mswin 以外の Windows 環境でも Gemfile.lock の platform に :windows を追加するようにしているようです。

[5fcce23ae2] git 2022-08-28 15:33:32 UTC

version.h の日付更新

[055fc7b14d] Jeremy Evans 2022-08-28 21:57:36 UTC

aecc3b12528e1b02d24bcd5df746e93aa04ba211 の変更で timev.rb で rdoc 用コメントの行頭の # が消えてしまっていたのを修正。これはひどい

[41a275c89a] Hiroshi SHIBATA 2022-08-29 00:52:09 UTC

標準添付ライブラリ syntax_suggest の upstream リポジトリのデフォルトブランチ名が main なので tool/sync_default_gems.rb で対応を追加しています。

[7bdb999d0f] Yusuke Endoh 2022-08-29 03:50:47 UTC

95d2d7920c97d0502ebed4ba439177325ad05e57 などでの rubygems のテストのヘルパーメソッドでの FileUtils.rm_rf の時に MJIT の worker を一時停止する対応をコメントアウトして例外を rescue してその時点での対象のディレクトリの内容を表示するようにしています。デバッグのためとのこと。

[78748a5de2] "S.H" 2022-08-29 05:42:19 UTC

vm.c の usage_analysis_insn_clear()、usage_analysis_operand_clear()、usage_analysis_register_clear() といった VM 命令の統計情報を蓄積する Hash をクリアする関数群の共通処理を usage_analysis_clear() に切り出すリファクタリング