Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

> **Stable line (2026)** — First maintained **stable** release **[v1.0.0](https://github.com/PurHur/php-compiler/releases/tag/v1.0.0)**; **v1.1.0** prep adds M5 fast-path stability, enum/property-hook parity, `preg_match` JIT, `spl_autoload*`, and php-in-PHP JIT helpers. Demo-ready VM + AOT for a **web-capable PHP subset**, reference examples **000–009**, and an experimental **self-host** path. Not full Zend PHP compatibility — see [what’s missing](https://purhur.github.io/php-compiler/docs/pages/missing-implementation.html).

**Snapshot (Jul 2026, `master` — v1.1.0 prep):** VM + AOT for shipped examples ✅ · examples web smoke ✅ · self-host spine **3992** / **3995** · **852** builtins · M5 fast + strict ✅ · VM probe ~**20ms**
**Snapshot (Jul 2026, `master` — v1.1.0 prep):** VM + AOT for shipped examples ✅ · examples web smoke ✅ · self-host spine **4031** / **4031** · **852** builtins · M5 fast + strict ✅ · VM probe ~**20ms**

---

Expand All @@ -23,7 +23,7 @@
| **AOT (`phpc build`)** | ✅ For curated subset | Standalone binaries for examples **000–009** and small CGI apps; not arbitrary Composer stacks |
| **JIT (`bin/jit.php`)** | 🚧 Partial | LLVM IR for many constructs; **MCJIT execute** still flaky ([#98](https://github.com/PurHur/php-compiler/issues/98)); EH scripts VM-fallback ([#2114](https://github.com/PurHur/php-compiler/issues/2114)) |
| **Language wave 3** | ✅ Closed batch | **12/12** language + **13/13** stdlib tracker items ([#1380](https://github.com/PurHur/php-compiler/issues/1380)); closures, try/catch, generators (VM), `parent::class`, backed enums (VM), intersection AOT checks |
| **Self-host north star** | ✅ ~90% | M5 fast gate green; spine **3992** / **3995**; vendor prelink **3/3** ([#1492](https://github.com/PurHur/php-compiler/issues/1492)) |
| **Self-host north star** | ✅ ~90% | M5 fast gate green; spine **4031** / **4031**; vendor prelink **3/3** ([#1492](https://github.com/PurHur/php-compiler/issues/1492)) |

### What you can rely on today

Expand All @@ -40,7 +40,7 @@ Counts from `php script/bootstrap-spine-count.php` (literal `require_once` in `c
| Milestone | Status | What it means |
|-----------|--------|----------------|
| **M0–M1** | ✅ | `compiler_minimal` + compile-smoke bundles link and run natively |
| **M2** | ✅ **3992** / **3995** | Full Phase A inventory in spine smoke; native link + lint ✅ |
| **M2** | ✅ **4031** / **4031** | Full Phase A inventory in spine smoke; native link + lint ✅ |
| **M3** | ✅ | HelloWorld strict native ✅; inventory argv `bin/compile.php` ✅ |
| **M4** | ✅ | `make bootstrap-loop-probe` full ladder ✅ (gen-1→gen-2→gen-3 + full-revision) |
| **M5** | ✅ | `make north-star5-verify-fast` (daily); `--strict` pre-merge ✅; vendor **3/3** ✅; gen-0 sidecars refreshed |
Expand Down Expand Up @@ -259,7 +259,7 @@ Full matrices (auto-generated): [`docs/capabilities.md`](docs/capabilities.md) (

**Self-host (experimental, not “stable app” scope)**

See [Current implementation status](#current-implementation-status-june-2026) for the full M0–M5 ladder. Summary: M0–M5 bootstrap gates ✅; spine **3992** / **3995**; M3 strict native + inventory argv ✅; M4 full `bootstrap-loop-probe` ✅; M5 **`north-star5-verify-fast`** (daily) + **`--strict`** pre-merge ✅ ([#1492](https://github.com/PurHur/php-compiler/issues/1492), [#8559](https://github.com/PurHur/php-compiler/issues/8559)). Recent: native spine bundle probe, fast VM execute smoke ([#2201](https://github.com/PurHur/php-compiler/issues/2201)), `GeneratorYieldSourceMarker` spine unit ([#10356](https://github.com/PurHur/php-compiler/pull/10356)).
See [Current implementation status](#current-implementation-status-june-2026) for the full M0–M5 ladder. Summary: M0–M5 bootstrap gates ✅; spine **4031** / **4031**; M3 strict native + inventory argv ✅; M4 full `bootstrap-loop-probe` ✅; M5 **`north-star5-verify-fast`** (daily) + **`--strict`** pre-merge ✅ ([#1492](https://github.com/PurHur/php-compiler/issues/1492), [#8559](https://github.com/PurHur/php-compiler/issues/8559)). Recent: native spine bundle probe, fast VM execute smoke ([#2201](https://github.com/PurHur/php-compiler/issues/2201)), `GeneratorYieldSourceMarker` spine unit ([#10356](https://github.com/PurHur/php-compiler/pull/10356)).

**What we do not target in v1.x**

Expand Down
108 changes: 66 additions & 42 deletions docs/bootstrap-inventory.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ Regenerate: `php script/bootstrap-inventory.php`

| Metric | Count |
|--------|------:|
| PHP files on vm.php path | 4027 |
| Phase A inventory files (M2 ratio SSOT) | 4027 |
| PHP files on vm.php path | 4031 |
| Phase A inventory files (M2 ratio SSOT) | 4031 |
| Phase A ratio-deferred paths | 0 |
| Source constructs flagged (blockers) | 0 |
| Source constructs flagged (warnings) | 10861 |
| Source constructs flagged (warnings) | 10865 |

## Compiler CFG gaps (`lib/Compiler.php`)

Expand Down Expand Up @@ -637,6 +637,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `ext/standard/ChmodJitHelper.php` | 0 | 1 |
| `ext/standard/ChownJitHelper.php` | 0 | 1 |
| `ext/standard/ChunkSplitJitHelper.php` | 0 | 1 |
| `ext/standard/ClassExistsJitHelper.php` | 0 | 1 |
| `ext/standard/CliArgvJitHelper.php` | 0 | 2 |
| `ext/standard/ClockGettimeJitHelper.php` | 0 | 1 |
| `ext/standard/CloneWithJitHelper.php` | 0 | 1 |
Expand Down Expand Up @@ -739,6 +740,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `ext/standard/IniIntrospectionJitHelper.php` | 0 | 1 |
| `ext/standard/IniJitHelper.php` | 0 | 1 |
| `ext/standard/IniParseQuantityJitHelper.php` | 0 | 1 |
| `ext/standard/InterfaceExistsJitHelper.php` | 0 | 1 |
| `ext/standard/IsFiniteJitHelper.php` | 0 | 1 |
| `ext/standard/IsInfiniteJitHelper.php` | 0 | 1 |
| `ext/standard/IsNanJitHelper.php` | 0 | 1 |
Expand Down Expand Up @@ -2998,6 +3000,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `lib/JIT/Builtin/StringCaseCompare.php` | 0 | 3 |
| `lib/JIT/Builtin/StringChmod.php` | 0 | 1 |
| `lib/JIT/Builtin/StringChunkSplit.php` | 0 | 3 |
| `lib/JIT/Builtin/StringClassExists.php` | 0 | 1 |
| `lib/JIT/Builtin/StringClockGettime.php` | 0 | 1 |
| `lib/JIT/Builtin/StringClockGettimeRuntime.php` | 0 | 2 |
| `lib/JIT/Builtin/StringConvertUu.php` | 0 | 3 |
Expand Down Expand Up @@ -3054,6 +3057,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `lib/JIT/Builtin/StringIdate.php` | 0 | 3 |
| `lib/JIT/Builtin/StringImageTypeToExtension.php` | 0 | 3 |
| `lib/JIT/Builtin/StringInfo.php` | 0 | 1 |
| `lib/JIT/Builtin/StringInterfaceExists.php` | 0 | 1 |
| `lib/JIT/Builtin/StringJsonDecode.php` | 0 | 3 |
| `lib/JIT/Builtin/StringJsonDecodeInventoryStubs.php` | 0 | 1 |
| `lib/JIT/Builtin/StringJsonEncode.php` | 0 | 3 |
Expand Down Expand Up @@ -5076,45 +5080,45 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
- new ObjectEntry (line 1450)
- new DomNodeState (line 1455)
- new Variable (line 1460)
- new ObjectEntry (line 1845)
- new DomNodeState (line 1847)
- new DOMException (line 1994)
- new DOMException (line 2020)
- new DOMException (line 2038)
- new DOMException (line 2041)
- new DOMException (line 2049)
- new DOMException (line 2075)
- new DOMException (line 2088)
- new DOMException (line 2243)
- new DOMException (line 2337)
- new DOMException (line 2341)
- new ObjectEntry (line 1934)
- new DomNodeState (line 1936)
- new DOMException (line 2083)
- new DOMException (line 2109)
- new DOMException (line 2127)
- new DOMException (line 2130)
- new DOMException (line 2138)
- new DOMException (line 2164)
- new DOMException (line 2177)
- new DOMException (line 2332)
- new DOMException (line 2426)
- new DOMException (line 2430)
- new DOMException (line 2434)
- new DOMException (line 2492)
- new DOMException (line 2509)
- new DOMException (line 2538)
- new DOMException (line 2579)
- new DOMException (line 2604)
- new DOMException (line 3038)
- new Variable (line 3062)
- new DOMException (line 3252)
- new DOMException (line 3333)
- new DOMException (line 3375)
- new ObjectEntry (line 3452)
- new DomNodeState (line 3456)
- new Variable (line 3463)
- new DOMException (line 3528)
- new DOMException (line 3535)
- new DOMException (line 3542)
- new DOMException (line 3546)
- new DOMException (line 3549)
- new DOMException (line 3558)
- new Variable (line 4206)
- new Variable (line 4219)
- new DOMException (line 4297)
- new DOMException (line 4308)
- new DOMException (line 4374)
- 213 class method(s)
- new DOMException (line 2519)
- new DOMException (line 2523)
- new DOMException (line 2581)
- new DOMException (line 2598)
- new DOMException (line 2627)
- new DOMException (line 2668)
- new DOMException (line 2693)
- new DOMException (line 3167)
- new Variable (line 3191)
- new DOMException (line 3381)
- new DOMException (line 3462)
- new DOMException (line 3504)
- new ObjectEntry (line 3581)
- new DomNodeState (line 3585)
- new Variable (line 3592)
- new DOMException (line 3657)
- new DOMException (line 3664)
- new DOMException (line 3671)
- new DOMException (line 3675)
- new DOMException (line 3678)
- new DOMException (line 3687)
- new Variable (line 4335)
- new Variable (line 4348)
- new DOMException (line 4426)
- new DOMException (line 4437)
- new DOMException (line 4503)
- 217 class method(s)
- 2 closure(s)

### `ext/filter/BuiltinEnums.php`
Expand Down Expand Up @@ -8412,6 +8416,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
**Warnings** (review for bootstrap subset):
- 1 class method(s)

### `ext/standard/ClassExistsJitHelper.php`

**Warnings** (review for bootstrap subset):
- 1 class method(s)

### `ext/standard/CliArgvJitHelper.php`

**Warnings** (review for bootstrap subset):
Expand Down Expand Up @@ -8949,6 +8958,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
**Warnings** (review for bootstrap subset):
- 1 class method(s)

### `ext/standard/InterfaceExistsJitHelper.php`

**Warnings** (review for bootstrap subset):
- 1 class method(s)

### `ext/standard/IsFiniteJitHelper.php`

**Warnings** (review for bootstrap subset):
Expand Down Expand Up @@ -20241,7 +20255,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `ext/xml/VmXml.php`

**Warnings** (review for bootstrap subset):
- 13 class method(s)
- 14 class method(s)

### `ext/xml/xml_get_error_code.php`

Expand Down Expand Up @@ -23729,6 +23743,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
- 7 class method(s)
- 1 closure(s)

### `lib/JIT/Builtin/StringClassExists.php`

**Warnings** (review for bootstrap subset):
- 4 class method(s)

### `lib/JIT/Builtin/StringClockGettime.php`

**Warnings** (review for bootstrap subset):
Expand Down Expand Up @@ -24060,6 +24079,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
**Warnings** (review for bootstrap subset):
- 12 class method(s)

### `lib/JIT/Builtin/StringInterfaceExists.php`

**Warnings** (review for bootstrap subset):
- 4 class method(s)

### `lib/JIT/Builtin/StringJsonDecode.php`

**Warnings** (review for bootstrap subset):
Expand Down
Loading
Loading