Swift 6.2: что на самом деле включено по умолчанию 🔥
🧵 В Swift 6.2 приехали две большие штуки про изоляцию — и ни одна из них не включена по умолчанию. SE-0461 (nonisolated async остаётся на акторе вызывающего) сидит за upcoming-фичей NonisolatedNonsendingByDefault, а она становится дефолтом только в language mode Swift 7. В Swift 6 без флагов вы получаете старое поведение SE-0338: функция по-прежнему уходит на глобальный executor. SE-0466 («всё @MainActor по умолчанию») — вообще не upcoming-фича, а отдельный флаг -default-isolation MainActor. Авторы сознательно не сделали её upcoming: для библиотек и серверных приложений MainActor по умолчанию — неправильный дефолт.
💡 Почему все путаются: шаблон нового проекта в Xcode 26.2 включает Approachable Concurrency и Default Actor Isolation = MainActor. Люди видят, что nonisolated async крутится на главном потоке, и решают, что это язык. Тот же компилятор на SwiftPM-пакете ведёт себя ровно наоборот.
⚠️ Ещё нюанс, которого нет в тексте пропозала — он виден только в исходниках компилятора: -default-isolation MainActor молча включает ещё и InferIsolatedConformances (SE-0470) с NoExplicitNonIsolated. А вот NonisolatedNonsendingByDefault не включает — это ортогональные настройки, которые постоянно смешивают.