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.