ruby-trunk-changes 2022-09-18

今日は主に version.h の日付を tool/make-snapshot でコミットの日付から生成する変更や、MJIT 用の ruby スクリプトの生成先ファイルパスの変更などがありました。これにより毎日 version.h の日付を更新してくれていた git さんによるコミットはなくなるようです。

[38a7a13ac6] Takashi Kokubun 2022-09-17 12:16:06 UTC

tool/make-snapshot で version.h の RUBY_RELEASE_{YEAR,MONTH,DAY} 等のマクロ定義を最新のコミットの CommitDate から生成するようにしています。git ユーザーによる毎日の version.h の更新を不要にするためみたいです。 https://github.com/ruby/ruby/pull/6382

[1825d3673f] Takashi Kokubun 2022-09-17 13:06:53 UTC

拡張ライブラリ io/wait の IO#wait のテストを MinGW 環境ではスキップするようにしています。

[33c6dd2cc8] Takashi Kokubun 2022-09-17 13:24:09 UTC

38a7a13ac6ed6bba2584def7d7121257eb85e051 で導入した version.h の RELEASE_DATE 定数生成のためのメソッドで FreeBSD の CI サーバーで git コマンドがちゃんと動かないとのことでエラー時に現在時刻を利用するようにしています。

[922e61fcc2] Takashi Kokubun 2022-09-17 14:05:06 UTC

33c6dd2cc89c27bbf406508ec39038a181fb99bc の続きで tool/lib/vcs.rb の VCS::GIT で git コマンドが起動できるかどうかチェックするようにしていましたが、.git ディレクトリの存在チェックだけにしてコマンドの実行はチェックしないようにしています。

[39f91bc24b] Takashi Kokubun 2022-09-17 14:16:55 UTC

common.mk に GNU make でない時に revision.h を空ファイルで生成するルールがあったのを削除して常に tool/file2lastrev.rb で生成するようにしています。

[67417e795a] Takashi Kokubun 2022-09-17 15:09:41 UTC

39f91bc24baa37db3c3d1485902056f43b013b54 のさらに続きで revision.h.tmp の生成ルールを変数 HAVE_BASERUBY によって変えるようにして、BASERUBY がない環境では空ファイル生成するように変更しています。

[0e816e6d30] Takashi Kokubun 2022-09-18 05:02:09 UTC

ruby 実装による組み込みメソッド定義の機構を利用していた mjit_instruction.rb を lib/mjit/instruction.rb という標準添付ライブラリとして生成するように変更しています。もともと C の関数呼び出しなどはなくて純粋な ruby スクリプトを自動生成していたみたいです。しかし組み込みメソッド定義している mjit_compiler.rb から require しているので 9faa9ced9640d23fc5dc1efd635f6b8ebc1a3ceb で prelude や組み込みメソッド定義の .rbinc から require されることで結局起動時に組込まれるようになっているようです。

[62ec621f8c] Takashi Kokubun 2022-09-18 05:16:08 UTC

0e816e6d3022892da438940b09c4d4b49ceb670f に続いて tool/ruby_vm/views/instruction.rb.erb を tool/ruby_vm/views/lib/mjit/instruction.rb.erb に移動しています。

[12023c833f] Takashi Kokubun 2022-09-18 05:21:23 UTC

62ec621f8c7457374d1f08aec97138ac1b7bdf2a のテンプレートファイル移動を revert しています。

[a988fe0b3e] Takashi Kokubun 2022-09-18 05:22:35 UTC

62ec621f8c7457374d1f08aec97138ac1b7bdf2a のテンプレートファイルの移動のリトライ。 tool/insns2vm.rb に --basedir というコマンドラインオプションを追加してネストしたディレクトリ構造の保存に対応するようにしているようです。

[0ca037b35c] Takashi Kokubun 2022-09-18 11:42:57 UTC

YJIT の Rust 実装で利用する bindgen というライブラリ(crate というらしい)のバージョンを更新しています。 https://github.com/ruby/ruby/pull/6397

[45ecc30a63] Takashi Kokubun 2022-09-18 11:49:46 UTC

