Closed buddha314 closed 6 years ago
I didn't want to muse about this on the SO issue, but I'm trying to remember whether it was our intention to support continue
s (but not break
s) within forall
loops. My sense is "yes", but I can't recall for sure. The challenge with break
s is that it would logically imply shooting down all the other concurrent tasks that are running, which is a significant challenge (at least, to do efficiently). I thought we'd determined that continue
statements could be implemented simply by continue
ing within the serial loop that a given task encountering the statement is running? Does anyone remember better than I do?
Ah yes, here's what I was thinking of, suggesting we had decided it should be legal, but may not have ever implemented it: https://github.com/chapel-lang/chapel/commits/master/test/statements/sungeun/continue_forall_label.chpl
@daviditen, @vasslitvinov, do either of you recall anything about this?
It might also be that the "continue" statement works in an if/else with curly braces but not in the one-line syntax. But I also don't have a lot of trust in our testing of variations like this.
It might also be that the "continue" statement works in an if/else with curly braces but not in the one-line syntax.
Rewriting the test in that way shows that this is not true—the behavior is the same.
I really thought that we had continue
working in forall
loops at one point, but going as far back as 1.9 that seems to not be the case. In 1.15 and earlier we at least had a better error message:
contin.chpl:5: error: continue is not allowed in forall statement
So, I know this thread is about the error message, is there also one about (a) how it hurts my feelings and (b) how we are going to jump out of forall
loops?
I suspect the error message is easy to fix.
is there also one about (a) how it hurts my feelings
You should know by now we don't care about your feelings, Bruce.
and (b) how we are going to jump out of forall loops?
I think this is now that issue (which is why I put "incorrect" in parens).
That said, note that continue
doesn't jump out of loops, it just skips ahead to the next iteration. break
jumps out of loops but is not planned for support in forall loops (at least in the forseeable future) in Chapel due to the implementation challenges mentioned above.
If what you want is continue
, then I think we should just make that happen on this issue. If you also want to be able to use break
in a forall loop, then I think that should be a new issue, though I think it's going to be a much more controversial one.
Vass writes:
I suspect the error message is easy to fix.
It'd be great to have the error message not be an outright lie as it is now if it's 5-15 minutes of work. But I think getting continue
to work in forall
s would be the satisfactory way to close this issue.
The real request is to have it "continue", as in "stop on this particular one", not "stop on the whole loop".
Resolved by #8125 .
Now, inside a forall: continue
works as in a for-loop, break
results in a reasonable error message.
Based on this SO Post and Bruce's reply.
Yields