Re: Local constants

From: Date: Fri, 06 Sep 2024 19:42:22 +0000
Subject: Re: Local constants
References: 1 2 3 4 5 6 7 8 9 10  Groups: php.internals 
Request: Send a blank email to internals+get-125458@lists.php.net to get a copy of this message
> On Sep 6, 2024, at 4:47 AM, Rowan Tommins [IMSoP] <imsop.php@rwec.co.uk> wrote: > > On Fri, 6 Sep 2024, at 03:01, Mike Schinkel wrote: >>> Block-scoping doesn't have to allow shadowing of names, >> >> How exactly would that work? Are you suggesting to restrict the use of >> variable names to one per function but still allow for block scoping? > > Yes. That's how C# works, for example - variables are scoped to the block where > they're declared, but each name declared must be unique, not shadowing one that's > currently in scope. Interesting. That seems... an odd choice, just to enable block scoping. BTW, I find block scoping has more pain than pleasure, even when it is not exactly causing bugs, e.g.: if (is_null($widget = getWidget())) { return; } echo $widget->name; // block-scoped $widget not available The above would actually be a runtime bug in PHP, if the code were not covered by testing beforehand. In a statically-typed pre-compiled language like Go, it is just an annoyance. OTOH, I very rarely ever find a situation where I am actually happy to have block scoping. IOW, I don't know what it enables that make people want it so badly, except possibly conflating closures with scoped-blocks, or ability to further control scoping in (too) long functions. I think features that would reward people for writing shorter functions would be much better, but maybe that is just me. >> Shadowing is not a feature that is added, it is the result >> of block scoping, AFAIK. > > Shadowing is absolutely a feature that has to be implemented: the compiler has to store some > "backup" of the old name binding, so that it can be "restored" when the > shadowing variable goes out of scope. Without shadowing, it's instead about tracking the > "lifetime" of the variable, and refusing references to it outside of the block where > it's "live". I'm sure the implementation of both versions varies wildly. Meh, you can twist words to mean that, but your words ignore that all variable scoping is then explicitly implemented as feature. What I meant was the language already implements variable scoping so there is no additional work needed beyond what they language already implements. Unless the language was weirdly designed in such a way that it cannot reuse existing scoping mechanisms, which I will admit may actually be true of PHP. OTOH, I am not speaking of what you just revealed about C# which I find to be also be, weird. > You're right, there is some value in letting people know that a feature would be popular > if implemented. I'm just aware that threads like this can quickly grow into rambling > discussions of wild ideas with little grounding in what's possible, or back-and-forth debates > between two people about something completely hypothetical. When that happens, those with the > experience to actually implement big new features tend to tune out. With respect, local constants and/or immutable local variables are hardly "wild ideas," nor likely something that has "little grounding in what's possible." -Mike

« previous php.internals (#125458) next »