ruby-trunk-changes 2022-09-09

今日は文字列の連結の最適化、Windows でのビルドエラー修正、YJIT の生成する機械語の最適化、1行パターンマッチの不具合の修正、パッケージ作成時の拡張ライブラリが利用する外部ライブラリの同梱をやめる変更などがありました。

[cd1724bdde] Jean Boussier 2022-09-08 10:43:03 UTC

rb_str_concat_literals() という文字列リテラルの連結に使う関数で C の文字列バッファと Encoding と coderange を指定して連結する rb_enc_cr_str_buf_cat() という関数を使っていたのを String オブジェクトの連結する rb_str_buf_append() を呼び出すようにしています。 rb_str_buf_append() はその中で receiver の String オブジェクトの Encoding が ASCII_8BIT や UTF-8 だった時にショートカットがあってこちらを呼ぶほうが高速になるようです。

[b7fa78b0f3] Jean Boussier 2022-09-08 12:07:43 UTC

vm_insnhelper.c の vm_objtostring() という関数で recv 引数が既に T_STRING 型オブジェクトだったらそれを返すのをメソッドの探索の前にして不要な処理をスキップするようにしています。

[55fef084da] Nobuyoshi Nakada 2022-09-05 11:17:05 UTC

Windows 環境で ftruncate(3) のかわりに chsize() という API を利用するコードがあったけどこれは使われなくなっていたとのことで preprocessor 分岐と不要になったコードを削除しています。

[e2ccb316b4] Nobuyoshi Nakada 2022-09-05 11:23:27 UTC

off_t という型を直接使用していたところを rb_off_t を利用するようにしています。 Windows 環境で型の衝突によるビルドエラーが起きることがあったみたいです。 [Bug #5317]

[7a849e1903] YO4 2022-09-02 15:53:09 UTC

Windows 版の fd が端末か確認する関数でキー入力を確認する時に下位 1 byte 部分だけチェックしていたのが Unicode 文字だと下位 1 byte が 0 で誤判定する可能性があったとのことで修正しています。

[81e7573a64] YO4 2022-09-02 16:03:10 UTC

7a849e1903f3943351773190a1e39e0445b55204 の続きで Windows 版で端末判定する関数でキーの押下イベントでなく KeyUp のイベントでも判定できるように処理を追加しています。

[28030f7b54] YO4 2022-09-07 13:45:43 UTC

81e7573a64b0544da7172966b88e797033b1eae6 のさらに続きで判定のために比較している定数を VK_MENU というマクロ(?)を参照するようにリファクタリングしています。

[6d93644ba1] git 2022-09-08 15:46:21 UTC

version.h の日付更新

[e4f5296f06] Nobuyoshi Nakada 2022-03-31 00:39:16 UTC

拡張ライブラリ fiddle のために libffi を、拡張ライブラリ psych のために libyaml をパッケージに同梱するためにダウンロードしてパッチを当てる指示をするファイル ext/fiddle/extlibs と ext/psych/extlibs を削除しています。3.2 からは外部ライブラリの同梱はやめると。

[35cfc9a3bb] Kevin Newton 2022-09-08 21:09:50 UTC

YJIT の Rust 実装で機械語の mov 命令を減らす最適化を行なっているようです。 https://github.com/ruby/ruby/pull/6342

[59eadf3d25] Nobuyoshi Nakada 2022-09-09 02:35:47 UTC

tool/ln_sr.rb で Windows 環境では symlink の作成に強い権限が必要なので Errno::EACCES が発生することがあるのでこれを無視するように rescue の対象に追加しています。

[db0e0dad11] Kazuki Tsujimoto 2022-09-09 05:00:27 UTC

パターンマッチの後置 in や "=>" による 1行マッチングで Hash のキーにマッチさせる時に文法エラーになっていた不具合を修正しています。 [ruby-core:109813] [Bug #18990]

[2dcaeb75ff] Nobuyoshi Nakada 2022-09-09 02:51:11 UTC

ruby 実装の組み込みメソッド定義を C の関数にする時に使う RB_BUILTIN_FUNCTION() で通し番号が負のものは番兵として最後に置いているエントリなので name メンバーの値を NULL にするようにしています。呼び元で NULL を渡している引数を preprocessor の #_name で展開しているのがコンパイラによっては問題になるのかな。

[be56033248] Nobuyoshi Nakada 2022-09-09 02:52:57 UTC

template/prelude.c.tmpl で各種 prelude.rb を C のソースコード内に埋め込む時にコメントを処理する正規表現を変更しています。 rdoc 用コメントの対応のためみたいです。

[56e5210cde] Aaron Patterson 2022-09-09 06:19:23 UTC

MJIT 用に libclang を使った C の binding を生成する tool/mjit/bindgen.rb で C のソースコードをパースしてマクロの展開をするシンプルな処理をもう少し複雑なマクロに対応するため専用のクラスを導入して C の部分的なパーサー? とその結果の AST から ruby 実装への変換用のクラスを実装しています。 https://github.com/ruby/ruby/pull/6343

[9faa9ced96] Nobuyoshi Nakada 2022-09-09 05:13:42 UTC

ruby 実装による組み込みメソッドの ruby スクリプト内で require と require_relative をサポートして、コンパイルした ISeq を prelude.c に埋め込む時に先に指定のライブラリの .rbinc を #include するソースを吐き出すようにしています。

[aff6534e32] Kazuki Yamaguchi 2022-09-08 13:12:02 UTC

string.c の rb_str_update() から str_modify_keep_cr() の呼び出しを削除しています。必要な時は他の処理の途中で呼び出されるので冗長なだけでなく不要なコピーがされることがあったとのこと。

[cfe10e482e] Nobuyoshi Nakada 2022-09-09 09:58:07 UTC

Struct#new の rdoc 用コメントにキーワード引数 keyword_init: true を指定した時に作成された Class からインスタンス作る時の引数の指定についての記述を変更しています。

[b350053ae4] David Rodríguez 2022-09-07 21:01:03 UTC

rubygems の依存関係解決の優先度で使う platform 判定で =~ の右辺値と左辺値をいれかえてます。NilClass#=~ を消したんだっけ、と思ったけどそんなことはなかったので、spec.platform のオブジェクトに特有の実装があるのかな。