Re: [Pre-RFC] Pure-code source files via .phpc extension

From: Date: Thu, 28 May 2026 18:08:21 +0000
Subject: Re: [Pre-RFC] Pure-code source files via .phpc extension
References: 1 2 3 4 5  Groups: php.internals 
Request: Send a blank email to internals+get-131041@lists.php.net to get a copy of this message
> Am 28.05.2026 um 19:14 schrieb mjec <php@mjec.net>: > > I'm not a voter, but I have thoughts. > > On Thu, 2026-05-28 at 11:35 -04:00, Hendrik Mennen <hmennen90@gmail.com > <mailto:hmennen90@gmail.com>> wrote: >> > 1. Extension based parsing isn't a popular idea. The first few >> > responses to this have echoed this, but there's a certain power in >> > allowing the parser to not care about the extension. >> >> Fair, and I have heard this from both Ben and Alex earlier in the thread. My pushback there >> has been that the engine already has the filename available at zend_compile_file and at >> include/require resolution, so teaching it to check the extension is additive rather than >> architecturally violating. > > It's not purely additive. It's taking a thing that currently has no semantics > (filename) and giving it semantics. Without this change, users are able to choose the semantics of > the filename by choosing how to invoke the interpreter. After this change, that is no longer > guaranteed to be the user's choice. > >> That said, as a complementary mechanism for explicit override or for stdin/eval cases where >> no filename exists, a require_pure or require_module-style call is genuinely useful. I floated this >> in my reply to Alex as part of a synthesis: extension as primary signal, CLI -p flag for stdin >> (Ben's suggestion), require_pure-family for explicit override (your and Alex's >> suggestion). The autoloader question gets simpler in that synthesis because the autoloader can >> dispatch on extension by default. > > Even ignoring the include issue, this is more evidence to me > that the trigger for this mechanism should not live in the filename. Let users choose an invocation > path (SAPI configuration) based on filename if they want, but do not make it a language feature. > >> > 4. PHP has several braceless syntax control structure commands - Would >> > these stay around or should they too go away since they aren't >> > really needed in a code first file. > ... >> Two reasonable positions: > ... >> (b) Disallow it. The new file format has the freedom to be stricter, and the alternative >> syntax serves no purpose without templating. > > This would be a big change from the original proposal, which was "pars[ing] starting in > ST_IN_SCRIPTING". This is not just talking about skipping > <?php, you're talking about defining new syntax rules. As > you discuss, this is an enormous can of worms, and I wouldn't want it to be tacked onto > something that has a different primary purpose. To be honest I would not consider this a reasonable > position on this RFC. > >> The accidental-echo / headers-already-sent issue is the real practical win. That bug class >> disappears entirely in pure-code files. I would list this as the second motivation in the RFC after >> the conceptual one. > > I don't think of this issue as big enough to require a language feature. You can already > check for this condition with a one-liner without any additional tooling: > > php -r 'echo > empty(array_filter(token_get_all(file_get_contents("/path/to/file.php")), fn($t) => > $t[0] === T_INLINE_HTML)) ? "OK\n" : "Contains non-PHP!";' > > And finally, Hendrik while I appreciate your detailed replies, they are clearly LLM-patterned, > and that makes me disinclined to read them. I understand if you want help crafting the words you > use, but I just don't really believe you would have said anything like "[t]his is the most > important point you raised and I want to be careful with it" (for example) if that hadn't > come from an LLM. That means you're communicating its judgement, not your own. I do not want to > start a discussion on this topic, merely to express my view. > > mjec > Hi mjec, Thanks for your mention about LLM usage - yes I use LLM in my daily work but I’m also a developer at senior level with 10 years of experience - much less than most others :-) I’m fairly new to PHP Core / Extension development - that’s right. I don’t trust LLM output blindly. Because of your point „4. PHP has several braceless syntax control structure commands Yeah - this was out of scope for this RFC but I wanted to address it. - The core of my intention is clear the option to get rid of <?php and ?> Hendrik

« previous php.internals (#131041) next »