SE-0371: Isolated synchronous deinit

+0.5 at the moment.

Previously I wrote in the pitch:

and added a concern about "nonisolated deinit" (when not writing deinit explicitly) which then suddenly turns into "isolated deinit" when writing.
I think this will cause a huge behavioral gap without any available opt-ins.

While "deinit async" came up as a solution for opt-in explicit isolated deinit, I now find that the entire discussion could be simplified just by introducing nonisolated deinit keyword instead to opt-in the same behavior as the compiler implicitly injects.

I believe having nonisolated deinit will eventually avoid thinking about complicated deinit async topic, and nonisolated deinit (or deinit async in the 2nd favor) is also a must-have feature to accompany with this proposal to add extra +0.5.

Side note

As a side note, having nonisolated deinit will unfortunately break:

  • init / init async / deinit / deinit async

symmetry, but I'm recently inclined to look for:

  • nonisolated init / init / nonisolated deinit / deinit

as more simpler and better correspondence, which actually oppose to the already-accepted SE-0327 On Actors and Initialization.

While explaining why is another long topic (so I will skip here for now), we can still discuss about nonisolated deinit separately from initializer (and their symmetry) topic.