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 **7570** / **7572** (2 deferred: #24115, #27103) · **1555** builtins · M5 fast ✅ / strict 🚧 · M3/M4 emit = blob copy ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) · VM probe ~**20ms**
**Snapshot (Jul 2026, `master` — v1.1.0 prep):** VM + AOT for shipped examples ✅ · examples web smoke ✅ · self-host spine **7588** / **7590** (2 deferred: #24115, #27103) · **1555** builtins · M5 fast ✅ / strict 🚧 · M3/M4 emit = blob copy ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) · 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 | **7410/7412** language + **7410/7412** 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** | 🚧 ~65% | M3/M4 emit paths are blob copies ([#21860](https://github.com/PurHur/php-compiler/issues/21860)); `--strict` red; spine **7570** / **7572** (2 deferred: #24115, #27103); vendor prelink **7410/7412** ([#1492](https://github.com/PurHur/php-compiler/issues/1492)) |
| **Self-host north star** | 🚧 ~65% | M3/M4 emit paths are blob copies ([#21860](https://github.com/PurHur/php-compiler/issues/21860)); `--strict` red; spine **7588** / **7590** (2 deferred: #24115, #27103); vendor prelink **7410/7412** ([#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** | ✅ **7570** / **7572** (2 deferred: #24115, #27103) | Full Phase A inventory in spine smoke; native link + lint ✅ |
| **M2** | ✅ **7588** / **7590** (2 deferred: #24115, #27103) | Full Phase A inventory in spine smoke; native link + lint ✅ |
| **M3** | 🚧 | HelloWorld probe output is a prelinked blob **COPY**, not a native emit ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) |
| **M4** | 🚧 | ladder runs, but gen-1→gen-2 is a sidecar **COPY** ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) — gen-0/gen-2/gen-3 being byte-identical follows from that, and is not fixpoint evidence |
| **M5** | 🚧 | `make north-star5-verify-fast` (daily) ✅; vendor **7410/7412** ✅; gen-0 sidecars refreshed; **`--strict` red at step 4a2** ([#21417](https://github.com/PurHur/php-compiler/issues/21417)) |
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-july-2026) for the full M0–M5 ladder. Summary: M0–M5 bootstrap gates ✅; spine **7570** / **7572** (2 deferred: #24115, #27103); M3 strict native + inventory argv ✅; M4 full `bootstrap-loop-probe` ✅; M5 **`north-star5-verify-fast`** (daily) ✅ — **`--strict` red at step 4a2** ([#21417](https://github.com/PurHur/php-compiler/issues/21417)) ([#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-july-2026) for the full M0–M5 ladder. Summary: M0–M5 bootstrap gates ✅; spine **7588** / **7590** (2 deferred: #24115, #27103); M3 strict native + inventory argv ✅; M4 full `bootstrap-loop-probe` ✅; M5 **`north-star5-verify-fast`** (daily) ✅ — **`--strict` red at step 4a2** ([#21417](https://github.com/PurHur/php-compiler/issues/21417)) ([#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
125 changes: 63 additions & 62 deletions docs/bootstrap-inventory.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Regenerate: `php script/bootstrap-inventory.php`
| Phase A inventory files (M2 ratio SSOT) | 7590 |
| Phase A ratio-deferred paths | 0 |
| Source constructs flagged (blockers) | 0 |
| Source constructs flagged (warnings) | 24260 |
| Source constructs flagged (warnings) | 24261 |

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

Expand Down Expand Up @@ -1419,7 +1419,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `ext/ldap/JitLdapDn.php` | 0 | 3 |
| `ext/ldap/JitLdapEscape.php` | 0 | 2 |
| `ext/ldap/JitLdapLink.php` | 0 | 12 |
| `ext/ldap/JitLdapResult.php` | 0 | 2 |
| `ext/ldap/JitLdapResult.php` | 0 | 3 |
| `ext/ldap/LdapConstants.php` | 0 | 1 |
| `ext/ldap/LdapDnJitHelper.php` | 0 | 3 |
| `ext/ldap/LdapEscapeJitHelper.php` | 0 | 1 |
Expand Down Expand Up @@ -18618,21 +18618,22 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
- new ArgumentCountError (line 29)
- new ArgumentCountError (line 92)
- new ArgumentCountError (line 146)
- new ArgumentCountError (line 204)
- new ArgumentCountError (line 232)
- new ArgumentCountError (line 265)
- new ArgumentCountError (line 293)
- new ArgumentCountError (line 319)
- new ArgumentCountError (line 345)
- new ArgumentCountError (line 371)
- new ArgumentCountError (line 404)
- new ArgumentCountError (line 207)
- new ArgumentCountError (line 235)
- new ArgumentCountError (line 268)
- new ArgumentCountError (line 296)
- new ArgumentCountError (line 322)
- new ArgumentCountError (line 348)
- new ArgumentCountError (line 374)
- new ArgumentCountError (line 407)
- 25 class method(s)

### `ext/ldap/JitLdapResult.php`

**Warnings** (review for bootstrap subset):
- new ArgumentCountError (line 25)
- 5 class method(s)
- new ArgumentCountError (line 27)
- new ArgumentCountError (line 58)
- 11 class method(s)

### `ext/ldap/LdapConstants.php`

Expand Down Expand Up @@ -18665,8 +18666,8 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `ext/ldap/LdapResultJitHelper.php`

**Warnings** (review for bootstrap subset):
- new Variable (line 22)
- 2 class method(s)
- new Variable (line 27)
- 5 class method(s)

### `ext/ldap/LdapSerializeDeny.php`

Expand Down Expand Up @@ -18789,13 +18790,13 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `ext/ldap/VmLdapResult.php`

**Warnings** (review for bootstrap subset):
- new ClassEntry (line 34)
- new ClassEntry (line 39)
- new ObjectEntry (line 48)
- new Variable (line 55)
- new ObjectEntry (line 64)
- new Variable (line 72)
- 11 class method(s)
- new ClassEntry (line 40)
- new ClassEntry (line 45)
- new ObjectEntry (line 54)
- new Variable (line 62)
- new ObjectEntry (line 116)
- new Variable (line 124)
- 15 class method(s)

### `ext/ldap/ldap_connect.php`

Expand Down Expand Up @@ -25458,7 +25459,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `ext/soap/SoapConstants.php`

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

### `ext/soap/SoapExtensionPolicy.php`

Expand Down Expand Up @@ -25583,46 +25584,46 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
- new DOMDocument (line 1926)
- new SoapFault (line 1928)
- new DOMXPath (line 1930)
- new Variable (line 2898)
- new DOMDocument (line 2924)
- new SoapFault (line 2926)
- new DOMXPath (line 2928)
- new SoapFault (line 2973)
- new SoapTypemapFromXml (line 3185)
- new SoapMappedObject (line 3212)
- new Variable (line 3290)
- new Variable (line 3298)
- new ObjectEntry (line 3319)
- new Variable (line 3325)
- new HashTable (line 3331)
- new Variable (line 3341)
- new stdClass (line 3355)
- new ObjectEntry (line 3363)
- new Variable (line 3370)
- new Variable (line 3378)
- new HashTable (line 3405)
- new ObjectEntry (line 3423)
- new ArgumentCountError (line 3713)
- new Variable (line 3740)
- new HashTable (line 3755)
- new Variable (line 3763)
- new Variable (line 3771)
- new ArgumentCountError (line 3809)
- new ArgumentCountError (line 3814)
- new ArgumentCountError (line 3873)
- new ArgumentCountError (line 3901)
- new HashTable (line 3942)
- new Variable (line 3945)
- new HashTable (line 3967)
- new Variable (line 3970)
- new ArgumentCountError (line 4070)
- new HashTable (line 4100)
- new HashTable (line 4103)
- new Variable (line 4106)
- new Variable (line 4125)
- new ArgumentCountError (line 4144)
- new ArgumentCountError (line 4174)
- 102 class method(s)
- new Variable (line 3120)
- new DOMDocument (line 3146)
- new SoapFault (line 3148)
- new DOMXPath (line 3150)
- new SoapFault (line 3195)
- new SoapTypemapFromXml (line 3407)
- new SoapMappedObject (line 3434)
- new Variable (line 3512)
- new Variable (line 3520)
- new ObjectEntry (line 3541)
- new Variable (line 3547)
- new HashTable (line 3553)
- new Variable (line 3563)
- new stdClass (line 3577)
- new ObjectEntry (line 3585)
- new Variable (line 3592)
- new Variable (line 3600)
- new HashTable (line 3627)
- new ObjectEntry (line 3645)
- new ArgumentCountError (line 3945)
- new Variable (line 3972)
- new HashTable (line 3987)
- new Variable (line 3995)
- new Variable (line 4003)
- new ArgumentCountError (line 4041)
- new ArgumentCountError (line 4046)
- new ArgumentCountError (line 4105)
- new ArgumentCountError (line 4133)
- new HashTable (line 4174)
- new Variable (line 4177)
- new HashTable (line 4199)
- new Variable (line 4202)
- new ArgumentCountError (line 4302)
- new HashTable (line 4332)
- new HashTable (line 4335)
- new Variable (line 4338)
- new Variable (line 4357)
- new ArgumentCountError (line 4376)
- new ArgumentCountError (line 4406)
- 108 class method(s)

### `ext/soap/VmSoapEncoding.php`

Expand Down
22 changes: 20 additions & 2 deletions docs/bootstrap-profile.json
Original file line number Diff line number Diff line change
Expand Up @@ -1159,6 +1159,9 @@
"ext/intl/JitGraphemeStrSplit.php",
"ext/intl/JitIntlDateFormatterCreate.php",
"ext/intl/JitIntlDateFormatterFormat.php",
"ext/intl/JitLocaleFilterMatches.php",
"ext/intl/JitLocaleGetDisplayName.php",
"ext/intl/JitLocaleLookup.php",
"ext/intl/JitLocaleParser.php",
"ext/intl/JitMessageFormatterConstruct.php",
"ext/intl/JitMessageFormatterFormat.php",
Expand All @@ -1173,12 +1176,14 @@
"ext/intl/LocaleComposeLocale.php",
"ext/intl/LocaleDefaultJitHelper.php",
"ext/intl/LocaleFilterMatches.php",
"ext/intl/LocaleFilterMatchesJitHelper.php",
"ext/intl/LocaleGetAllVariants.php",
"ext/intl/LocaleGetDefault.php",
"ext/intl/LocaleGetDisplayKeyword.php",
"ext/intl/LocaleGetDisplayKeywordValue.php",
"ext/intl/LocaleGetDisplayLanguage.php",
"ext/intl/LocaleGetDisplayName.php",
"ext/intl/LocaleGetDisplayNameJitHelper.php",
"ext/intl/LocaleGetDisplayRegion.php",
"ext/intl/LocaleGetDisplayScript.php",
"ext/intl/LocaleGetDisplayVariant.php",
Expand All @@ -1188,6 +1193,7 @@
"ext/intl/LocaleGetScript.php",
"ext/intl/LocaleIsRightToLeft.php",
"ext/intl/LocaleLookup.php",
"ext/intl/LocaleLookupJitHelper.php",
"ext/intl/LocaleMinimizeSubtags.php",
"ext/intl/LocaleParseLocale.php",
"ext/intl/LocaleParserJitHelper.php",
Expand Down Expand Up @@ -1419,11 +1425,13 @@
"ext/ldap/JitLdapDn.php",
"ext/ldap/JitLdapEscape.php",
"ext/ldap/JitLdapLink.php",
"ext/ldap/JitLdapResult.php",
"ext/ldap/LdapConstants.php",
"ext/ldap/LdapDnJitHelper.php",
"ext/ldap/LdapEscapeJitHelper.php",
"ext/ldap/LdapExtensionPolicy.php",
"ext/ldap/LdapLinkJitHelper.php",
"ext/ldap/LdapResultJitHelper.php",
"ext/ldap/LdapSerializeDeny.php",
"ext/ldap/Module.php",
"ext/ldap/VmLdapArg.php",
Expand Down Expand Up @@ -3277,6 +3285,7 @@
"ext/standard/JitStreamGetMetaData.php",
"ext/standard/JitStreamGetTransports.php",
"ext/standard/JitStreamGetWrappers.php",
"ext/standard/JitStreamIncludeOpen.php",
"ext/standard/JitStreamIoKernel.php",
"ext/standard/JitStreamIsLocal.php",
"ext/standard/JitStreamIsatty.php",
Expand Down Expand Up @@ -3518,6 +3527,7 @@
"ext/standard/StreamContextJitHelper.php",
"ext/standard/StreamErrorBuiltin.php",
"ext/standard/StreamFilterJitHelper.php",
"ext/standard/StreamIncludeOpenJitHelper.php",
"ext/standard/StreamIoJitHelper.php",
"ext/standard/StreamLibcHandleJitHelper.php",
"ext/standard/StreamLibcThinAbi.php",
Expand Down Expand Up @@ -3882,6 +3892,7 @@
"ext/standard/VmStreamFilterChain.php",
"ext/standard/VmStreamFilters.php",
"ext/standard/VmStreamFstat.php",
"ext/standard/VmStreamIncludeOpenPolicy.php",
"ext/standard/VmStreamMeta.php",
"ext/standard/VmStreamNotification.php",
"ext/standard/VmStreamOpenFailure.php",
Expand Down Expand Up @@ -5332,6 +5343,7 @@
"lib/Ast/AbstractEnumMarker.php",
"lib/Ast/AssertExprMessageRewriter.php",
"lib/Ast/AsymmetricVisibilityRewriter.php",
"lib/Ast/BreakContinueOperandCompileCheck.php",
"lib/Ast/CatchIntersectionAttacher.php",
"lib/Ast/CatchIntersectionSupport.php",
"lib/Ast/CloneWithDesugar.php",
Expand Down Expand Up @@ -5363,6 +5375,7 @@
"lib/Ast/SealedClassPreprocessor.php",
"lib/Ast/StaticClassAnnotator.php",
"lib/Ast/StaticClassPreprocessor.php",
"lib/Ast/StrictTypesDeclareCompileCheck.php",
"lib/Ast/TryCatchElseAttacher.php",
"lib/Ast/TryCatchElseSupport.php",
"lib/Ast/TypedFunctionStaticRewriter.php",
Expand Down Expand Up @@ -5405,6 +5418,7 @@
"lib/Compiler/ClassConstDuplicateCheck.php",
"lib/Compiler/ClassConstValueFold.php",
"lib/Compiler/ClassConstVisibilityInheritCheck.php",
"lib/Compiler/ClosureUseDuplicateCompileCheck.php",
"lib/Compiler/CompileFatal.php",
"lib/Compiler/CompileTimeEnumCase.php",
"lib/Compiler/CompileTimeNew.php",
Expand Down Expand Up @@ -5740,6 +5754,9 @@
"lib/JIT/Builtin/LibxmlUseInternalErrorsRuntime.php",
"lib/JIT/Builtin/ListSpreadTailRuntime.php",
"lib/JIT/Builtin/ListUnpackRuntime.php",
"lib/JIT/Builtin/LocaleFilterMatchesRuntime.php",
"lib/JIT/Builtin/LocaleGetDisplayNameRuntime.php",
"lib/JIT/Builtin/LocaleLookupRuntime.php",
"lib/JIT/Builtin/LocaleParser.php",
"lib/JIT/Builtin/LocaleStartupRuntime.php",
"lib/JIT/Builtin/MathAbs.php",
Expand Down Expand Up @@ -5970,6 +5987,7 @@
"lib/JIT/Builtin/StreamFstatRuntime.php",
"lib/JIT/Builtin/StreamGlobals.php",
"lib/JIT/Builtin/StreamGlobalsJit.php",
"lib/JIT/Builtin/StreamIncludeOpen.php",
"lib/JIT/Builtin/StreamIo.php",
"lib/JIT/Builtin/StreamIoJit.php",
"lib/JIT/Builtin/StreamIoRuntime.php",
Expand Down Expand Up @@ -7806,9 +7824,9 @@
"test/bootstrap-aot/lib_opcode/main.php"
],
"totals": {
"inventory_files": 7572,
"inventory_files": 7590,
"excluded": 0,
"eligible": 7572,
"eligible": 7590,
"aot_lint_targets": 113,
"aot_link_targets": 100,
"aot_link_lib_targets": 1
Expand Down
2 changes: 1 addition & 1 deletion docs/bootstrap-selfhost.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**Gen-0 without Zend:** `BOOTSTRAP_M5_NO_ZEND=1 make bootstrap-selfhost-link` installs `prelinked/bootstrap-gen0/bin-compile-aot` and links `compiler_minimal` without `php bin/compile.php` ([#3053](https://github.com/PurHur/php-compiler/issues/3053)). **M5 lib spine compile:** `BOOTSTRAP_NO_ZEND_FALLBACK=1 make bootstrap-selfhost-lib-spine-smoke` (default in link script) refuses host `php bin/compile.php` on the spine emit path ([#8716](https://github.com/PurHur/php-compiler/issues/8716)). **Contributor workflow:** [bootstrap-dev-workflow.md](bootstrap-dev-workflow.md) (tiered gen-1+ path, spine checklist, CI).

**Project north star:** The **compiler fully compiles itself** — native AOT from `lib/` (no `vendor/` at cold boot), then compiles PHP and rebuilds the next compiler revision without Zend. **M2 spine:** **7570** / **7572** (2 deferred: #24115, #27103) Phase A inventory (`php script/bootstrap-spine-count.php`; `check-selfhost-spine-coverage-sync.php`). **M5 daily gate:** `make north-star5-verify-fast` (~1–2 min) ✅; **`--strict`** (~1h) pre-merge only. Committed `prelinked/bootstrap-gen0/` sidecars + vendor **7410/7412** cold boot. **Hot loop:** VM driver execute probe ~**20ms**; full spine relink only with `BOOTSTRAP_VM_DRIVER_EXECUTE_PROBE_FULL_LINK=1` ([#2201](https://github.com/PurHur/php-compiler/issues/2201)). **Living tracker:** [#1492](https://github.com/PurHur/php-compiler/issues/1492) (was [#1056](https://github.com/PurHur/php-compiler/issues/1056)) · **re-root doc:** [self-host-target.md](self-host-target.md) · **generation ladder:** [bootstrap-generations.md](bootstrap-generations.md) · **M5 fast path:** [bootstrap-m5-fast-path.md](bootstrap-m5-fast-path.md) · public status: [development-status § North star](https://purhur.github.io/php-compiler/development-status.html#north-star-self-host). Parent tracking: [#78](https://github.com/PurHur/php-compiler/issues/78) (roadmap), [#212](https://github.com/PurHur/php-compiler/issues/212) (closed umbrella).
**Project north star:** The **compiler fully compiles itself** — native AOT from `lib/` (no `vendor/` at cold boot), then compiles PHP and rebuilds the next compiler revision without Zend. **M2 spine:** **7588** / **7590** (2 deferred: #24115, #27103) Phase A inventory (`php script/bootstrap-spine-count.php`; `check-selfhost-spine-coverage-sync.php`). **M5 daily gate:** `make north-star5-verify-fast` (~1–2 min) ✅; **`--strict`** (~1h) pre-merge only. Committed `prelinked/bootstrap-gen0/` sidecars + vendor **7410/7412** cold boot. **Hot loop:** VM driver execute probe ~**20ms**; full spine relink only with `BOOTSTRAP_VM_DRIVER_EXECUTE_PROBE_FULL_LINK=1` ([#2201](https://github.com/PurHur/php-compiler/issues/2201)). **Living tracker:** [#1492](https://github.com/PurHur/php-compiler/issues/1492) (was [#1056](https://github.com/PurHur/php-compiler/issues/1056)) · **re-root doc:** [self-host-target.md](self-host-target.md) · **generation ladder:** [bootstrap-generations.md](bootstrap-generations.md) · **M5 fast path:** [bootstrap-m5-fast-path.md](bootstrap-m5-fast-path.md) · public status: [development-status § North star](https://purhur.github.io/php-compiler/development-status.html#north-star-self-host). Parent tracking: [#78](https://github.com/PurHur/php-compiler/issues/78) (roadmap), [#212](https://github.com/PurHur/php-compiler/issues/212) (closed umbrella).

## Current gates

Expand Down
Loading
Loading