DevPrep

Все темы › Swift Concurrency (async/await, акторы)

Что меняет строгая проверка конкурентности в Swift 6?

Senior PRO

Суть

Swift 6 language mode делает data race ошибкой компиляции. Компилятор отслеживает границы изоляции (акторы, задачи, @Sendable-замыкания) и требует, чтобы всё пересекающее их было Sendable либо доказуемо «отсоединено» (region-based isolation, sending). Глобальные и статические var должны быть изолированы к актору, immutable или помечены nonisolated(unsafe). Целый класс ошибок переезжает из рантайма (TSan, редкие краши) в компайл-тайм.

Уровни проверки задаются настройкой Strict Concurrency Checking: minimal → targeted → complete (предупреждения в режиме Swift 5), а переключение Swift Language Version на 6 превращает их в ошибки. Инструменты миграции: @preconcurrency import (гасит ошибки от не-мигрированных модулей), @unchecked Sendable, nonisolated(unsafe), MainActor.assumeIsolated, обёртка legacy-API в @MainActor.

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store