Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:118869 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 6239 invoked from network); 23 Oct 2022 13:44:00 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 23 Oct 2022 13:44:00 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 6FC6B180044 for ; Sun, 23 Oct 2022 06:43:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_PASS, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS197422 91.224.148.0/23 X-Spam-Virus: No X-Envelope-From: Received: from pouzenc.fr (mail.pouzenc.fr [91.224.149.159]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Sun, 23 Oct 2022 06:43:58 -0700 (PDT) Received: from [2a01:e0a:a7b:91e0:229:63dc:3097:79c0] by pouzenc.fr with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1ombGf-000UVj-9y for internals@lists.php.net; Sun, 23 Oct 2022 13:43:57 +0000 Message-ID: <50321070-3682-c238-d8b4-3d0f6832c4bc@pouzenc.fr> Date: Sun, 23 Oct 2022 15:43:54 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.0 To: internals@lists.php.net Content-Language: fr, en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Newcomer, PHP pre-processing, Magic Constants __FILE__ and __LINE__ override with #line like in C From: ludovic@pouzenc.fr (Ludovic Pouzenc) 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