From: "tenderlovemaking (Aaron Patterson)" Date: 2022-06-13T16:49:06+00:00 Subject: [ruby-core:108877] [Ruby master Feature#18825] Specialized instruction for "array literal + `.hash`" Issue #18825 has been reported by tenderlovemaking (Aaron Patterson). ---------------------------------------- Feature #18825: Specialized instruction for "array literal + `.hash`" https://bugs.ruby-lang.org/issues/18825 * Author: tenderlovemaking (Aaron Patterson) * Status: Open * Priority: Normal ---------------------------------------- Feature #18611 is merged. That feature encourages people to write hash methods like this: ``` def hash [@a, @b, @c].hash end ``` I would like to add a specialized instruction for this case `opt_newarray_hash`. It's similar to `opt_newarray_max` and `opt_newarray_min` but for the hash method. ISeqs before the optimization: ``` == disasm: # (catch: FALSE) 0000 getinstancevariable :@a, ( 2)[LiCa] 0003 getinstancevariable :@b, 0006 getinstancevariable :@c, 0009 newarray 3 0011 opt_send_without_block , 0014 leave ``` ISeqs after the optimization: ``` == disasm: # (catch: FALSE) 0000 getinstancevariable :@a, ( 2)[LiCa] 0003 getinstancevariable :@b, 0006 getinstancevariable :@c, 0009 opt_newarray_hash 3 0011 leave ``` The new instruction allows us to avoid allocating a new array and also avoid pushing a stack frame. The implementation is [here](https://github.com/ruby/ruby/pull/5980), and I've also attached a patch. ---Files-------------------------------- 0001-Emit-special-instruction-for-array-literal-.hash.patch (4.91 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: