ruby-trunk-changes 2021-05-29

今日は Range オブジェクトが常に freeze されるようになったのにあわせて peephole 最適化で全ての newrage 命令を最適化対象にする変更や case 文の when 節の VM 命令列への変換の変更などがありました。

[788d30a8b3] Alan Wu 2021-05-06 22:54:52 UTC

0096d2b895395df5ab8696d3b6d444dc1b7730b6 で Range オブジェクトを生成時に freeze するようにした変更の続き。 VM 命令列の peephole optimization として文字列の Range を作るのに newrange 命令を利用していたら begin/end が静的な要素だったら直接 putobject で Range オブジェクトを積むようにしていたところで、まず checkmatch 命令をさがしてその前に newrange があったら最適化対象かどうかみるということをしていたのを直接 newrange 命令を検索するようにしています。つまり Range が freeze されるようになったので安全により広範な Range オブジェクト生成も同じ最適化ができるようになったということかと思います。 [ruby-core:90881] [Feature #15504]

[5ada23ac12] Alan Wu 2021-05-26 15:50:37 UTC

case 文の when 節のところの VM 命令を作る時に checkmatch 命令のかわりに "===" メソッドの呼び出しを使うようにしています。 checkmatch 命令も "===" を呼びますが、その時に call cache がきかないのでそのぶん不利だということでただの method call に置きかえたほうが高速になるようです。また複数 Ractor 利用時にロック取得回数も減るのでその点でも有利とのこと。なるほどなぁ。

[e56ba6231f] git 2021-05-28 16:34:27 UTC

version.h の日付更新