Particularly im against turn some things into keywords and hiding the implementation from the developers where they have no recourse once the path forced onto everyone don't work quite right for them.
I think Swift have the potential to be more explicit and less implict about some things, and i think that when it was decided for a deterministic GC for start, it would be feasible to change the underlying implementation once the language matured.
So im mostly against to do things like Go where you have a keyword. I rather prefer this to be a library where people can opt-in and customize the ways to do it in a competitive fashion.
You know, even the actor model its not the solution to every problem on concurrency. Sometimes you need thread pools and message loops, and for certain problems they are the right way to do multi-threading despite the actor model be great for a lot of scenarios as Go has proven, specially in servers scenarios.
I was advocating that even in the memory control aspect, make it a language construction with hidden implementation instead of a library with explicit and therefore customizable for different scenarios.
And as it turns out, right now the fact that the ref-count is backed in the language without any recourse, its making Swift unable to become competitive in a couple of important scenarios.
So instead of an 'async' keyword, how about a library with concurrent collections, with a concurrent queue in in and a thread pool that uses native pthread's and leave the rest with the devs.
Concurrent data structures and thread pools with scheduling are very hard already, so making those available and let the user compose their concurrency according to its need would be much better than force to use things that are hidden.
So im against things like 'async' becoming a keyword with the implementation hidden from the user.
But i understand why it would be popular for the majority of programmers out there.
But as jonhburkey have shown in this thread, the fact that the ARC is unavoidable is a big impediment for Swift to become more performant in a couple of scenarios.
No problem with keywords or effects system as long its programmable and not hardcoded . But maybe Swift wants to be more like Java, Go and Javascript and less like Rust and C++ (and in that case, i think its a lost potential of what this language can achieve, which is a lot).
Edit: In case its not clear, its an anwer to @CTMacUser. BTW is there any thread or document about the design you are talking about?
If is something like:
async func x()
--- where ---
@this_is_magical_unicorn_that_turn_this_into_a_side_effect_keyword
func async() {
(explicit implementation for the async 'pseudo-keyword' goes here)
}
Im all for it. If it manage to be explicit and customizable but also being more elegant, even better.