ruby-trunk-changes 2022-11-29

今日は主に meth(...) のような委譲用引数を使ったメソッド定義と meth(**) のような無名のキーワード rest 引数を組み合わせて使う時の SyntaxError を解消する変更や MJIT の実装の変更/最適化などがありました。

[4d51a0b495] schneems 2022-11-25 22:12:30 UTC

標準添付ライブラリ syntax_suggest の次のコミットで修正するためのテストを先に追加しています。

[f64ba0fadd] schneems 2022-11-25 22:26:43 UTC

標準添付ライブラリ syntax_suggest で "Syntax OK" というメッセージを出力する箇所を SyntaxSuggest::Cli クラスのメソッドに移動しています。誤って文法エラーのあるスクリプトに対してもメッセージが出てしまうケースがあったみたいです。 https://github.com/ruby/syntax_suggest/pull/157

[476700c06f] schneems 2022-11-25 22:29:19 UTC

標準添付ライブラリ syntax_suggest のバージョンを 1.0.0 に更新しています。

[dcf94e719c] git 2022-11-28 12:50:43 UTC

NEWS の default gems のバージョンリストの syntax_suggest のバージョンも更新しています。

[0bfb185654] Nobuyoshi Nakada 2022-10-29 15:36:19 UTC

標準添付ライブラリ optparse でエラー時に例外発生するかわりに Kernel#throw による大域脱出をするように指定する raise_unknown オプションを追加しています。

[b649850d4a] Nobuyoshi Nakada 2022-11-28 14:27:02 UTC

common.mk に update-src というターゲットでビルドディレクトリやソースディレクトリの revision.h を削除して空の revision.h をソースディレクトリに作成するようにしています。

[f3ad68dd16] Yusuke Endoh 2022-11-28 16:14:47 UTC

標準添付ライブラリ optparse の 0bfb185654b13237b874dc00d5719e695416b711 で追加したテストで利用するオプション名を変更しています。別のテストで既に利用しているオプション名と被っていたみたいです。

[c5279db75f] Takashi Kokubun 2022-11-28 18:42:54 UTC

irb の組み込みコマンド debug で debug.gem を Gemfile に debug が書かれてなくてもロードするための処理に debug の拡張ライブラリのパスも $LOAD_PATH に追加するようにしています。

[d13de3a62e] Takashi Kokubun 2022-11-28 18:44:19 UTC

標準添付ライブラリ irb のバージョンを 1.5.1 に更新しています。

[612b528c8a] git 2022-11-28 18:45:17 UTC

NEWS の default gems のバージョンリストの irb のバージョンも更新しています。

[8a74361b41] Maxime Chevalier-Boisvert 2022-11-28 21:45:42 UTC

doc/yjit/yjit.md に拡張ライブラリ RUBY_YJIT_ENABLE についての記述を追加しています。

[579c8cb01c] moenodedev 2022-11-28 20:33:00 UTC

bundler で OpenSSL が利用不可能だった時のエラーメッセージに rvm を使ってる場合の対応策の URL の記載を削除しています。

[ee49fe5d34] Burdette Lamar 2022-11-28 23:33:09 UTC

標準添付ライブラリ net/http の Net::HTTPHeader#range の rdoc 用コメントにサンプルを追記しています。

[4fc668a4f3] Shugo Maeda 2022-11-28 01:40:08 UTC

