ruby-trunk-changes 2020-01-31

今日は String#slice! のパフォーマンス改善などがありました。

[9bcf4f3db2] Nobuyoshi Nakada 2020-01-21 02:47:04 UTC

標準添付ライブラリ delegate の Delegator.delegating_block を ruby2_keywords で修飾して通常引数経由でキーワード引数の委譲を行えるようにしています。 [ruby-core:96949] [Bug#16154]

[18e7f9000d] Aaron Patterson 2020-01-30 01:24:39 UTC

variable.c の rb_gvar_val_marker() からグローバル変数VALUE を mark するのに rb_gc_mark_maybe() を呼んでましたが、これは 0 か正しい heap 内のポインタのはずなのでということでチェックを省いた rb_gc_mark() を直接呼ぶようにしています。

[8e769a5b40] git 2020-01-30 16:23:43 UTC

version.h の日付更新

[53adb53c9a] "NARUSE, Yui" 2020-01-30 17:46:05 UTC

FreeBSD で make に -j オプションを渡した時のビルドエラー回避のため C++ 用ヘッダのテストのための拡張ライブラリで failure.o と failurem1.o のビルドエラーを無視するようにしています。 [ruby-core:95741] [Bug #16331]

[39a1959d28] Florian Heinle 2020-01-30 11:45:21 UTC

Proc クラスの rdoc 用コメントのサンプルコードの評価結果に typo があったのを修正しています。

[9aed421d70] "NARUSE, Yui" 2020-01-30 21:34:49 UTC

53adb53c9aea5da98ed3e470983b2cbfe367cb7d で ext/-test-/cxxanyargs/depend に追加した .IGNORE という directive? は nmake では動かないそうなので !INDEF というのを使って分岐するようにしています。Makefile にこんな記法があるのか。

[ca2888fb3d] "NARUSE, Yui" 2020-01-30 23:00:56 UTC

と思ったら 53adb53c9aea5da98ed3e470983b2cbfe367cb7d と 9aed421d70df65dcada8f529197166166f50357e は revert して ext/-test-/cxxanyargs/extconf.rb で Makefile を生成する時に Windows 以外の時だけ動的に生成するようにしています。

[52dc0632fa] Jean Boussier 2020-01-27 13:47:24 UTC

String#slice! で rb_str_aset_m() に渡すために空文字列オブジェクトを毎回生成していたのを fstring オブジェクトを作って使いまわすようにしています。

[0c4bbb46f1] Nobuyoshi Nakada 2020-01-31 03:11:21 UTC

gc.c で st_lookup(), st_delete() などに渡す引数のところで st_data_t* へのキャストを行うのを一旦変数に代入してその時にキャストするように書きかえています。また switch 文で return するところの後の break を削ってます。

[4942adf68c] Nobuyoshi Nakada 2020-01-31 03:52:22 UTC

ca2888fb3d23d702738873f5c0f956575fd3c5d3 の C++ 用ヘッダテスト用拡張ライブラリの extconf.rb でエラー無視させるように Makefile 生成するようにしたところで、Windows環境だと create_makefile のブロックの評価結果が nil になっちゃうので、最後に mk を返すようにしています。

[cdd75d4e7f] 卜部昌平 2020-01-31 03:01:39 UTC

C++ 向けヘッダファイルにおいて C++ の nullptr キーワードを受付けるようにしています。

[f31dc8a458] 卜部昌平 2020-01-31 04:10:55 UTC

include/ruby/backward/cxxanyargs.hpp の Doxygen 向けコメントの @brief という special command を削除したり @copydoc というのを利用したりといった変更。

[0dd6f020fc] Nobuyoshi Nakada 2020-01-31 05:24:07 UTC

52dc0632faa8450af90e37ef3c2c9f30d06951a1 で String#slice! の実装で使う空文字列オブジェクトを fstring にしてたのをさらに進めて heap 上の slot を使わない fake string (struct RVALUE の領域を自動変数として持ってそこへのポインタを VALUE ということにする)を使うようにリファクタリングしています。
こういうのみるとさっきの 18e7f9000dc3695b9db02ae153d41bd1efa01d6e のグローバル変数の処理で VALUE は heap 指してるはず、というの大丈夫かなぁとか思ったりしてしまいますね。

[05229cef45] Nobuyoshi Nakada 2020-01-31 07:53:04 UTC

String#slice! の実装で rb_str_aref_m() と rb_str_aset_m() を利用することで2回文字列を走査してたのを、独自に展開した実装をすることでワンパスで処理するようにしているようです。