# Перейшла на повну сувору перевірку паралельності Swift 6 без акторів, з'єднавши блокувальний цикл подій C з головним актором через одного виробника, одного споживача й один порядок, — з'ясувавши, що окрема задача на кожну подію губить порядок, від якого залежить інтерфейс.

вересень 2026

**Ситуація.** Повна сувора перевірка паралельності у Swift 6 перетворює гонки даних на помилки компіляції замість епізодичних аварійних завершень. Складнощі починаються, коли її застосовують до бібліотеки на C: цикл подій ядра — це блокувальний виклик, який має безперервно виконуватися поза головним потоком, а значення, які він повертає, — вказівники без жодних гарантій щодо паралельності. Компілятор не може зробити щодо цього жодних висновків і відхилятиме все, доки межу не буде описано явно.

**Завдання.** Повну перевірку треба було ввімкнути без жодних лазівок, а отже — спроєктувати перехід від блокувального циклу на C до головного актора, а не обходити проблему анотаціями.

**Дія.** Очевидний підхід — окремий актор для кожної підсистеми, але його відкинули на підставі вимірювань, а не з міркувань смаку. Якщо створювати окрему задачу для кожної вхідної події, середовище виконання може планувати їх у довільному порядку, а потік подій ядра впорядкований: якщо подія «повідомлення змінено» випередить подію «повідомлення створено», на яку посилається, інтерфейс покаже редагування того, чого ще не існує. Повторний вхід (reentrancy) в актора лише погіршує ситуацію, бо актор може призупинитися посеред методу й обробити інший виклик. Замість цього обрали навмисно просту модель: один потік‑виробник, який володіє блокувальним циклом, один споживач, одна черга між ними й один‑єдиний перехід на головного актора наприкінці. Порядок зберігається, бо шлях рівно один і ніщо нічого не випереджає. Небезпечні типи, що перетинають цю межу, загорнуто в типи, потокобезпеку яких явно гарантує обгортка, а не просто припускають, і це твердження задокументовано разом із поясненням, чому воно справджується: вказівником володіє один потік, і його копіюють, перш ніж передати.

**Результат.** Застосунок компілюється з повною суворою перевіркою паралельності без жодних придушень, а порядок подій гарантує сама структура, а не надія. Ціна в тому, що архітектура менш паралельна, ніж могла б бути: усе проходить через одного споживача, і якщо він колись стане вузьким місцем, для виправлення доведеться заново з'ясовувати, які події можна безпечно переставляти, — а це саме той аналіз, якого вдалося уникнути.

---

- Роль: Інженер застосунків macOS
- Категорії: [Архітектура рішень](https://advisory.engineer.company/uk/categories/solution-architecture/), [Backend‑розробка](https://advisory.engineer.company/uk/categories/backend/), [Frontend‑розробка](https://advisory.engineer.company/uk/categories/frontend/), [Надійність і резервне копіювання](https://advisory.engineer.company/uk/categories/reliability/), [Оптимізація продуктивності](https://advisory.engineer.company/uk/categories/performance/), [Тестування та QA](https://advisory.engineer.company/uk/categories/testing/)
- Послуги: [Архітектура платформи та рішень](https://advisory.engineer.company/uk/services/platform-architecture/), [Backend- та API‑розробка](https://advisory.engineer.company/uk/services/backend-development/), [Технічне лідерство та консалтинг](https://advisory.engineer.company/uk/services/technical-leadership/)

<https://advisory.engineer.company/uk/portfolio/adopted-swift-6-strict-concurrency-over-a-c-event-loop-156/>
