phprs
A PHP interpreter written in Rust, migrated from the PHP C implementation.
Features
- Memory Safe: Rust's ownership system prevents memory leaks and dangling pointers
- Type Safe: Compile-time type checking with Rust enums
- Thread Safe: Safe concurrent access with RwLock and OnceLock (Rust 2024 compliant)
- Fast: Zero-cost abstractions, JIT compilation, and optimized dispatch table
- JIT Compiler: Just-in-time compilation for hot code paths
- Function Optimizer: Advanced inlining and call optimizations
- Opcode Cache: Cached execution with optimization passes
Quick Start
# Build
# Run tests
# Run a PHP file
# Start web playground
# Open http://localhost:3080
# Package manager
Project Structure
phprs/
├── src/
│ ├── engine/ # Core engine: types, string, hash, alloc, gc, operators,
│ │ # array_ops, lexer, compile, vm, jit, function_optimizer,
│ │ # opcode_cache, benchmark, perf, perf_alloc, facade
│ └── php/ # PHP runtime: streams, filesystem, SAPI, globals
├── bin/
│ └── phprs # Unified CLI (run, serve, pkg)
├── examples/ # PHP and Rust examples (including performance_demo)
└── tests/ # Test suite
API Usage
use compile;
use vm;
// Compile PHP code
let op_array = compile_string?;
// Execute
let mut exec_data = new;
execute_ex;
Status
- ✅ Core engine (types, strings, hash tables, memory, GC)
- ✅ PHP runtime (streams, filesystem, output)
- ✅ Compiler (expressions, statements, functions, classes, traits, namespaces)
- ✅ VM (63 opcodes, dispatch table, 40+ built-in functions)
- ✅ PHP 8.0 features (match expressions, attributes, generators)
- ✅ SAPI (CLI, built-in web server)
- ✅ Package manager (composer.json, Packagist, dependency resolution)
- 📋 Planned: framework support (CodeIgniter 4, Drupal, WordPress — see TODO.md)
Tests
Documentation
- spec.md - Project specification and scope
- ARCHITECTURE.md - Module structure and execution flow
- TODO.md - Migration roadmap and statistics
- PERFORMANCE.md - Optimizations and benchmarks vs PHP 8
- examples/README.md - Example guide