メソッド定義の引数で委譲用に m(...) で任意の引数を受け取っているメソッド内で別のメソッド呼び出しにそのキーワード引数だけを m1(**) のように変数名指定なしでの委譲をする記法で渡すことができるように文法を拡張しています。 "*" での通常引数の委譲は書けてたみたいなので ** だけ SyntaxError になってたようです。なるほどー。 [ruby-dev:51203] [Feature #19134]

[a0e4dc52b0] Shugo Maeda 2022-11-28 08:27:27 UTC

parse.y で無名引数のための記号群 *, **, & のトークンについて ANON_xxx_ID というマクロ定義がされていたのを削除して既に定義されていた idFWD_xxx のほうを利用するように統一しています。

[b5726892d0] Shugo Maeda 2022-11-29 01:31:44 UTC

bundled gems の rbs の gems/bundled_gems の指定に commit hash を追加しています。 4fc668a4f3b9b67cc7566096ab55cab34c67c158 の変更に追随するために rbs の更新が必要だったようです。 [ruby-dev:51203] [Feature #19134]

[129d208f9a] Takashi Kokubun 2022-11-29 04:55:58 UTC

標準添付ライブラリ erb でテンプレート内に <%# ... %> で埋め込まれたコメント部分に対応してスクリプトの行番号を調節するための改行の出力を追加しています。 https://github.com/ruby/erb/pull/42

[4f8c6711dd] Takashi Kokubun 2022-11-29 04:57:36 UTC

標準添付ライブラリ erb のバージョンを 4.0.2 に更新しています。

[4db429d211] git 2022-11-29 04:59:09 UTC

NEWS の default gems のバージョンリストの rbs のバージョンも更新しています。

[74bdf09215] Shugo Maeda 2022-11-29 05:17:03 UTC

4fc668a4f3b9b67cc7566096ab55cab34c67c158 の文法拡張についてのテストを追加しています。あー m(*, **, &) のように種類毎に無名の引数で受けとってから m1(...) のように全てを委譲するメソッド呼び出しを書くという逆のも可能なんですね。 [ruby-dev:51203] [Feature #19134]

[acb76663ba] Takashi Kokubun 2022-11-29 05:22:02 UTC

mjit_compiler.h を mjit_c.h とファイル名を変更しています。

[9c13fc614c] Takashi Kokubun 2022-11-29 05:33:55 UTC

8e18761da1932df88bfb6505acbda4740e1b2930 で revert された MJIT の Solargraph という LSP ツール対応のリファクタリングのリトライ。 CI の失敗は変更したクラスの GC mark 漏れだったようでそこを修正しています。 https://github.com/ruby/ruby/pull/6827

[bb6f933d51] Takashi Kokubun 2022-11-29 05:59:00 UTC

最近 MJIT の実装が変更されて既に別スレッドの mjit_worker は存在していないので callcache などを同期するための仕組みが不要になっていたので ISeq 内の storage のコピーのための処理を削除しているようです。

[8be62f06c8] yui-knk 2022-11-28 09:54:16 UTC

node.h の構造体 struct rb_args_info の ruby2_keywords という bit field がもう実効的な利用をされていなかったので削除しています。

[322e546f60] Takashi Kokubun 2022-11-29 06:46:00 UTC

mjit_c.h の構造体 struct compile_status のメンバー max_ivar_index というのももう不要になっていたので削除しています。

[2329cbeb5b] Takashi Kokubun 2022-11-29 07:32:24 UTC

MJIT で対象の ISeq に getinstancevariable や setinstancevariable が存在するか(インスタンス変数へのアクセスがあるか)を検出して inline cache の更新時に再コンパイルするための処理を FL_EXIVAR というフラグが立っている T_OBJECT 以外の型のオブジェクトについても T_OBJECT についてと同様の処理にして専用の構造体メンバーをひとつ削除しています。差分の 2つめの goto のラベルは exivar_cancel に変更しなくてもいいのかな?

[44165df121] Takashi Kokubun 2022-11-29 07:53:26 UTC

mjit.c にグローバル変数 rb_cMJITIseqPtr というのを宣言して mjit_compile() でコンパイル対象として渡された rb_iseq_t * のポインタを wrap した RubyVM::MJIT の C の型に対応したクラスのインスタンスを格納しておいてこれを rb_gc_register_mark_object() で GC の mark 対象にして解放されないように保護しています。wrap したオブジェクトを作るのは以前から行なわれていましたが毎回 rb_iseq_t 型に対応するクラスを rb_funcall() で取得していたのを起動時に 1回行なって使いまわすように最適化しています。

[8a0acbea4c] Takashi Kokubun 2022-11-29 08:12:29 UTC

MJIT の実装で CDHASH という case 文の実装で内部的に使う特別な Hash オブジェクトの対応をしていたところを通常の Hash の扱いにして実装をシンプルにしているみたいです。

[27f34eeb5a] Takashi Kokubun 2022-11-29 08:21:27 UTC

MJIT の ruby 実装で Primitive を使って C の関数呼び出しを埋め込む時に Primitive.cexpr! でなく Primitive.cstmt! を使って必要な関数の extern 宣言も局所的に含めるようにして mjit_compiler.c でそのための extern 宣言していたのを削除しています。

[f19deef323] Takashi Kokubun 2022-11-29 08:33:49 UTC

mjit_compiler.c の C で実装していた builtin_compile() や has_cache_for_send() といった関数を定義して Primitive を拡張していた(?)のを mjit_c.rb で Primitive を利用した ruby 実装に移植しています。

[aacaa2ec5e] Nobuyoshi Nakada 2022-11-26 16:12:06 UTC

166598a6eb0108d41874fd3dbe4d2c2af8cfea71 で追加した make outdate-bundled-gems というターゲットの処理を修正して MFLAGS をみて dry-run に対応したり削除する条件をもっと細かくチェックするようにしたうえで make extract-gems した時に自動的に古い bundled gems の展開ディレクトリ削除を実施するようにしています。

[8e3ac264df] Nobuyoshi Nakada 2022-11-27 09:19:26 UTC

aacaa2ec5e13d7d678b58208bf3d6c0551f251cd の続きで outdate-bundled-gems に依存するのを extract-gems から prepare-gems に変更しています。また defs/gmake.mk で make の関数定義? を利用したリファクタリングをしているようです。GNU make にはこんな機能があるのか。

[ed4b5c4f21] Nobuyoshi Nakada 2022-11-27 11:14:26 UTC

common.mk の outdate-bundled-gems のコマンド部分が長くなってたので tool/outdate-bundled-gems.rb というスクリプトに切り出しています。

[67ae3e9738] yui-knk 2022-11-29 02:42:53 UTC

RubyVM::AbstractSyntaxTree.parse のテストで m(...) のように委譲用の引数受け取りをするメソッド定義を parse した結果の RubyVM::AbstractSyntaxTree::Node の AST に "*", "**", "&" などの無名引数用のノードが含まれてることを確認するテストを追加しています。