821просмотров
28.3%от подписчиков
25 февраля 2026 г.
Score: 903
isolated(any) and #isolation: Letting Swift Closures Automatically Inherit Isolation ❌ Кто уже перешёл на Swift 6, наверняка заметил, как компилятор стал придираться к concurrency в каждом втором месте - Sendable violation! ℹ️ Ситуация: при использовании withDependencies возникла ошибка компиляции, связанная с тем, что компилятор не смог автоматически определить, что замыкание должно выполняться в контексте MainActor, несмотря на установленную изоляцию по умолчанию. ❓ Почему так? Потому что operation: () async throws -> R компилятор видит как потенциально cross-actor, несмотря на default isolation. И вот тут в дело идут две фичи Swift 6: @isolated(any) (SE-0431) и #isolation (SE-0420). ➡️ Первая - добавление аннотации @isolated(any) к типу функции позволяет компилятору автоматически унаследовать домен изоляции вызывающего кода, устраняя необходимость в ручных аннотациях. operation: @isolated(any) () async throws -> R ➡️ Вторая - макрос #isolation позволяет функции наследовать контекст изоляции вызывающего кода, что упрощает код и повышает безопасность на этапе компиляции. 🗣️ Автор подчёркивает: эти фичи кажутся нишевыми (типа @isolated(any) или #isolation), но в реальных сценариях с DI, тестами или колбэками они спасают от boilerplate и делают код чище. Без контекста из практики — просто еще одно новое слово Swift 6, а с ним — инструмент, который убирает ментальный overhead