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.

Ключові принципи:

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

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

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

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

Що вирішує:

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

Як пов’язані ці 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.