0e816e6d3022892da438940b09c4d4b49ceb670f および a988fe0b3e4cd5a3955706affdc1f498ff9b5d77 で移動した lib/mjit/instruction.rb の自動生成のルールを template/Makefile.in から common.mk に移動しています。Windows 環境では生成する必要がないので template/Makefile.in に置いてたみたいですがメンテナンス性のために common.mk に移動するとのこと。

[e2e1058e66] Takashi Kokubun 2022-09-18 12:19:37 UTC

45ecc30a6342e1322f07e68280a5107db8075da0 の続きで srcs の依存関係に lib/mjit/instruction.rb を追加しています。パッケージ生成時に生成させるため。

ruby-trunk-changes 2022-09-17

今日は先日の macOS でのリンカオプション -undefined dynamic_lookup の削除の影響で一部の拡張ライブラリがビルドできなくなった問題の対応や Unicode のヘッダファイルの構造変化への対応などがありました。

[5b735d0beb] Takashi Kokubun 2022-09-16 11:44:58 UTC

YJIT の JIT コンパイルで生成する機械語で icache (命令キャッシュ)のクリアをするタイミングをラベルの解決処理後に移動しています。ラベル解決処理時にコードが変更になってサイズが変わる可能性があるので SEGV することがあったみたいです。 https://github.com/ruby/ruby/pull/6388

[64200990c4] Peter Zhu 2022-09-16 13:47:32 UTC

IO#gets や IO#each_line の rdoc 用コメント内のリンクのマークアップの間違いを修正しています。

[b07db96744] Jeremy Evans 2022-09-16 17:25:15 UTC

