JDK-8300691 - final variables in for loop headers should accept updates
Brian Goetz
brian.goetz at oracle.com
Mon Oct 21 17:53:39 UTC 2024
I've noticed people often use the word "common" when they mean something
else. This is usually relative to their own personal experience: "I
commonly see..." But that doesn't necessarily make them "common"; if you
did a query over all of Github, the percentage of loops that are of this
"common" idiom would surely be ... vanishingly uncommon.
I think what you mean is "not unheard of".
On 10/21/2024 1:37 PM, Holo The Sage Wolf wrote:
>
> I disagree with the idea that "ranges" replace loops.
>
> It is a common to see stuff like:
>
> for(var x = buffer.read(); x != -1; x =buffer.read())
>
> Or
>
> while((x = buffer.read()) != -1)
>
> In both cases, x is most likely (effectively) frozen inside the
> loop-clause, there is no reason to not treat it as (effectively) frozen.
>
>
> Yes it is technically possible to wrap those in Iterable, but I don't
> see this pattern die any time soon
>
>
> On Mon, 21 Oct 2024, 20:22 Kevin Bourrillion, <kevinb9n at gmail.com> wrote:
>
> well, uhh, "nay" :-)
>
> But seriously, I don't disagree that in Example A it's more than
> sufficiently unambiguous which value the developer wants. I just
> feel like this whole topic is uncomfortably intricate and messy,
> and the specific benefits of the change don't feel to me like they
> will ever be worth even the time that's /already/ gone into
> discussing it, especially when (as Tagir said) what users really
> want is loops over ranges anyway.
>
> To me changing nothing feels like winning here, but that's just me.
>
>
> On Mon, Oct 21, 2024 at 10:00 AM Archie Cobbs
> <archie.cobbs at gmail.com> wrote:
>
> On Mon, Oct 21, 2024 at 11:36 AM Maurizio Cimadamore
> <maurizio.cimadamore at oracle.com> wrote:
>
> What I'm trying to say is that if a developer is confused
> (by the i++) on what "frozen" means for a loop variable,
> they won't find any clarity in our explanation that
> "lexically scoping trumps everything else". E.g. whether a
> developer reads the STEP part of a loop as part of the
> body (after the end of the body) or not is, I believe, a
> very subjective thing - and one which affects how any
> change we make in the area will be perceived (IMHO).
>
> Yes, if a developer is mentally cutting and pasting the STEP
> onto the tail of the BODY then you're right, that makes it
> appear as if the variable is not really "frozen".
>
> But the original basic for() proposal has the analogous
> problem - i.e., if a developer is mentally cutting and pasting
> the STEP onto the tail of the BODY, then in the original
> proposal the variable no longer appears to be "effectively
> final in the body of the loop".
>
> So it seems to me that this proposal and the original basic
> for() proposal suffer equally in that particular respect, and
> such a developer is not going to be satisfied by either of
> these new mental models.
>
> Of course, as with every new proposed feature, we hear a
> lot from developers who think that the new proposal
> addresses a specific pain point that they thought should
> never existed in the first place. But we tend to hear less
> about a less vocal portion of users who might just be
> silently ok with the status quo. Or maybe, in this
> instance, we don't hear from them because they aren't
> there (although, Tagir expressed some concerns [1], so I
> have to assume there are such developers out there
> _somewhere_ :-) )
>
> I too would like to hear more opinions... speak up, naysayers :)
>
> -Archie
>
> --
> Archie L. Cobbs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20241021/d6ef3c12/attachment-0001.htm>
More information about the amber-dev
mailing list