PHP RFC: True Async
Проєкт TrueAsync просувається через офіційний процес RFC на wiki.php.net.
На даний момент опубліковано два RFC, які описують базову модель конкурентності
та структурну конкурентність.
RFC #1 — PHP True Async
Основний RFC, що визначає модель конкурентності для PHP.
Описує корутини, функції spawn() / await() / suspend(),
об’єкт Coroutine, інтерфейси Awaitable та Completable,
механізм кооперативного скасування, інтеграцію з Fiber,
обробку помилок та graceful shutdown.
Ключові принципи:
- Мінімум змін у наявному коді для увімкнення конкурентності
- Корутини зберігають ілюзію послідовного виконання
- Автоматичне перемикання корутин при I/O операціях
- Кооперативне скасування — «cancellable by design»
- Стандартний C API для розширень
RFC #2 — Scope та структурна конкурентність
Розширення базового RFC. Вводить клас Scope, що прив’язує
час життя корутин до лексичної області видимості.
Описує ієрархію scope’ів, поширення помилок,
політику «зомбі»-корутин та критичні секції через protect().
Що вирішує:
- Запобігання витоку корутин за межі scope
- Автоматичне очищення ресурсів при виході зі scope
- Ієрархічне скасування: скасування батька → скасування всіх дочірніх
- Захист критичних секцій від скасування
- Виявлення дедлоків та self-await
Як пов’язані ці RFC
Перший RFC визначає низькорівневі примітиви — корутини, базові функції та C API для розширень. Другий RFC додає структурну конкурентність — механізми керування групами корутин, що роблять конкурентний код безпечним та передбачуваним.
Разом вони формують повну модель асинхронного програмування для PHP:
| RFC #1: True Async | RFC #2: Scope | |
|---|---|---|
| Рівень | Примітиви | Керування |
| Що дає | spawn(), await(), Coroutine |
Scope, TaskGroup, protect() |
| Аналогії | Go goroutines, Kotlin coroutines | Kotlin CoroutineScope, Python TaskGroup |
| Мета | Запуск конкурентного коду | Безпечне керування життєвим циклом |
Участь в обговоренні
RFC обговорюються в розсилці internals@lists.php.net та на GitHub Discussions.
Також приєднуйтесь до обговорення в Discord.