From: "Eregon (Benoit Daloze) via ruby-core" Date: 2024-10-31T19:57:29+00:00 Subject: [ruby-core:119661] [Ruby master Bug#20856] Incorrect and inconsistent multi-thread eval execution with Prism compiler Issue #20856 has been updated by Eregon (Benoit Daloze). Subject changed from Incorrect and inconsistent multi-thread eval execution to Incorrect and inconsistent multi-thread eval execution with Prism compiler Assignee set to kddnewton (Kevin Newton) ---------------------------------------- Bug #20856: Incorrect and inconsistent multi-thread eval execution with Prism compiler https://bugs.ruby-lang.org/issues/20856#change-110318 * Author: hurricup (Alexandr Evstigneev) * Status: Open * Assignee: kddnewton (Kevin Newton) * ruby -v: 3.4.0-preview2 * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- Consider example: ``` s = Thread.new { a = 5 puts eval("a == b") x = 6 } s.join b = 11 ``` As far as I see it, it should not work. Because at the moment of eval, b is unknown and not even declared (it can even be in condition). But it may be available because file `iseq` already compiled and we know that there is b. So, this works in ruby 3.3 in a script we running, wrapped into the method, or required by other file. But in 3.4-preview2: - it works in file - it works in method - it fails if required from other file with: ``` # terminated with exception (report_on_exception is true): (eval at /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3):1:in 'block in ': undefined local variable or method 'b' for main (NameError) from /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3:in 'Kernel#eval' from /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3:in 'block in ' (eval at /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3):1:in 'block in ': undefined local variable or method 'b' for main (NameError) from /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3:in 'Kernel#eval' from /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3:in 'block in ' ``` And this ^^ is correct behavior if you ask me :) but atm it is inconsistent between the ruby versions and even in the scope of 3.4-preview2 -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/