IL PROGETTO

Ricostruire PHP dal comportamento osservabile.

phpr non traduce lo Zend Engine riga per riga. Reimplementa il linguaggio e il runtime in Rust, usando PHP 8.5.7 come oracolo di compatibilità.

L'IDEA

Preservare il contratto, non l'eredità tecnica.

Il cuore storico di PHP è un grande sistema C, collaudato ma vincolato a decenni di compatibilità e scelte architetturali. phpr parte da un'altra domanda: qual è il contratto che un runtime alternativo deve davvero rispettare?

La risposta è l'output osservabile: valori, coercizioni, warning, eccezioni, side effect 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

Dal file PHP alla VM.

La produzione usa un solo motore: una VM a bytecode. Il parser mago produce la struttura sintattica; il runtime effettua il lowering verso HIR, compila il bytecode e lo esegue in un dispatch loop esplicito.

Architettura phpr: sorgente PHP, parser mago, AST/HIR, bytecode, VM.

php-types

Semantica

Zval, stringhe, array, oggetti, confronto, coercioni, stream e primitive condivise.

php-runtime

VM

Lowering, compilatore, bytecode, OOP, eccezioni, GC, PDO e dispatch.

php-builtins

Standard library

Funzioni pure e integrazioni host verificate contro il runtime di riferimento.

php-cli

CLI

Il binario phpr, con stream, opzioni ed exit code compatibili.

phpt-runner

Conformance

Esegue il corpus ufficiale, isola i test e mostra il diff rispetto all'oracolo.

php-server

Server, in evoluzione

Un ponte verso SAPI residente, preload e distribuzione standalone; non ancora produzione.

Maturità attuale

phpr è un progetto sperimentale in rapido sviluppo. Molto del linguaggio core è operativo, ma diverse estensioni e superfici SAPI non sono ancora disponibili. Non è oggi un sostituto consigliato per runtime PHP in produzione.

Leggi lo stato completo e i limiti →

Fonte primaria: README tecnico del repository ↗