L'IDEA
Preservare il contratto, non l'eredità tecnica.
Il core storico di PHP è un grande sistema C, collaudato e plasmato da decenni di compatibilità e scelte architetturali. phpr parte da un'altra domanda: quale contratto deve davvero preservare un runtime alternativo?
La risposta è l'output osservabile: valori, coercizioni, warning, eccezioni, effetti collaterali e stack trace. Il corpus ufficiale .phpt rende quel contratto eseguibile e confrontabile.
L'oracolo ha sempre ragione.
Quando documentazione, intuizione e comportamento reale divergono, il progetto misura PHP 8.5.7 e riproduce ciò che accade davvero.
PIPELINE
Da un file PHP alla VM.
La produzione usa un solo motore: una VM a bytecode. Il parser mago costruisce la sintassi, il runtime la abbassa in HIR, compila il bytecode e lo esegue in un dispatch loop esplicito.
Il motore è reimplementato da zero. Alcune superfici di estensione usano deliberatamente binding FFI stretti verso le stesse librerie di sistema dell'oracolo—come libgd, libxslt, libtidy e zlib—quando è il percorso più fedele verso la parità byte.
php-types
Semantica
Zval, stringhe, array, oggetti, confronti, coercizioni, stream e primitive condivise.
php-runtime
VM
Lowering, compilatore, bytecode, OOP, eccezioni, cycle GC, database e dispatch.
php-builtins
Libreria standard
Funzioni value e integrazioni host verificate contro il runtime di riferimento.
php-cli
CLI e SAPI
Il binario phpr, opzioni compatibili e il percorso server validato phpr -S.
phpt-runner
Conformità
Esegue il corpus ufficiale, isola i test e riporta per nome le differenze dall'oracolo.
php-server
Percorso worker Axum
Server Axum e pool di worker su thread dedicati sono in integrazione. Un RetainSet persistente vive ora a livello worker e il lifecycle è cablato; ogni richiesta crea ancora una VM nuova.