ruby-trunk-changes 2020-05-18

今日は builtin 関数を使ってメソッドを ruby 実装するソースで builtin 関数呼び出しのメソッドを receiver ありで書いた時にエラーにする変更と MJIT の最適化がありました。

[fa7addebb4] Kazuhiro NISHIYAMA 2020-05-17 12:01:29 UTC

String.new の rdoc 用コメントのサンプルの typo 修正。

[b02c10b240] Nobuyoshi Nakada 2020-05-18 03:28:50 UTC

ruby スクリプトのうち __builtin_xxx で builtin 関数の呼び出しをしているものを VM 命令にコンパイルする時にその呼び出しが receiver つきだったら CompileError にするようにしています。

[acf61e85f3] git 2020-05-18 03:40:15 UTC

version.h の日付更新

[c0cd474d4f] Nobuyoshi Nakada 2020-05-18 03:41:59 UTC

compile.c の compile_call() の引数の int で渡していた type を対応する enum node_type 型に変更しています。

[0e5a58b6bf] Takashi Kokubun 2020-05-18 04:55:41 UTC

MJIT 用の precompiled header にて一部の JIT コンパイルしたコードからはあまり呼ばれないと思われる関数を COLDFUNC というマクロつきで宣言するようにしています。 GCC 拡張の __attribute__*1 などを使ってあまり利用されないテキストセクションに配置させることで命令キャッシュの効率を良くするためのヒントとして使われるようです。

[afd84c58ac] Avdi Grimm 2020-05-16 21:29:05 UTC

doc/dtrace_probes.rdoc にチケット [Feature #14104] への参照を追加して、TracePoint が enabled になってないと DTrace の probe も発火しないことを明記しています(そりゃそうだ、と思うんだけどなにか議論を見落してるかな)。

[b16a2aa938] Takashi Kokubun 2020-05-18 05:47:20 UTC

メソッド呼び出しの klass が即値のクラスだった場合に生成するコードで vm_cc_valid_p() の呼び出し前に RB_SPECIAL_CONST_P() で receiver を判定するショートカットを追加するようにしています。同じメソッドは同じクラスのオブジェクトとして呼ばれることが多いだろうからってことですかね。こうすることでコードサイズを減らすことによる最適化を狙っているようです。ショートカットが無効でもその後の判定に CLASS_OF() のかわりに RBASIC_CLASS() を使えるようにすることでコードサイズが減らせるようです。

[3bada9208a] Takashi Kokubun 2020-05-18 06:42:24 UTC

b16a2aa938d091c387a7437d94dac7f7bb829ba2 で追加した maybe_special_const_class_p() という関数で if 文を使って true, false を return してたのを、if 文の条件部をそのまま return するように書きかえています。

[cf31e98079] Kazuhiro NISHIYAMA 2020-05-18 08:42:50 UTC

internal/bits.h のコメントの typo 修正。

*1:__cold__