The fact that "for{}" is a terminating statement and "for true {}" is not,
parallels the fact that "return" is a terminating statement and "if true {
return }" is not.
On Friday, March 5, 2021 at 4:25:17 PM UTC-8 Ian Lance Taylor wrote:
> On Fri, Mar 5, 2021 at 4:11 PM 'Axel Wagner' via golang-nuts
> <[email protected]> wrote:
> >
> > FWIW, one option I didn't mention, but which deserves a mention:
> >
> > We could replace "all other statements are not terminating" with "an
> implementation is allowed to treat other statements as terminating, if it
> can prove it" (or similar). This wouldn't break the compatibility promise,
> as it would only start accepting programs that are currently rejected.
> However, the job of the spec is to clearly say which programs are valid and
> which are not. There are some cases where the spec allows an implementation
> to chose behaviors - but I don't think any of them would make the validity
> of go programs so blatantly dependent on what heuristics a compiler author
> might consider reasonable or not. They are mostly about performance and
> future-proofing. So we'd likely pay a pretty hefty price in terms of
> portability of code between compilers. We could still do it, but we still
> need to ask ourselves if it's really worth it. After all, again, the worst
> case is having to add an extra `return` here and there.
>
> Yes, in general we don't want compilers to accept or reject programs
> based on heuristics. That would mean that different compilers would
> accept or reject different programs. We want to avoid that as much as
> is feasible. We want all the compilers to implement the same
> language.
>
> Ian
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/0f91b03e-59d6-4d23-aca8-cdcdf7b41067n%40googlegroups.com.