PHP RFC: True Async

El proyecto TrueAsync se ha promovido durante aproximadamente un año a través del proceso oficial de RFC en wiki.php.net. Se han publicado dos RFC que describen el modelo básico de concurrencia y la concurrencia estructurada.

RFC #1 — PHP True Async

Autor: Edmond [HT]Versión: 1.7Versión objetivo: PHP 8.6+Draft

El RFC principal que define el modelo de concurrencia para PHP. Describe corutinas, funciones spawn() / await() / suspend(), el objeto Coroutine, interfaces Awaitable y Completable, mecanismo de cancelación cooperativa, integración con Fiber, manejo de errores y apagado elegante.

Principios clave:

  • Cambios mínimos en el código existente para habilitar la concurrencia
  • Las corutinas mantienen la ilusión de ejecución secuencial
  • Cambio automático de corutinas en operaciones de I/O
  • Cancelación cooperativa — "cancellable by design"
  • API C estándar para extensiones

Leer RFC en wiki.php.net →

RFC #2 — Scope y concurrencia estructurada

Autor: Edmond [HT]Versión: 1.0Draft

Una extensión del RFC base. Introduce la clase Scope, vinculando el tiempo de vida de las corutinas al ámbito léxico. Describe la jerarquía de scopes, propagación de errores, política de corutinas "zombi" y secciones críticas mediante protect().

Qué resuelve:

  • Prevención de fugas de corutinas fuera del scope
  • Limpieza automática de recursos al salir del scope
  • Cancelación jerárquica: cancelar el padre → cancela todos los hijos
  • Protección de secciones críticas contra la cancelación
  • Detección de deadlocks y self-await

Leer RFC en wiki.php.net →

Cómo se relacionan estos RFC

El primer RFC define primitivas de bajo nivel — corutinas, funciones base y API C para extensiones. El segundo RFC agrega concurrencia estructurada — mecanismos para gestionar grupos de corutinas que hacen que el código concurrente sea seguro y predecible.

Juntos forman un modelo completo de programación asíncrona para PHP:

RFC #1: True AsyncRFC #2: Scope
NivelPrimitivasGestión
Proveespawn(), await(), CoroutineScope, TaskGroup, protect()
AnalogíasGo goroutines, Kotlin coroutinesKotlin CoroutineScope, Python TaskGroup
ObjetivoEjecutar código concurrenteGestión segura del ciclo de vida

Estado actual del RFC

Actualmente el proyecto TrueAsync se ha enfrentado a incertidumbre en el proceso de RFC. Durante los últimos meses, la discusión se ha detenido prácticamente, y no hay claridad sobre su futuro. Es bastante obvio que el RFC no podrá pasar la votación, y no hay forma de cambiar esto.

Por estas razones, el proceso de RFC se considera actualmente congelado, y el proyecto continuará desarrollándose dentro de la comunidad abierta, sin estatus "oficial".

"It's easier to ask forgiveness than it is to get permission."

— Grace Hopper

Participar en la discusión

Los RFC se discuten en la lista de correo internals@lists.php.net y en GitHub Discussions.

También únase a la conversación en Discord.