Continuation: неправильное использование ловит компилятор 🐈

🔥 SE-0528 «Continuation — Safe and Performant Async Continuations» (Swift 6.4) добавляет noncopyable Continuation. resume объявлен consuming, поэтому повторный вызов — не рантайм-краш, а ошибка компиляции. Потерять continuation, не возобновив, тоже не выйдет тихо: в deinit стоит fatalError с текстом «Continuation was deinitialized without being resumed». А resume подавляет его через discard self. По производительности пропозал заявляет прямо: ни аллокаций, ни атомарных операций на быстром пути. Две функции из SE-0300 схлопнулись в одну благодаря типизированным throws — withContinuation(of:_:), причём of: имеет значение по умолчанию, так что обычно пишется просто await withContinuation { … }.

⚠️ Ограничение noncopyable: из захвата в escaping-замыкании такую continuation не потребить — «noncopyable 'c' cannot be consumed when captured by an escaping closure». Но тупика нет: есть конвертирующие инициализаторы CheckedContinuation(c) и UnsafeContinuation(c), и ни один из старых типов не задепрекейчен.

#Swift #SwiftLang #SwiftConcurrency #iOSDev #Swift64

Continuation: неправильное использование ловит компилятор 🐈 | Сетка — социальная сеть от hh.ru