ruby-trunk-changes 2022-02-18

今日は Enumerable#to_set の追加と Set が autoload されるようにする機能追加と WASI 向けに性能改善のため vm__exec() を独自実装を用意する変更などがありました。

[c8b414b334] Nobuyoshi Nakada 2022-02-17 11:12:38 UTC

bootstraptest/runner.rb の RUBY_PLATFORM を出力するためのコードで ruby -v の出力を利用しているところを結果を変数に入れて使いまわすようにして複数回起動しなくてすむようにしています。

[5952a1f201] Nobuyoshi Nakada 2022-02-17 08:35:38 UTC

dln.c で古い macOS では dlclose(3) に不具合があって異常終了してしまうので呼ばないようにしているのを MAC_OS_X_VERSION_MIN_REQUIRED マクロの preprocessor のチェックで分岐してビルド時に埋め込んでいたのを sysctl() を使ってカーネルのバージョンを取得して動的に判定するように変更しています。

[992bdfea2d] Nobuyoshi Nakada 2022-02-17 08:49:16 UTC

dln.c の dln_open() で libruby の互換性チェックをリファクタリングして、チェックに失敗した時に libruby のファイル名を表示するようにしています。

[4113862c00] Nobuyoshi Nakada 2022-02-16 14:00:15 UTC

configure でビルドに利用するコマンド群を AC_CHECK_TOOL() で存在チェックしていたのを RUBY_CHECK_PROG_FOR_CC() というマクロを定義してこれを使うように変更しています。 cross compile 時に CC に prefix がついていてうまく検索できず警告が出ているのを修正しているようです。 [ruby-core:107223] [Bug #18504]

[4c366ec977] Jeremy Evans 2022-01-14 21:02:46 UTC

Thread.each_caller_location というメソッドを新規追加して、配列でバックトレースを一度に返すのでなくひとつずつブロックに yield する方法を取れるようにしています。メモリ使用量を抑えるためですかね。 [ruby-core:107407] [Feature #16663]

[7757ccb504] git 2022-02-17 16:54:28 UTC

version.h の日付更新

[dd3501bb95] Akinori MUSHA 2022-02-17 09:02:42 UTC

prelude.rb に Enumerable#to_set メソッドを追加してデフォトで任意の Enumerable なオブジェクトを Set に変換できるようにしています。このため Set への autoload が設定されています。 [ruby-core:98964] [Feature #16989]

[ac32b7023a] Akinori MUSHA 2022-02-17 09:10:16 UTC

dd3501bb9580951623a9aa7c2f86f7c98f9d6b9c の Set の autoload 設定と Enumerable#to_set の追加について NEWS に追記しています。 [ruby-core:98964] [Feature #16989]

[dff70b50d0] Yuta Saito 2022-01-27 12:33:39 UTC

WASI 版向けの setjmp() 実装である rb_wasm_setjmp() はライブラリ関数が利用できないので一度必ず main() 関数に巻き戻るという実装をしていたそうで、関数呼び出しが深くネストしていると vm_exec() を呼ぶ都度巻き戻るのでとても遅かったので、WASI 向けに vm_exec() 自体を書きかえて rb_wasm_try_catch_loop_run() という WASI 版専用の TAG 巻き戻り用の関数を作ってこれを呼ぶようにしています。たぶん VM の TAG 管理などのためになにかしている部分と WASM での TAG jump の emulate するための部分があるようにみえますが複雑でよく読めてません。