🙆
[Feature #15393] Array と Hash リテラルを frozen で定義するコンパイルオプショを追加する提案
[Feature #15393] Add compilation flags to freeze Array and Hash literals
-
Array
とHash
リテラルをfrozen
で定義するコンパイルオプショを追加する提案
frozen = RubyVM::InstructionSequence.compile(<<-eocode, __FILE__, nil, 0, frozen_string_literal: true, frozen_hash_and_array_literal: true)
{ 'a' => ['b', { 'c' => 'd' }] }
eocode
puts frozen.disasm
$ ./ruby thing.rb
== disasm: #<ISeq:<compiled>@thing.rb:0 (0,0)-(0,34)> (catch: FALSE)
0000 putobject {"a"=>["b", {"c"=>"d"}]}
0002 leave
- このチケットではまずは
RubyVM
から対応して将来的にはコードベースでも対応していきたい、って感じみたいですね -
frozen_hash_and_array_literal
という名前や単位が適切かどうかや#deep_freeze
のようなメソッドで対応できないかどうかみたいな内容が議論されています-
frozen_literals
のような全部まとめた名前にするかfrozen_array_literal
frozen_hash_literal
みたいに分けるか -
#deep_freeze
はモンキーパッチが当てられた場合に最適化するのが難しかったり#deep_freeze
の呼び出しに依存しないほうが既存のコードで試しやすい、みたいな話があるみたいですね
-
- 起票は6年前なんですが最近コメントされていたので取り上げましあ
Discussion