PHP RFC: True Async

Проект TrueAsync около года продвигался через официальный процесс RFC на wiki.php.net. На данный момент опубликованы два RFC, которые описывают базовую модель конкурентности и структурную конкурентность.

RFC #1 — PHP True Async

Автор: Edmond [HT]Версия: 1.7Целевая версия: PHP 8.6+Draft

Основной RFC, определяющий модель конкурентности для PHP. Описывает корутины, функции spawn() / await() / suspend(), объект Coroutine, интерфейсы Awaitable и Completable, механизм кооперативной отмены, интеграцию с Fiber, обработку ошибок и graceful shutdown.

Ключевые принципы:

  • Минимум изменений в существующем коде для включения конкурентности
  • Корутины сохраняют иллюзию последовательного выполнения
  • Автоматическое переключение корутин при I/O операциях
  • Кооперативная отмена — «cancellable by design»
  • Стандартный C API для расширений

Читать RFC на wiki.php.net →

RFC #2 — Scope и структурная конкурентность

Автор: Edmond [HT]Версия: 1.0Draft

Расширение базового RFC. Вводит класс Scope, привязывающий время жизни корутин к лексической области видимости. Описывает иерархию scope'ов, распространение ошибок, политику «зомби»-корутин и критические секции через protect().

Что решает:

  • Предотвращение утечки корутин за пределы scope
  • Автоматическая очистка ресурсов при выходе из scope
  • Иерархическая отмена: отмена родителя → отмена всех дочерних
  • Защита критических секций от отмены
  • Обнаружение дедлоков и self-await

Читать RFC на wiki.php.net →

Как связаны эти RFC

Первый RFC определяет низкоуровневые примитивы — корутины, базовые функции и C API для расширений. Второй RFC добавляет структурную конкурентность — механизмы управления группами корутин, которые делают конкурентный код безопасным и предсказуемым.

Вместе они формируют полную модель асинхронного программирования для PHP:

RFC #1: True AsyncRFC #2: Scope
УровеньПримитивыУправление
Что даётspawn(), await(), CoroutineScope, TaskGroup, protect()
АналогииGo goroutines, Kotlin coroutinesKotlin 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.