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

вересень 2026

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

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

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

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

---

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

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