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 считается замороженным, и проект будет развиваться в рамках открытого сообщества, без "официального" статуса.
"It's easier to ask forgiveness than it is to get permission."
— Grace Hopper
Участие в обсуждении
RFC обсуждаются в рассылке internals@lists.php.net и на GitHub Discussions.
Также присоединяйтесь к обсуждению в Discord.