[#102652] [Ruby master Bug#17664] Behavior of sockets changed in Ruby 3.0 to non-blocking — ciconia@...
Issue #17664 has been reported by ciconia (Sharon Rosner).
23 messages
2021/02/28
[ruby-core:102445] [Ruby master Bug#17619] if false foo=42; end creates a foo local variable set to nil
From:
pkmuldoon@...
Date:
2021-02-10 10:14:09 UTC
List:
ruby-core #102445
Issue #17619 has been updated by pkmuldoon (Phil Muldoon). While the hoisting issue is meh to mostly okay, I guess, this block: ``` if false foo = 32 end defined?(foo) "local-variable" ``` is arguably an interpreter side effect that can cause problematic issues to developers. Especially if they use `defined?(foo)` as a conditional return value. If a condition in a control flow primitive equates to false, arguably, in the case above, that code is being executed, if only partially (the creation of a local variable `foo`), and causing side effects. If as a developer, I read that code above, I would expect that condition not to be executed, and `foo` remain undefined. Thanks for looking at this. Your attention to it valued! ---------------------------------------- Bug #17619: if false foo=42; end creates a foo local variable set to nil https://bugs.ruby-lang.org/issues/17619#change-90328 * Author: pkmuldoon (Phil Muldoon) * Status: Open * Priority: Normal * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- Take this following code ``` [1] pry(main)> defined?(foo) nil [2] pry(main)> if false [2] pry(main)* foo = 42 [2] pry(main)* end [3] pry(main)> defined?(foo) "local-variable" ``` The inner scope inherits the parent scope (ok) but also modifies the parent scope even if the child scope is never entered. A lesser effect of this: ``` [1] pry(main)> defined?(bar) nil [2] pry(main)> if false [2] pry(main)* bar = 99 [2] pry(main)* end [3] pry(main)> defined?(bar) "local-variable" [5] pry(main)> bar 99 ``` That somewhat lesser affecting because I can just about accept a variable invading the parent scope, and existing after, as a hoisting event. But surely that should not be the case in the negative program-flow case? The side effects of this are defined?(foo) can't be trusted anymore. Apologies if this bug has been filed. I did search for it, but couldn't find anything quite matching it. Thanks! -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>