ruby-trunk-changes 2020-04-13

今日はヘッダファイルの #include で同じファイルを読み込まない最適化が効くように #ifndef #define の記述をファイル先頭に移動する変更などがありました。

[4c8e3f1241] Nobuyoshi Nakada 2020-04-12 14:29:22 UTC

struct rb_scan_args_t のメンバー f_var, f_hash, f_block などは真偽値なので bool 型に変更して末尾に移動し、n_mand と argi は削除しています。これらはいらないのかなと思ったけど n_mand は n_lead+n_tail で計算でき argi はそもそも使われてなかったみたいです。

[f2c3848a5b] git 2020-04-12 15:02:35 UTC

version.h の日付更新

[82fdffc5ec] Alan Wu 2020-04-12 19:19:06 UTC

構造体 struct rb_callinfo_kwarg で末尾にサイズ1 の配列の要素を置くことで可変長のバッファを埋め込む手法が C99 では未定義挙動だとのことで空の配列の要素に書き換えてメモリ確保時に -1 した要素数ぶん多くメモリを確保させてたのをやめています。確か古いコンパイラだと逆にこういう書きかたが NG だったとかでこうしてたんだと思いますが、もう前提にしてる C のバージョンも変更したのでそちらにあわせることにすると。

[a3f6f67967] Takashi Kokubun 2020-04-13 06:10:22 UTC

MJIT_COUNTER というマクロを非ゼロに定義してビルドしたら終了時に JIT コンパイルされた unit の情報をダンプするようにしています。

[4ff3f20540] 卜部昌平 2020-04-10 05:11:40 UTC

gcc でヘッダファイルの include を抑制するのに書く #ifndef の分岐はファイルの先頭になくてはならず、コメントが前にあってもヘッダの open すらスキップする最適化を阻害してしまう(もちろん preprocess 後に空になるという効果はあると思いますが)みたいなので、#ifndef と #define を置くのをファイル先頭に移動しています。また GCC や MSVC では #pragma once というのも効くそうですが Sun C でこれが使えないとのこと。こういう最適化してくれるんですね。 [ruby-core:97750] [Bug #16770]

[c37a357c13] 卜部昌平 2020-04-12 06:42:45 UTC

443389effc37308ce1a3c3a840082a344fc6af56 で冗長なヘッダの #include を削ったのを revert して冗長でも利用してるヘッダは明示的に #include するように戻しています。 4ff3f205408ff8bb413d69151105d301858136ba による最適化の有効化でコンパイルの速度問題が解決されるはずだから、ということでしょう。

[5dc6080cb8] 卜部昌平 2020-04-13 07:38:22 UTC

internal/vm.h に定義されていた定数マクロ CACHELINE を削除しています。 b9007b6c548f91e88fd3f2ffa23de740431fa969 によるメソッドキャッシュの機構の変更時に不要になっていたそうです。