[ruby-core:119613] [Ruby master Misc#20814] iseq optimizations on constant condition

Issue #20814 has been reported by hurricup (Alexandr Evstigneev). ---------------------------------------- Misc #20814: iseq optimizations on constant condition https://bugs.ruby-lang.org/issues/20814 * Author: hurricup (Alexandr Evstigneev) * Status: Open ---------------------------------------- ruby 3.4-preview2 seems optimizes out some stuff when building iseq and this may lead to user unexpected behavior when debugging, because some lines just optimized out. Example: ``` def foo1 if true nil else 1 end end ``` produces: ``` == disasm: #<ISeq:foo1@/test.rb:1 (1,0)-(7,3)> 0000 putnil ( 3)[LiCa] 0001 leave ( 7)[Re] ``` Two questions: - is there way to disable such optimizations? - are there some specs on things that can be optimized. -- https://bugs.ruby-lang.org/

Issue #20814 has been updated by nobu (Nobuyoshi Nakada). Status changed from Open to Feedback Because of the dynamic feature of Ruby, the optimization on ISeq is very limited. For instance, elimination of unreachable branch because of a simple always-true/false condition expression, in your example.
- is there way to disable such optimizations?
To disable optimizations, see the document of `RubyVM::InstructionSequence.compile_option=`. https://docs.ruby-lang.org/en/master/RubyVM/InstructionSequence.html#method-...
- are there some specs on things that can be optimized.
We do not provide explicit documentation or specifications regarding optimizations because they are internal features and may change without notice. ---------------------------------------- Misc #20814: iseq optimizations on constant condition https://bugs.ruby-lang.org/issues/20814#change-110238 * Author: hurricup (Alexandr Evstigneev) * Status: Feedback ---------------------------------------- ruby 3.4-preview2 seems optimizes out some stuff when building iseq and this may lead to user unexpected behavior when debugging, because some lines just optimized out. Example: ``` def foo1 if true nil else 1 end end ``` produces: ``` == disasm: #<ISeq:foo1@/test.rb:1 (1,0)-(7,3)> 0000 putnil ( 3)[LiCa] 0001 leave ( 7)[Re] ``` Two questions: - is there way to disable such optimizations? - are there some specs on things that can be optimized. -- https://bugs.ruby-lang.org/

Issue #20814 has been updated by nobu (Nobuyoshi Nakada). Description updated hurricup (Alexandr Evstigneev) wrote:
ruby 3.4-preview2 seems optimizes out some stuff when building iseq and this may lead to user unexpected behavior when debugging, because some lines just optimized out.
Example: ``` def foo1 if true nil else 1 end end ```
produces: ``` == disasm: #<ISeq:foo1@/test.rb:1 (1,0)-(7,3)> 0000 putnil ( 3)[LiCa] 0001 leave ( 7)[Re] ```
Two questions: - is there way to disable such optimizations? - are there some specs on things that can be optimized.
---------------------------------------- Misc #20814: iseq optimizations on constant condition https://bugs.ruby-lang.org/issues/20814#change-110239 * Author: hurricup (Alexandr Evstigneev) * Status: Feedback ---------------------------------------- ruby 3.4-preview2 seems optimizes out some stuff when building iseq and this may lead to user unexpected behavior when debugging, because some lines just optimized out. Example: ```ruby def foo1 if true nil else 1 end end ``` produces: ``` == disasm: #<ISeq:foo1@/test.rb:1 (1,0)-(7,3)> 0000 putnil ( 3)[LiCa] 0001 leave ( 7)[Re] ``` Two questions: - is there way to disable such optimizations? - are there some specs on things that can be optimized. -- https://bugs.ruby-lang.org/

Issue #20814 has been updated by hurricup (Alexandr Evstigneev). nobu (Nobuyoshi Nakada) wrote in #note-1:
To disable optimizations, see the document of `RubyVM::InstructionSequence.compile_option=`. https://docs.ruby-lang.org/en/master/RubyVM/InstructionSequence.html#method-...
My question is more about the runtime. E.g I want to run a ruby program with optimizations disabled at all. Or load using `rb_load`/`rb_load_protect` while ruby process is already alive with default settings. ---------------------------------------- Misc #20814: iseq optimizations on constant condition https://bugs.ruby-lang.org/issues/20814#change-110288 * Author: hurricup (Alexandr Evstigneev) * Status: Feedback ---------------------------------------- ruby 3.4-preview2 seems optimizes out some stuff when building iseq and this may lead to user unexpected behavior when debugging, because some lines just optimized out. Example: ```ruby def foo1 if true nil else 1 end end ``` produces: ``` == disasm: #<ISeq:foo1@/test.rb:1 (1,0)-(7,3)> 0000 putnil ( 3)[LiCa] 0001 leave ( 7)[Re] ``` Two questions: - is there way to disable such optimizations? - are there some specs on things that can be optimized. -- https://bugs.ruby-lang.org/
participants (2)
-
hurricup (Alexandr Evstigneev)
-
nobu (Nobuyoshi Nakada)