I agree. I see how we ended up going in this direction, but I think it's problematic from both the perspective John mentions (it's misleading) and also from the perspective of progressive disclosure. Executors are and should remain a very advanced topic, used for customizing behavior in narrow circumstances, not something that should surface when you first encounter concurrency. One should be able to introduce concurrency and reason about the program effectively without ever encountering an executor. We should keep executors out of the nomenclature for concurrency until the need for them naturally arises (e.g., for interacting with other concurrency models and libraries).
Right. Again, thinking of progressive disclosure: with this proposal, it will no longer be the case that having a nonisolated function introduces concurrency. Instead, developers are likely to observe that their asynchronous code is tying up an actor (likely the main actor) for longer than expected and will need to introduce concurrency. @concurrent does what it says, making the annotated function concurrent with respect to the code using it.
I think it serves mainly as a transitional tool, allowing folks to replace code using the #isolation-defaulted parameter trick piecemeal without having to go "all in" on using this upcoming feature introduced in this proposal. That has some benefits for code that needs to support compilers that predate whatever Swift release would contain SE-0461.
I agree that @isolated(caller) is a good spelling here. We've effectively taken @isolated already for @isolated(any), so doesn't really cost us any more syntax.
Doug