> On 23 Oct 2022, at 20:43, Ludovic Pouzenc <ludo...@pouzenc.fr> wrote: > > Hi, > > I'm a newcomer here. I came from https://wiki.php.net/rfc/howto. > > *TL;DR:* I want to know if a proposal of a #line parsing to alter __FILE__ > and __LINE__ in PHP like it exists in C could be a good idea. > > I've searched about __LINE__ and __FILE__ in mailing archives and wiki, I > don't really find things matching. I hope it's not because "__" are stripped > before search. "Magic constants" didn't help neither. Let me know if I am > rethinking and old thing already imagined here in the past. > > *Background / use case:* I think at first about webservices, maybe the useful > also with browser/human-facing use cases. > > With PHP, it's hard to get high responsiveness under load if user code start > by loading a composer's autoload.php, then (lazy) loads a whole framework > with 10+ dependencies, then execute 1 SQL request, 1 json_encode() then > output and exit. Even with "Slim" framework that should be minimal, using > only the route feature, I see "strace" counting 200+ file-related syscalls > per request with recent linux/debian/apache/php-fpm. > > It's not so hard to get it better with other langages : when they are > compiled, or when framework loading happens at server start and to at each > request. > > Web projects have more and more a "compilation" phase for minimising JS, for > proprocessing scss to css, it is possible to hook it some PHP processing too. > > In my university, I started using a purpose-written PHP Preprocessor to > minimize runtime dependency loading. It only understands #include like in C. > From a src/mywebservice/v1/some-endpoint.php it will generate and > build/mywebservice/v1/some-endpoint.php with all #include > "some/path/somedep.php" replaced by the file's contents. > > So the generated some-endpoint.php have no run-time dependency at all: no > autoload, no include(), no require(). I think it evens maximize the gains > with APC caching. > > The preprocessor also generate things like #line 2 "some/path/somedep.php" > where an #include was encountered, then a thing like #line 47 > "src/mywebservice/v1/some-endpoint.php" right after the end of the inclusion. > In C, a great concrete example of #line importance is working with a > flex/bison parser generator. > > If PHP parser interpret #line as in C, __FILE__ and __LINE__ Magic Constants > will be changed to source file and line, instead of generated file and line. > It could greatly improve development write-then-rerun cycle. (missing ";" at > line NN , other PHP Errors, Exception details/traces) > > I hope it could unlock many use cases where "big" PHP frameworks get really > hard time to try to compete with other languages equivalents. > > Do you think it's an idea that is suitable to discuss, improve and submit as > an RFC ? > > Regards, > > -- > > Ludovic Pouzenc > www.pouzenc.fr > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php >
Hi Ludovic, I can’t comment much on the actual change in the parser you’re asking about, but it sounds to me like preloading (https://www.php.net/manual/en/opcache.preloading.php <https://www.php.net/manual/en/opcache.preloading.php>, introduced via https://wiki.php.net/rfc/preload <https://wiki.php.net/rfc/preload>) might be a workable solution that’s already available? Cheers Stephen