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
На поточний момент проект TrueAsync зіткнувся з невизначеністю в процесі RFC.
За останні кілька місяців обговорення практично зупинилося, і немає ясності щодо його майбутнього.
Цілком очевидно, що RFC не зможе пройти голосування, і при цьому немає жодної можливості щось змінити.
З цих причин на поточний момент процес RFC вважається замороженим,
і проект буде розвиватися в рамках відкритої спільноти, без «офіційного» статусу.
Участь в обговоренні
RFC обговорюються в розсилці internals@lists.php.net та на GitHub Discussions.
Також приєднуйтесь до обговорення в Discord.