irbコマンドラインオプションに --script および --noscript を追加して、引数に渡された文字列をスクリプトとして読み込む挙動を制御できるようにしています。また "-" をファイルのかわりに標準入力からスクリプトを読み込んで実行するという挙動をするように変更しています。irb にファイルを読ませるのはともかく標準入力から読ませたいってどういう需要があるんでしょうね。それもう ruby を実行すればいいような気も。 [ruby-core:90239] [Feature #15371]

[e3a32abe2e] git 2022-09-16 17:25:39 UTC

version.h の日付更新

[6898984f1c] Nobuyoshi Nakada 2022-09-17 03:09:34 UTC

Xcode 14 でリンカオプションの -undefined dynamic_lookup が警告を出すようになってしまったために c428fc0e1f00ad1176f42157ea9df8d3d19dbd1c で configure 時のチェックでこのオプションを削ってましたが、一部の拡張ライブラリがビルドできなくなったという問題が発生したみたいで、ビルド時の警告有無をチェックして警告が出る時は追加はしないけど ADDITIONAL_DLDFLAGS という変数に格納しておいて mkmf.rb で拡張ライブラリ用の Makefile を生成する時には追加するようにしているようです。 [ruby-core:109905] [Bug #19005]

[76c0056505] Nobuyoshi Nakada 2022-09-14 09:03:48 UTC

tool/enc-unicode.rb を Unicode のヘッダファイルの構造の変更に追随させるよう変更しているそうです。14.0.0 から変化してたとのこと。

[03ce48dac7] Nobuyoshi Nakada 2022-09-14 09:56:51 UTC

tool/enc-unicode.rb で 15.0.0 でまた Unicode のダウンロードしてきたヘッダファイルの構造が変化しているとのことで、まだ Unicode 15.0 に更新はされていないですが対応しています。

[e9982fd679] Nobuyoshi Nakada 2022-09-14 10:00:23 UTC

common.mk の UNICODE_EMOJI_VERSION 変数を決め打ちで書いてたのを UNICODE_VERSION を make の Substitution References という機能で分解して取り出すようにしています。

[ca4cbe59ed] Nobuyoshi Nakada 2022-09-14 10:15:45 UTC

enc/unicode/case-folding.rb を tool/enc-case-folding.rb に移動しています。

ruby-trunk-changes 2022-09-16

今日は YJIT の小さな変更や make test-bundler の依存関係の修正などがありました。

[cc7f6fe734] Noah Gibbs 2022-09-15 14:14:27 UTC

YIT の icache (たぶん CPU の機械語命令のキャッシュ)のクリアをする rb_yjit_icache_invalidate() という関数は aarch64 アーキテクチャ向けではビルド時にエラーになるようにしています。 https://github.com/ruby/ruby/pull/6380

[3ff65dcd8b] git 2022-09-16 04:37:37 UTC

version.h の日付更新

[c8d94d2797] Nobuyoshi Nakada 2022-09-16 05:46:21 UTC

make test-bundler の依存関係に $(arch)-fake.rb を追加しています。2e324b645e16e67c14de80ea34b1d61165045f22 で test-bundler で fakr.rb を経由するようにしたので依存関係の追加が必要になったためだと思います。

[6ad6994457] Takashi Kokubun 2022-09-16 08:03:18 UTC

標準添付ライブラリ drb のテストの一部で MinGW 環境で Thread leak が起きて他のテストに影響があるとのことでスキップするようにしています。

[a28e7871e5] Koichi Sasada 2022-09-16 09:12:46 UTC

gems/bundled_gems の debug.gem のテストに使う commit hash の指定を再度更新しています。

ruby-trunk-changes 2022-09-15

今日は YJIT の最適化や splat つきのメソッド呼び出しの JIT コンパイル対応追加、rubygems の不具合修正などがありました。

[f2429f0af5] Nobuyoshi Nakada 2022-08-19 06:22:22 UTC

YJIT を有効にしていると不要でも miniruby のビルドが毎回走ってしまうのを回避するため yjit/yjit.mk の依存関係の書きかたを変更しているようです。

[e1a9d88494] Nobuyoshi Nakada 2022-09-14 04:46:45 UTC

f2429f0af57536a354159f08aac729d6e4cdef38 の続き。 yjit/yjit.mk の libyijt.a のビルド後に touch コマンドでファイルの更新日時を更新するようにしています。 Rust のビルドでキャッシュが効いててファイル変更がない場合があるためとのこと。更新がないのならそれはそれでいいような気もしますが……。

[075df960c9] Nobuyoshi Nakada 2022-09-14 06:23:04 UTC

e1a9d8849403afea04ca2e11f97245590dcc1597 のさらに続き。 yjit/yjit.mk で touch コマンド実行するところを変数にして touch している理由についてコメントを追記しています。

[f512df7398] Kenta Murata 2022-09-14 13:17:39 UTC

configure に --with-gmp-dir オプションを追加して OPT_DIR 変数にセットするようにしています。 OPT_DIR を上書きしちゃっていいのかな? と思ったけど --with-opr-dir の前に書いてあるから --with-opt-dir が指定されたらそっちは追加するようになってるので大丈夫なのか。 また --without-gmp オプションが指定されたら --with-gmp-dir の指定も無効にするようにしています。 https://github.com/ruby/ruby/pull/6366

[960db13c47] "S.H" 2022-09-14 14:10:21 UTC

parse.y の kwd_append() 関数内の処理を opt_arg_append() という関数に委譲するようにリファクタリング

[2e25b85a7e] Kenta Murata 2022-09-14 12:20:32 UTC

f512df73986c74e2f4bd65ca642879a0618da213 の追加修正。やっぱり --with-gmp-dir の指定を OPT_DIR にセットする時に上書きじゃなくて追加にするようにしています。ただこのため --without-gmp の指定があった時に OPT_DIR を戻すというのはされなくなっています(空に戻してたので)。 https://github.com/ruby/ruby/pull/6366

[8f37e9c918] Takashi Kokubun 2022-09-14 14:27:52 UTC

YJIT の機械語生成時に使用するレジスタやメモリの bit 幅が小さい結果だけ必要なときにわざわざ and していたのを直接必要な bit 幅で扱うように最適化しています。 https://github.com/ruby/ruby/pull/6359

[758a1d7302] Jimmy Miller 2022-09-14 14:32:22 UTC

YJI はこれまで *args による配列を展開した引数渡しがサポートされていなかったみたいでその対応を追加しています。 https://github.com/ruby/ruby/pull/6341

[b6a9e68391] Nobuyoshi Nakada 2022-09-14 14:08:24 UTC

common.mk に noarch-fake.rb のターゲットを追加して touch コマンドで空ファイルを生成するようにしています。確か 2767cb282531be10c6393d3d7c48fcdd2935ca4d で tool/make-snapshot でパッケージの作成時に空ファイルを作るようにしてましたがリポジトリのソースツリーからのビルドでも必要だったみたいです。

[0953ea64a2] git 2022-09-14 15:32:30 UTC

version.h の日付更新

[fb2e9053b3] Nobuyoshi Nakada 2022-09-14 15:47:46 UTC

Travis-CI のビルド時に gems/src/ ディレクトリを作成しておくようにしています。

[d5cdc2edd0] Nobuyoshi Nakada 2022-09-14 15:58:54 UTC

Travis-CI での arm 版のビルド時に事前にインストールするサードパーティのライブラリに libyaml-dev:armhf を追加しています。

[f98d6d3f38] John Hawthorn 2022-09-14 20:15:55 UTC

YJIT で respond_to? メソッドの呼び出しを専用の関数呼び出しに展開するように対応を追加しています。 https://github.com/ruby/ruby/pull/6363

[513a11b477] Jemma Issroff 2022-09-14 20:48:40 UTC

benchmark/ にインスタンス変数についてのベンチマークを追加しています。

[ae2e8d364f] Nobuyoshi Nakada 2022-09-14 16:31:34 UTC

irb のヒストリファイルの保存についてのテストで利用する一時ディレクトリ名に pid を含めたけど Dir.mktmpdir が生成する時に含めてくれてるので削っています。

[752ae81ed1] Nobuyoshi Nakada 2022-09-14 16:33:17 UTC

irb のヒストリファイルのテストでファイルができてるかどうかの確認の assert を assert_not_send を使うようにしてよりわかりやすいエラーメッセージが得られるようにしています。

[d152ac677c] Nobuyoshi Nakada 2022-09-15 00:25:16 UTC

GitHub Actions の CodeQL を使ったチェックに lib/syntax_suggest の配下は無視させるように設定を追加しています。時間がかかるためみたいです。ファイルサイズ的にはそんなにすごく大きなライブラリじゃないんですけどね。

[ec0d9a6a6f] Hiroshi SHIBATA 2022-09-15 02:22:09 UTC

bundler のテスト用の lockfile の PLATFORMS の指定に arm64-darwin-22 というのを追加しています。最新の macOS でのテストのためとのこと。

[6b2b9e0019] Hiroshi SHIBATA 2022-09-15 02:23:38 UTC

ec0d9a6a6f5da97a6727629ee8bd6c282c519697 に続いて bundler のテスト用の lockfile の PLATFORMS に x86_64-darwin-21 を追加しています。あれ、arm と x86_64 でバージョン番号が違う?

[bf72afa766] Nobuyoshi Nakada 2022-09-15 00:59:05 UTC

bundler で Persistent::Net::HTTP::Persistent というクラスを継承してモンキーパッチしたクラスを利用していたのをやめています。古い TLS バージョンに対して警告を出力するためとのことですが RubyGems.org が古い TLS バージョンを拒否するようになったので不要になったとのこと。

[68a5b0f086] Kevin Newton 2022-09-06 16:33:23 UTC

rubygems でパッケージを展開する時にファイルの mode を設定する時に下位16bit を越えたビットが立ってるような値が指定されてても無視するようにしています。おかしな tar パッケージを展開した時に RangeError が発生するのを抑制するためみたいです。しかしそういうおかしなパッケージならエラーになったほうがいいような気もしますが、パッケージを作成した環境によっては正常な手順で作成された tar パッケージでも起こりえるということみたいです。

ruby-trunk-changes 2022-09-14

今日は主にビルドプロセスのリファクタリングや修正と irb のヒストリファイルの扱いの修正などがありました。

[6a78ae2fe2] Takashi Kokubun 2022-09-13 22:21:19 UTC

cf52a2c9ba0e2add78f50c32dfadda8e7808d2e9 で追加された .github/CODEOWNERS ファイルを削除しています。昨日の 9179f666fbabfe244801060d76bb95de3831c217GitHub Actions を使って自動 reviewers 設定するようにしたからかな。 https://github.com/ruby/ruby/pull/6365

[b876230e5c] git 2022-09-13 22:21:38 UTC

version.h の日付更新

[9299db49f5] Jeremy Evans 2022-09-14 01:15:32 UTC

irb の履歴保存の処理でヒストリファイルの競合検出の処理が事前にヒストリファイルが存在しなかった時に保存されない誤判定をしてしまっていたのを修正しています。

[e2b47b832f] Nobuyoshi Nakada 2022-09-14 01:42:38 UTC

configure の --enable-rpath フラグと --with-opt-dir の処理を変更しています。「一度OPT_DIRからLDFLAGSとかに追加して、その後でrpathのフラグを選択してから改めてLDFLAGSとかを書き換えてたのを、rpath選択->OPT_DIR処理に」 とのこと。 https://github.com/ruby/ruby/pull/6367

[f863bc505c] Nobuyoshi Nakada 2022-09-14 02:05:43 UTC

irb のヒストリファイルの保存で Kernel#open を使ってたのを File.open を使うようにして、Encoding の指定を mode 引数の文字列じゃなく encoding キーワード引数で指定するようにしています。 LC_MESSAGES の encoding が nil の時に不正な mode になってしまってエラーになるのを避けるため。

[c28a4e0340] Nobuyoshi Nakada 2022-09-14 02:18:58 UTC

tool/sync_default_gems.rb および tool/lib/vcs.rb でコミットログの Fixes/Fixed に続く #nnn を GitHub の pull request または issue のリンクに変換する処理の正規表現を変更しています。おそらくマッチする内容は同じ?

[c428fc0e1f] Nobuyoshi Nakada 2022-09-13 14:56:34 UTC

configure で macOS 環境で -undefined dynamic_lookup というオプションを DLDFLAGS に追加しようとするのをやめています。もう使われなくなったオプションみたいです。

[035978d7be] Nobuyoshi Nakada 2022-09-13 15:06:46 UTC

common.mk の make test-buddler などで make の並列実行のための fd を伝播させるために環境変数 MFLAGS を設定して ruby を起動するようにしています。

[2e324b645e] Nobuyoshi Nakada 2022-09-13 15:58:43 UTC

make test-bundler などで ruby 起動する時に -r./$(arch)-fake を渡して fake.rb を利用するようにしています。

[d66b29ccfb] "NARUSE, Yui" 2022-09-14 08:27:38 UTC

README.md に How to build というセクションを追加して doc/contributing/building_ruby.md へのリンクを置いています。

ruby-trunk-changes 2022-09-13

今日は dummy encoding の Encoding::UTF_16, UTF_32 で動的にエンディアン検出する処理の廃止や、bundler の冗長な処理をシンプルにリファクタリングする最適化、mswin 環境でも T_BUGNUM 型の多倍長整数実装に libgmp を利用できるようにする変更などがありました。

[6525b6f760] Benoit Daloze 2022-09-10 17:15:49 UTC

エンディアンの指定なしの dummy encoding UTF_16 と UTF_32 で BOM をみて動的にエンディアン検出するのをやめています。差分ではよくわかりませんでいたがテストをみると BE として扱うのかな。 [ruby-core:109371] [Feature #18949]

[acc61cbf4a] Benoit Daloze 2022-09-12 12:59:45 UTC

6525b6f760ccd9612c9546b0313ab1c7e4af5e66 の UTF_16, UTF_32 の dummy encoding のエンディアン自動検出の廃止について NEWS に追記しています。 [ruby-core:109371] [Feature #18949]

[a4860e043e] David Rodríguez 2022-08-24 06:39:00 UTC

bundler のユーティリティメソッドで不要な spec リストのソートを削除。

[8d2bcc88ff] David Rodríguez 2022-08-24 06:51:47 UTC

a4860e043e073e9caa2494284df4af10ca6550da と同様に bundler で不要な spec リストのソートを削っています。

[6a21d196ba] David Rodríguez 2022-08-24 08:05:20 UTC

bundler の依存関係解決時の spec リストの検索時に毎回 sort してた? のをやめています。速度のためだと思われます。

[dce73c8616] David Rodríguez 2022-08-24 08:17:04 UTC

bundler の Bundler::GemVersionPromoter というクラスのインスタンスを作る処理のリファクタリング

[03d1962703] David Rodríguez 2022-08-24 08:32:38 UTC

bundler の依存関係解決処理でもうひとつ不要なソート処理を削っています。

[2aa8edaec7] David Rodríguez 2022-09-08 22:05:49 UTC

bundler の spec の検索メソッドのリファクタリング。ループ内で毎回重複を省いてたのを一度全部配列に入れてから Array#uniq! で後でまとめて削るように簡単な実装にしています。

[fcf861a138] Koichi Sasada 2022-09-12 17:36:44 UTC

gems/bundled_gems の debug.gem のテストに使う commit hash を更新しています。

[bc8bbd23ab] git 2022-09-13 00:25:25 UTC

version.h の日付更新

[9179f666fb] Takashi Kokubun 2022-09-13 01:17:17 UTC

.github/auto_request_review.yml というファイルを追加して特定のファイルの変更を含む pull request に自動的に reviewers を設定するようにしているようです。 YJIT 関連の変更に yjit という team を reviewers にするために追加しているみたいです。このためと思われる GitHub Actions の workflow 設定も追加されているので GitHub Actions によって設定するようにしているんだと思います。

[64cd097009] Takashi Kokubun 2022-09-13 01:24:35 UTC

9179f666fbabfe244801060d76bb95de3831c217 で追加した .github/auto_request_review.yml の yjit/ ディレクトリ配下の指定に "??" を使って再帰的にサブディレクトリの下も対象にするようにしています。

[2e21fef6a4] Takashi Kokubun 2022-09-13 01:38:10 UTC

9179f666fbabfe244801060d76bb95de3831c217 で追加した pull request の reviewers 追加のための GitHub Actions の workflow でトリガーとなる pull request の状態として synchronized というイベントは対象から外しています。

[391eebfe69] Takashi Kokubun 2022-09-13 01:48:31 UTC

GitHub Actions の MinGW 環境向けの workflow の make all のタイムアウトを 20分から 30分に延長しています。

[316b44df09] "U.Nakamura" 2022-09-13 06:43:05 UTC

T_BIGNUM 型の多倍長整数の実装に libgmp を利用するのは mswin 環境ではサポートされていなかったのをサポートするようにしています。 win32/configure.bat に --with-gmp というオプションを追加してこれを指定したら有効にするみたいです。別途 libgmp のインストールは必要だと思いますけど。

ruby-trunk-changes 2022-09-12

今日は IO#sysread の Windows 環境での不具合修正などがありました。

[684353fc03] Jeremy Bopp 2022-09-11 14:08:14 UTC

IO#sysread に -1 を渡した時に Windows 環境で wide char 向けに偶数に切り上げる処理が誤動作して例外にならずに動いてしまうという不具合を修正しています。 [ruby-core:109054] [Bug #18880]

[9205b8c801] Nobuyoshi Nakada 2022-09-11 16:23:52 UTC

b8c376cb9d91854fd40f6e06f07773404899b54f (r45402) という 2014年のかなり昔の defs/gmake.mk でコンパイルオプションに -O0 が指定されてた時に XCFLAGS から -D_FORTIFY_SOURCE を削るようにしてた変更を revert しています。昔は最適化を off にした時に -D_FORTIFY_SOURCE が指定できなかったけど今は大丈夫になったみたいです。

[6f8267b7f3] git 2022-09-11 22:48:12 UTC

version.h の日付更新

[89077b4c5a] Maple Ong 2022-09-11 22:50:55 UTC

compile.c の VM 命令列を変更する最適化を行う iseq_peephole_optimize() でいくつかの最適化でどのような命令の変更をするのかコメントに書かれてないものがあったのを追記しています。こういうのすごく助かりますね。

[ed029e9bd4] Nobuyoshi Nakada 2022-09-12 10:53:10 UTC

conofigure で -std=gnu99 というオプションを試すためのコードを削除しています。現在は AC_PROG_CC_C99 という専用のマクロでチェックしていてこの処理は冗長になっていて、C++コンパイラではむしろビルドエラーの原因になることがあったみたいです。