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 という端末? でこの問題が起きるそうです。