PHP RFC: True Async

Il progetto TrueAsync è stato portato avanti per circa un anno attraverso il processo ufficiale di RFC su wiki.php.net. Sono stati pubblicati due RFC che descrivono il modello di concorrenza di base e la concorrenza strutturata.

RFC #1 — PHP True Async

Autore: Edmond [HT]Versione: 1.7Versione target: PHP 8.6+Draft

L'RFC principale che definisce il modello di concorrenza per PHP. Descrive le coroutine, le funzioni spawn() / await() / suspend(), l'oggetto Coroutine, le interfacce Awaitable e Completable, il meccanismo di cancellazione cooperativa, l'integrazione con Fiber, la gestione degli errori e il graceful shutdown.

Principi chiave:

  • Modifiche minime al codice esistente per abilitare la concorrenza
  • Le coroutine mantengono l'illusione dell'esecuzione sequenziale
  • Commutazione automatica delle coroutine nelle operazioni di I/O
  • Cancellazione cooperativa — "cancellable by design"
  • API C standard per le estensioni

Leggi RFC su wiki.php.net →

RFC #2 — Scope e concorrenza strutturata

Autore: Edmond [HT]Versione: 1.0Draft

Un'estensione dell'RFC base. Introduce la classe Scope, legando la durata di vita delle coroutine all'ambito lessicale. Descrive la gerarchia degli scope, la propagazione degli errori, la politica delle coroutine "zombie" e le sezioni critiche tramite protect().

Cosa risolve:

  • Prevenzione delle fughe di coroutine al di fuori dello scope
  • Pulizia automatica delle risorse all'uscita dallo scope
  • Cancellazione gerarchica: cancellare il genitore → cancella tutti i figli
  • Protezione delle sezioni critiche dalla cancellazione
  • Rilevamento di deadlock e self-await

Leggi RFC su wiki.php.net →

Come questi RFC sono collegati

Il primo RFC definisce le primitive di basso livello — coroutine, funzioni base e API C per le estensioni. Il secondo RFC aggiunge la concorrenza strutturata — meccanismi per gestire gruppi di coroutine che rendono il codice concorrente sicuro e prevedibile.

Insieme formano un modello completo di programmazione asincrona per PHP:

RFC #1: True AsyncRFC #2: Scope
LivelloPrimitiveGestione
Forniscespawn(), await(), CoroutineScope, TaskGroup, protect()
AnalogieGo goroutines, Kotlin coroutinesKotlin CoroutineScope, Python TaskGroup
ObiettivoEsecuzione di codice concorrenteGestione sicura del ciclo di vita

Stato attuale del RFC

Attualmente il progetto TrueAsync ha incontrato incertezza nel processo di RFC. Negli ultimi mesi, la discussione si è praticamente fermata e non c'è chiarezza sul suo futuro. È abbastanza ovvio che l'RFC non potrà superare la votazione, e non c'è modo di cambiare questo.

Per queste ragioni, il processo di RFC è attualmente considerato congelato, e il progetto continuerà a svilupparsi all'interno della comunità aperta, senza uno status "ufficiale".

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

— Grace Hopper

Partecipare alla discussione

Gli RFC sono discussi nella mailing list internals@lists.php.net e su GitHub Discussions.

Unisciti anche alla conversazione su Discord.