ruby-trunk-changes 2022-09-25

今日は主に ISeq の構造体などの first_lineno の型を VALUE (Integer)から int にする変更などがありました。

Method#call の実装 rb_method_call_pass_called_kw() でブロック引数を Proc オブジェクトに変換していたのをまったく同じ内容の rb_method_call_kw() に委譲するようにリファクタリングしています。

[09ea4f3a9f] Samuel Williams 2022-09-23 10:54:39 UTC

iseq.c の rb_iseq_new_top() と rb_iseq_new_eval() から共通の初期化部分を iseq_setup_coverage() という関数に切り出すリファクタリング

[81b919ce5c] Samuel Williams 2022-09-23 10:58:01 UTC

9434a7333c2a23c680a977331a60ca7c502c1ac0 の eval 系メソッドで実行するスクリプト内の coverage のサポートについて NEWS に追記しています。 [ruby-core:109937] [Feature #19008]

[8e2c425183] Maciek Rząsa 2022-07-28 12:30:10 UTC

拡張ライブラリ bigdecimalBigDecimal#sign メソッドの rdoc 用コメント? で値が 0 の時は 0 を返すと書かれていましたが実際には符号に応じて(BigDecimal には +0 と -0 がある) +1/-1 いずれかを返すので記述を修正しています。

[75cf29f60d] Samuel Williams 2022-09-25 07:45:28 UTC

rb_iseq_new_with_opt() や rb_iseq_new_with_callback() などの関数の引数 first_lineno の型を VALUE から int に変更しています。

[22af2e9084] Samuel Williams 2022-09-25 08:07:18 UTC

75cf29f60d87b298edfd75611bfe272a92289cee の続きで構造体 rb_iseq_location_t のメンバーの first_lineno も型を VALUE から int に変更しています。また rb_binding_t の first_lineno は unsigned short だったのを int に変更しています。これはなんか、short であることに理由があったような気がぼんやりするけど、大丈夫かな。

[85cc0ce5c8] Samuel Williams 2022-09-25 08:49:45 UTC

ISeq のバイナリフォーマットへの dump/load 時も first_lineno の情報を int のまま書き出すようにしています。これ互換性がなくなるのでバイナリフォーマットのバージョンを上げたりしないといけないのでは。

ruby-trunk-changes 2022-09-24

今日は Kernel#load の第2引数を渡して読み込んだスクリプト内で Module#using を使うとエラーになる不具合修正などがありました。

[3ddab3a84e] Burdette Lamar 2022-09-23 14:41:21 UTC

ドキュメントファイル doc/io_streams.rdoc のメソッド名の表記にクラス名を追加する修正。 https://github.com/ruby/ruby/pull/6420

[7588f21851] Takashi Kokubun 2022-09-23 15:02:19 UTC

MJIT 用の C binding のスクリプトを生成する tool/mjit/bindgen.rb で整数以外の定数も一般に変換マクロを経由して ruby の値を取得できるように引数の扱いかたを変更しています。とりあえず今は INT2NUM() による変更のみですがたぶん後で他の型にも対応を増やすのでしょう。

[912ea8257a] Takashi Kokubun 2022-09-23 20:17:54 UTC

YJIT のオプション --yjit-stats が利用可能かどうかを configure の時点で利用可能なプラットフォームかどうかの判定をして可能なら YJIT のビルド時に --features stats オプションを付与するようにしています。また Rust の 1.60.0 の機能を使ってしまっていたところがあったみたいでそれを避けるようにしています。 https://github.com/ruby/ruby/pull/6410

[a74f4cded2] John Hawthorn 2022-09-23 21:29:25 UTC

Class の dup 時にインスタンス変数のテーブルから __classid__ という内部的なインスタンス変数のエントリを削除していたのをやめています。もうこの変数を利用しなくなっているので不要になっていたようです。

[82ac4a2399] Chris Salzberg 2022-08-09 13:22:23 UTC

Module#using を Kernel#load に第2引数を渡してその名前空間の下で読み込んだスクリプト内で利用するとエラーになる不具合を修正しています。 [ruby-core:109456] [Bug #18960]

[b0e3ee454d] Takashi Kokubun 2022-09-24 06:06:27 UTC

mjit_c.rb を変換した mjit_c.rbinc の #include 時に警告抑制のため #pragma を利用して一時的に -Wtype-limits の警告を無効化するようにしています。

[08476c4579] Takashi Kokubun 2022-09-24 06:13:43 UTC

b0e3ee454d48748b4aadf1aaedd52670370d503b の続きで局所的な警告抑制のための RBIMPL_WARNING_PUSH()/RBIMPL_WARNING_POP()/RBIMPL_WARNING_IGNORED() などのマクロはセミコロンが不要なのにつけてたので削っています。

ruby-trunk-changes 2022-09-23

今日は主に MJIT の C binding の再実装と YJIT の最適化、また Exception#inspect でメッセージの改行をエスケープする変更(リトライ)などがありました。

[9fb18e6314] Otávio Schwanck dos Santos 2022-09-15 12:19:02 UTC

標準添付ライブラリ reline の Reline::LineEditor#editing_mode でインスタンス変数 @waiting_operator_vi_arg が nil の時の対応を追加しています。

[224a3ea718] Otávio Schwanck dos Santos 2022-09-15 12:19:44 UTC

標準添付ライブラリ reline のバージョン番号を 0.3.2 に更新しています。しかしすぐ次の commit で revert されています。

[696e8914b7] Otávio Schwanck dos Santos 2022-09-20 13:40:48 UTC

標準添付ライブラリ reline の 9fb18e631497fd308b2d1fdd9ad0bef1471de54b の変更に対応したテストの追加と nil チェックのかわりに safe guard 演算子(&.)を利用した書きかたに変更しています。

[4bdd8f2ddf] Otávio Schwanck dos Santos 2022-09-21 14:39:21 UTC

696e8914b74cd10047917ce677b1872ae1f04660 で追加した標準添付ライブラリ reline のテストを assert_nothing_raised を利用するように書きかえています。

[aafbc9068f] HParker 2022-09-21 20:53:10 UTC

compile.c の &&= や ||= のような演算子に対応した命令列を生成する compile_op_log() ですぐに捨てられる値を VM スタックに積むための不要な命令の生成を抑制するちょっとした最適化をしています。

[fbaac837cf] HParker 2022-09-21 21:12:45 UTC

aafbc9068f96e5e1f7f5c2c1fa6cba01ec8422db と同様に代入記号つきメソッドのための命令列の生成時に不要な dup と pop 命令の生成を抑制する最適化。また aafbc9068f96e5e1f7f5c2c1fa6cba01ec8422db のためのベンチマークも追加しています。

[b5c459d57a] Jemma Issroff 2022-09-22 16:20:45 UTC

Object#freeze を大量に呼ぶベンチマークを benchmark/vm_freezeobj.yml に追加しています。

[88bf8ad6e9] Jeremy Evans 2022-09-22 16:35:51 UTC

configure で YJIT のためのチェックをしている時に OpenBSD では LDFLAGS に -lpthread -lc++abi オプションを追加するようにしています。 YJIT で利用する _Unwind_xxx という関数群のために必要とのこと。

[f2bea691cd] Takashi Kokubun 2022-09-18 12:45:58 UTC

MJIT 用の C binding のための定数 RubyVM::MJIT::C を mjit_c.rb という ruby 実装で定義するようにして、このファイルは tool/ruby_vm/views/mjit_c.rb.erb のテンプレートから生成させるようにしています。テンプレートといっても展開する部分はないので mjit_c.rb を直接追加しても良さそうですが、これから拡張する予定なのかも。

[e81a612413] Takashi Kokubun 2022-09-18 13:32:21 UTC

f2bea691cd12150a526ddc4be95c5396f07920ba で追加したテンプレートファイル tool/ruby_vm/views/mjit_c.rb.erb 自体も tool/mjit/bindgen.rb で生成するようにしています。

[00c441ce7a] Takashi Kokubun 2022-09-18 13:44:29 UTC

やはり f2bea691cd12150a526ddc4be95c5396f07920ba で追加した ruby 実装のテンプレート tool/ruby_vm/views/mjit_c.rb.erb に lib/mjit/c_{32,64}.rb のいくつかの定数に対応したメソッド定義を移動して ruby 実装による Primitive.cexpr! を経由した C の定数参照を利用するようにしています。

[334b8bd459] Takashi Kokubun 2022-09-18 14:17:22 UTC

同じく f2bea691cd12150a526ddc4be95c5396f07920ba で追加した ruby 実装のテンプレート tool/ruby_vm/views/mjit_c.rb.erb に mjit_compiler.rb から実装を移動しています。

[4e0db2f753] Takashi Kokubun 2022-09-18 14:20:44 UTC

tool/ruby_vm/views/mjit_c.rb.erb はやっぱりテンプレートである必要なかったとのことで mjit_c.rb を直接生成するようにしてリポジトリに追加しています。

[591c3c7a1a] Takashi Kokubun 2022-09-18 14:25:20 UTC

tool/mjit/bindgen.rb で環境変数 BUNDLE_GEMFILE の設定をして require 'bundler/setup' することで常に bundler の影響下でこのツールを動かすようにしています。

[2f5b37533e] Takashi Kokubun 2022-09-18 14:32:59 UTC

00c441ce7ac76dedd272acf9a9daec59d9d5d908 の MJIT 用の C Binding で定数に対応したメソッド定義を ruby 実装の mjit_c.rb に移動した時に 1行メソッド定義の構文を使っていたのを普通の def ... end 文による定義に変更しています。BASERUBY で動く必要があるからとのこと。

[5cda5938f8] Takashi Kokubun 2022-09-18 14:43:24 UTC

さらに MJIT 用の C Binding の一部を mjit_c.rb による実装に移動しています。

[280ff1707e] Takashi Kokubun 2022-09-19 00:25:04 UTC

ついに lib/mjit/c_{32,64}.rb を削除して全て mjit_c.rb での実装に移動しています。

[4c6e1556b1] Takashi Kokubun 2022-09-20 14:23:50 UTC

tool/mjit/bindgen.rb で生成する MJIT 用 C binding で基本的な C の型に対応したメソッド群を生成するようにしています。

[2ce1460c65] Takashi Kokubun 2022-09-21 13:32:28 UTC

tool/mjit/bindgen.rb で生成する構造体型に対応したメソッドでサイズをマジックナンバーで mjit_c.rb に埋め込むのをやめて Primitive.cexpr!() で取得するようにしています。

[dc5b536468] Takashi Kokubun 2022-09-22 12:39:54 UTC

mjit_c.rb で他にもオフセット? などがマジックナンバーになっていたのを Primitive.cexpr!() を使って取得するように生成するよう tool/mjit/bindgen.rb を修正しています。

[dfc311c0b3] Takashi Kokubun 2022-09-22 13:25:33 UTC

MJIT 用の C Binding で構造体型のメンバーの情報としてオフセットと型の配列を持ってたところを順番を入れ替えて[型, オフセット] の順にするようにしています。

[0c9dc01a2a] Takashi Kokubun 2022-09-22 13:32:49 UTC

MJIT 用の C Binding 生成時にいくつかの構造体メンバーは環境によって型が違ったり存在しなかったりするものは含めないようにしています。

[4b97f1e525] John Hawthorn 2022-09-22 21:47:26 UTC

YJIT の Rust 実装で control frame を push する処理を専用の型を導入してメソッド定義して共有するようにリファクタリングしています。 https://github.com/ruby/ruby/pull/6412

[4e40fdbcee] Maxime Chevalier-Boisvert 2022-09-22 21:47:54 UTC

YJIT の Rust 実装の guard_two_fixnums() という関数でチェックが失敗した時に JIT コード実行をあきらめるのを jit_chain_guard() という関数呼び出しに変更しています。この関数はどうも一定回数まで再度コンパイルを試みる処理へジャンプする機械語命令を生成するものみたいです。 https://github.com/ruby/ruby/pull/6422

[6e46bf1e54] Nobuyoshi Nakada 2022-09-22 23:52:15 UTC

include/ruby/internal/scan_args.h のコメントのスタイル(?)修正。

[a78c733cc3] Yusuke Endoh 2022-09-23 07:40:59 UTC

b9f030954a8a1572032f3548b39c5b8ac35792ce で Exception#inspect の改行をエスケープするようにしたのを revert していたのを revert しています。つまり再度改行をエスケープするようにしています。チケットをみると debug.gem のテストが失敗したので revert したけどそちらは直ってそうなので再度適用するとのこと。 [ruby-core:110037] [Bug #18170]

ruby-trunk-changes 2022-09-22

今日は主に irb の色付けの修正や eval 系メソッドでのコード実行に coverage が効くようにする変更などがありました。

[1a2ee4cfab] Takashi Kokubun 2022-09-21 13:01:16 UTC

GitHub Actions の Windows 版での make test-all と make test-spec の順序を逆にしています。make test-all でなにかゴミが残っててそのせいで rubyspec が失敗しているんじゃないかという推測で変更してみているみたいです。

[6325fc8854] st0012 2022-09-19 15:14:03 UTC

irb の補完処理で $LOAD_PATH 内に文字列でないオブジェクトが入っていた時に to_path で変換を試みるようにしています。

[c21f820b49] Stan Lo 2022-09-21 13:53:06 UTC

irb の補完処理のテストで assert_equal で完全一致でチェックしていた候補を assert_include でもう少し緩めた条件でチェックするようにしています。

[2c6fdc4d65] Takashi Kokubun 2022-09-21 15:22:21 UTC

GitHub Actions の Ubuntu 用の workflow の設定の matrix の書きかたを修正してジョブ名がわかりやすく重複した処理を省くようにしているようです。 https://github.com/ruby/ruby/pull/6413

[9f68687879] tompng 2022-08-07 11:58:17 UTC

irb のコードの色付け用のメソッドで Ripper::Lexer にかける前に複数行のコードの各行の長さを測っておいてトークンの位置を取得する処理を共通の Proc オブジェクト化しています。よくわかりませんがテストの追加もあるので何かの条件でうまく動いてなかったのを修正しているのかも。

[78cb638002] tompng 2022-08-10 21:15:32 UTC

irb の色付けについてのテストを追加しています。

[369f1668cd] tompng 2022-09-19 05:14:10 UTC

9f686878794291b088d07866c00f8056a0c7dec7irb の色付けの処理でトークン位置を取得する処理をリファクタリングしています。

[56d773dc6f] Burdette Lamar 2022-09-21 21:34:55 UTC

doc/examples/files.rdoc と doc/io_streams.rdoc というドキュメントのファイルを追記しています。また File クラスの rdoc 用コメントに大量に追記しています。 https://github.com/ruby/ruby/pull/6383

[6b0b326ef2] Hiroshi SHIBATA 2022-09-22 00:39:20 UTC

796069b2882d8a67ecc36bda7c72affcbad09dae の Process.{set,get}rlimit のための定数 Process::RLIMIT_NPTS の追加に追随して rdoc 用のコメントの説明の追加と rlimit_resource_name2int という名前と整数の変換の処理の対応を追加しています。

[830b2e217b] Takuya Noguchi 2022-09-20 07:22:44 UTC

bundler の bundle gem で gem 生成する時の GitLab CI 用の設定ファイルのテンプレートに default というキーを最初につけるように修正しています。

[9058ba218c] Nobuyoshi Nakada 2022-09-22 03:54:23 UTC

GitHub Actions の Ubuntu 用 workflow で make check で rubygems の一部のテストを実行除外するようにしていたのをやめています。

[083b4bb655] Aaron Patterson 2022-09-21 15:58:19 UTC

MJIT の C binding に rb_control_frame_t 型の対応を追加しています。

[ec93d09c94] Aaron Patterson 2022-09-21 19:27:59 UTC

同じく MJIT の C binding に rb_execution_context_t 型の対応を追加しています。

[f07e651a90] Hiroshi SHIBATA 2022-09-22 05:37:40 UTC

NEWS に Process::RLIMIT_NPTS と拡張ライブラリ socket の Socket に TCP_KEEPALIVE など昨日追加された定数群についての記述を追加しています。

[928aeef330] Hiroshi SHIBATA 2022-09-22 08:28:28 UTC

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

[4c37eaa979] git 2022-09-22 08:31:12 UTC

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

[9434a7333c] Samuel Williams 2022-09-17 08:19:57 UTC

eval 系のメソッド内で実行されたコードには拡張ライブラリ coverage によるカウントがされていなかったのをカウントされるようにしているようです。

[69130e1614] Takashi Kokubun 2022-09-22 12:07:00 UTC

tool/ruby_vm/helpers/dumper.rb という VM 用のコード生成のツールの一部でカレントディレクトリを Pathname#expand_path で絶対パス化するようにしています。

ruby-trunk-changes 2022-09-21

今日は主に関数ポインタの型の扱いの修正や拡張ライブラリ socket の新しい定数の追加などがありました。

[b3d8dddee7] Yusuke Endoh 2022-09-20 08:07:42 UTC

Continuation のために machine stack を退避する cont_save_machine_stack() に ASAN のための unpoison の呼び出しを追加しています。

[a8dc49b4d5] Alan Wu 2022-09-20 12:36:06 UTC

make に bmake というコマンドを利用する時の YJIT の Rust 実装をビルドの対応をしているようです。 $(YJIT_LIBS) の依存関係? かなにかで GNU make に依存した記法を使ってたみたいで他の make の実装でも動くように代替のルールを yjit/not_gmake.mk に書いておいて必要に応じて include する Makefile を生成するようにしています。

[d3733c2ba5] Maxime Chevalier-Boisvert 2022-09-20 23:30:10 UTC

YJIT の --yjit-stats オプションの処理で 5883bc7c0791de2ce5e8b22175aef07705f0c618 の追加の再修正をしています。 https://github.com/ruby/ruby/pull/6409

[45482fea3c] 卜部昌平 2022-09-12 05:41:23 UTC

GitHub Actions のいろんなコンパイルオプションを試す workflow で利用するデフォルトのコンパイラの clang 14 を clang 15 に更新しています。また clang-16 でのビルドも追加しています。

[104069e75a] 卜部昌平 2022-09-13 06:08:50 UTC

error.c の syserr_initialize() での不要な prototype 宣言を削除しています。おそらく clang 15 で警告が出てたのでしょう。

[406ebb25a0] 卜部昌平 2022-09-13 06:18:46 UTC

ractor.c の obj_refer_only_shareables_p_i() で警告が出たとのことでポインタのインクリメントに dereference の "*" を追加していますが、うーん? これは多分 (*pcnt)++ にしないといけないんじゃないかな?

[06cb030516] 卜部昌平 2022-09-13 07:26:33 UTC

vm_insnhelper.c でいろんな引数の数のメソッド呼び出しに対応した関数を呼び出すための関数の一部で関数ポインタを呼び出す関数の型に合わせた変数にキャストして代入しておいてから使うようにしています。他のところは既にキャストしてたけど一部だけ直接呼ぶようになってたみたいです。

[0cd86ffb2e] 卜部昌平 2022-09-14 02:32:24 UTC

file.c の define_filetest_function() という static 関数を関数マクロによる定義に変更しています。コミットログによると ANYARGS で任意の個数の引数を指定するのを避けるためみたいです。

[2f8012c949] 卜部昌平 2022-09-14 05:12:17 UTC

include/ruby/internal/anyargs.h で引数の数に応じて関数を用意しているところで rb_f_notimplement() を使った定義をする時に一旦 xxxx_notimpl() という関数を経由して呼び出すようにしています。これも ANYARGS を使わないようにするためみたいです。

[8a577cbc63] 卜部昌平 2022-09-14 05:17:56 UTC

vm_insnhelper.c の cref_replace_with_duplicated_cref_each_frame() という関数は戻り値の型が rb_cref_t * とポインタなのに FALSE を返しているところがあったので NULL に修正しています。

[4e64edb6cd] 卜部昌平 2022-09-14 05:35:47 UTC

vm_insnhelper.c でさらに ANYARGS の利用を避けるために引数の個数の違う関数ポインタの型の共用体を定義してこれを任意の個数の引数の関数ポインタのかわりに使うようにしています。

[ec5798d28b] 卜部昌平 2022-09-14 05:43:31 UTC

rb_f_notimplement() および rb_f_notimplement_internal() を関数ポインタとして参照しているところで明示的に ANYARGS を受け取る関数としてキャストするようにしています。

[77c61ae3ab] 卜部昌平 2022-09-14 05:47:26 UTC

vm_eval.c の cc_new() で vm_ci_new() のポインタの引数に false を渡していたのを NULL に修正しています。

[45741918e1] 卜部昌平 2022-09-16 06:14:05 UTC

古い gperf のサポートのために一部の関数の宣言をコメントアウトしていたのを削除しています。

[437800d3b0] 卜部昌平 2022-09-21 01:03:30 UTC

拡張ライブラリ pty の establishShell() で標準ライブラリ関数の getenv() を冗長に宣言していたのを削除しています。同様に拡張ライブラリ etc では逆に宣言を取り込むために stdlib.h を #include するようにしています。

[7060b23ffa] 卜部昌平 2022-09-21 01:14:00 UTC

拡張ライブラリ openssl の関数ポインタの変数の宣言に専用の型を typedef して使うようにしています。

[1ad1f07306] Takashi Kokubun 2022-09-21 04:38:42 UTC

YJIT 用の GitHub Actions の workflow で Slack への通知の設定を修正しています。

[d6e84d97fe] Hiroshi SHIBATA 2022-09-21 01:46:35 UTC

irb のヒストリファイルのテストで IRB.conf[:LC_MESSAGES] の初期設定を追加しています。環境によってテストが失敗するのを修正するためみたいですね。

[c287deecb6] Hiroshi SHIBATA 2022-09-21 01:53:06 UTC

同じく irb のヒストリファイルのテストで環境変数 IRBRC の影響を除外するため一時的に環境変数を消すようにしています。

[76b4305a59] Mau Magnaguagno 2022-08-29 21:47:32 UTC

NEWS の Regexp.new の正規表現のオプション指定に文字列を渡す新機能についての説明文を修正しています。

[e3b178066b] Koichi ITO 2022-05-23 07:40:15 UTC

Process.kill の rdoc 用コメントの call-seq の可変長引数の書きかたを修正。

[017573c3b3] David CARLIER 2022-05-18 20:30:47 UTC

拡張ライブラリ socket で SO_SETFIB という C の定数に対応する ruby の定数の定義に対応しています。 FreeBSD で存在する定数みたいです。

[8a9dfb676b] David CARLIER 2022-05-02 10:33:57 UTC

同じく拡張ライブラリ socket で C の定数 TCP_CONNECTION_INFO と TCP_KEEPALIVE の対応を追加しています。 TCP_KEEPALIVE がまだなかったというのは意外でした。

[3f387e60ef] Yuta Saito 2022-02-17 17:31:40 UTC

mspec の対象のファイルを load するためのユーティリティメソッドで File.expand_path が環境変数 HOME がなくて ~ が展開できない時に ArgumentError が発生するのを無視するように対応しています。

[ec2d13567e] David Carlier 2021-02-21 13:16:57 UTC

拡張ライブラリ socket で C の定数 SO_USER_COOKIEruby の定数に取り込むように追加しています。

[8cbbc061c4] David Carlier 2021-07-07 20:40:15 UTC

拡張ライブラリ socket で C の定数 SO_RTABLE も ruby の定数に取り込むように追加しています。OpenBSD で存在する定数みたいです。

[d35bc88b37] David Carlier 2021-12-12 11:08:19 UTC

拡張ライブラリ socket で C の定数 SO_INCOMING_CPU と SO_INCOMING_NAPI_ID も ruby の定数に取り込むように追加しています。Linux で存在する(した?)定数みたいです。

[02e25db68f] Akihiro Sada 2022-04-05 11:37:05 UTC

NEWS に標準添付ライブラリ uriURI.escape と URI.unescape の削除について追記しています。

[796069b288] David Carlier 2021-04-10 11:47:16 UTC

Process.{set,get}rlimit に使う定数に Process::RLIMIT_NPTS というのを(C の定数が定義されていたら)追加しています。

ruby-trunk-changes 2022-09-20

今日は昨日の Process.daemon の変更の再修正と組み込みメソッドの ruby 実装での引数の末尾カンマを許容する変更などがありました。

[a44f48cadc] Peter Zhu 2022-09-19 14:15:04 UTC

拡張ライブラリ bigdecimal の missing.h に rb_array_const_ptr() などの定義を古い ruby 向けにビルドする時のために独自実装を持ってたのを削除しています。2.3 で追加された API とのことなのでそれ以前の ruby はもうサポート外ということですね。

[12889fad41] Peter Zhu 2022-09-19 14:23:29 UTC

同じく拡張ライブラリ bigdecimal で古い ruby で rb_sym2str() がない時のために自前で実装を持っていたのを削除しています。これは 2.2 から追加された API とのこと。

[26135312f6] Aaron Patterson 2022-09-16 00:48:52 UTC

拡張ライブラリ psych の Psych::Parser#parse の引数解析部分を ruby 実装にして処理の本体は Psych::Parser#_parse メソッドに C による実装を定義してこれを呼び出すように変更しています。

[f8dad616c2] Takashi Kokubun 2022-09-19 21:07:28 UTC

GitHub Actions の YJIT 用の workflow に --yjit-stats オプションをつけてベンチマークを実行するステップを追加しています。 https://github.com/ruby/ruby/pull/6403

[76a0e81f40] Takashi Kokubun 2022-09-19 22:38:18 UTC

tool/mk_builtin_loader.rb で組み込みメソッドの ruby 実装を解析して C の呼び出しに変換する時に引数の最後のカンマを許容するようにしています。そのような ruby スクリプトを組み込み用のスクリプトで書くと不正な引数を渡してしまって SEGV する可能性があったようです。

[b4546d26f2] Takashi Kokubun 2022-09-20 00:43:49 UTC

76a0e81f409baf810411677e115bce4f4b05ba5e のコメントで引数の最後のカンマがない時の args の値の例が正しくなかったとのことでコメントを修正しています。

[55e540f7ab] Nobuyoshi Nakada 2022-09-20 02:12:11 UTC

昨日の ae07336529ee0955bb08b12eb69a90aa9ab4b9f9 で Process.daemon で double fork をやめた変更の追加修正で、setsid(2) の呼び出しがエラーになった時にそれを無視するようにしています。なるほど setsid(2) が失敗したら既に process group の leader なのでそのまま fork() していいということか。setsid() が他の理由で失敗することは man をみる限りだとみあたらないので、これでいいのかなぁ。しかしそれだったら他のプログラムもこの方法を使えば double fork しなくても良さそうだし、なにか他にも理由がありそうな気もするけど……。まあなにか現実的に問題があれば報告が来るでしょう。

[9de11fe796] Nobuyoshi Nakada 2022-09-20 03:54:08 UTC

ビルド時に symbolic link を貼るためのスクリプト tool/ln_sr.rb に -q オプションを追加して既に同じ symlink が貼られていた時にエラーを無視するようにしています。また gems/xxx/lib の生成ルールでこのスクリプトを呼ぶ時にこのオプションを追加しています。

[e40fa6c480] Sutou Kouhei 2022-09-20 07:09:42 UTC

拡張ライブラリ socket の Addrinfo#ipv6_linklocal? および Addrinfo#ipv6_sitelocal? の rdoc 用コメントのサンプルとして挙げられていたアドレスが間違っていたのを修正しています。 https://github.com/ruby/ruby/pull/6372

ruby-trunk-changes 2022-09-19

今日は主に Process.daemon の二重 fork をやめた変更や tool/downloader.rb のコマンドラインオプション追加などがありました。

[a0b0991eed] Nobuyoshi Nakada 2022-09-17 13:48:40 UTC

tool/downloader.rb でダウンロードする対象のファイルごとのコマンドラインオプションの解析をクラスに移動しています。Unicode 用のオプションが別の種類のファイルダウンロードにも使える状態だったのでそれを分離するため。

[cc533cb607] Nobuyoshi Nakada 2022-09-17 13:51:30 UTC

tool/downloader.rb の一部のオプションに long option を追加しています。さらに -a (--always) の逆のオプションとして -u/--update/--if-modified を追加しています。

[ea22403653] Nobuyoshi Nakada 2022-09-17 13:52:07 UTC

common.mk の Unicode.org からのデータダウンロード関係の変数から tool/downloader.rb を実行するコマンド部分を UNICODE_DOWNLOADER という変数に切り出して再利用するリファクタリング

[12e5e5b573] Nobuyoshi Nakada 2022-09-19 05:11:37 UTC

bootstraptest/runner.rb で標準エラー出力にメッセージを出力して Kernel#exit でエラー終了する処理を Kernel#abort の利用に変更しています。またエラーメッセージ内のオプション名が古い(?)ので変更しています。

[e75d963685] Jimmy Miller 2022-09-19 06:09:38 UTC

YJIT の splat 引数対応で ruby2_keywords フラグつきの Hash への対応の漏れを修正しています。 https://github.com/ruby/ruby/pull/6395

[7cab7e5fde] Takashi Kokubun 2022-09-19 06:13:53 UTC

doc/yjit/yjit.md に記述していたサンプルの configure のオプションが --disable--install-rdoc が重複していたので1つ削っています。 https://github.com/ruby/ruby/pull/6400

[1c9381283e] Nobuyoshi Nakada 2022-09-18 15:26:49 UTC

Process.daemon についてこのメソッドを呼んだプロセスが二重に fork していて子プロセスではなくなってることを確認するテストを追加しています。

[ae07336529] Nobuyoshi Nakada 2022-09-18 15:46:52 UTC

Process.daemon の実装で rb_fork_ruby() を2回呼び出していたのを 1回だけにして setsid(2) の呼び出しで完了としています。daemon は 2回 fork することで制御端末から切り離すんだったと思いますが、コミットログをみたところ Process.daemon は通常 fork (または Process.spawn)した子プロセスから呼び出されるわけで、その呼び元からみると 1回 fork した時点で孫プロセスになるので 2回 fork は不要とのこと。しかしそうだとすると fork 前に setsid(2) しないといけない気がする。で調べてると setsid(2) は既に process group のリーダーだとエラーを返すので、確実に呼べるようにするために1回目の fork をするというような説明をみかけました。てことは shell から実行したプロセスで呼んだり、Process.setsid を呼んでから Process.daemon を呼ぶみたいなことをするとこの変更後だとうまくいかなくなるんじゃないでしょうか。

[5883bc7c07] Takashi Kokubun 2022-09-19 07:34:03 UTC

YJIT で --yjit-stats オプションが指定された時に統計情報の収集のためのカウンタに使う命令が使えるプロセッサ(ARMv8.1 以上)かどうかチェックして使えなかったらエラー終了させるようにしています。 https://github.com/ruby/ruby/pull/6401