Re: [Initial Feedback] PHP User Modules - An Adaptation of ES6 from JavaScript

From: Date: Thu, 27 Jun 2024 10:08:50 +0000
Subject: Re: [Initial Feedback] PHP User Modules - An Adaptation of ES6 from JavaScript
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-123933@lists.php.net to get a copy of this message
On Thu, Jun 27, 2024, at 09:41, Rob Landers wrote: > On Thu, Jun 27, 2024, at 04:15, Michael Morris wrote: >> Hello all. This is a ramble of an idea that's managed to run around my head for a few >> days now. It isn't fully formed, but I've ran the thought experiment as far as I can on my >> own and want to share it with all of you. >> >> I've mostly been a lurker and I've seen a lot of RFC's come and go. Of those >> not accepted many have been passed over because of background compatibility. And then there is the >> issue that PHP has multiple design flaws that seem impossible to get rid of. Finally, I sense from >> conversations I've read that there are a lot of engine parser optimizations that haven't >> been tried because of the background compatibility problems present. >> >> JavaScript was in this position as well 10 years ago when JavaScript modules were >> introduced with the ES6 syntax. Only recently have these modules finally begun to become first class >> members of node.js. The existing CommonJS require mechanism remains and will remain in Node for the >> foreseeable future, but the ES6 syntax allows an opportunity to sidestep the issue. The most >> significant of these is JavaScript modules run in strict mode, which actually removes features that >> are problematic for the engine or make it difficult to create optimized code. >> >> Something similar could be done in PHP, and that's what the remainder of this letter >> is about, but before I continue I want to make clear my vantage point: I am but a humble user of the >> code, I'm no expert on the underpinnings of the Zend engine. In the text to follow I'm >> going to make wrong calls on some things - maybe multiple things. I'm not married to anything >> here. Further, even if I were a master of the engine and knew where to start, the scope of this is >> too large for any one person to undertake. >> >> So all that said, I'll begin. >> >> PHP User Modules are php files that are brought into the runtime through a new parser that >> is able to generate faster and more concise runtime code by removing support for problematic >> features and imposing a strict mode by default. They focus on PHP as a language and not as a >> template engine. > > FYI, in non-strict mode, this produces a deprecation warning that can be caught and thrown > from: > > (fn(int $x) => print($x))(123.456); // deprecation warning > > but this will work > > (fn(int $x) => print($x))(123.000); // this is fine > > Both of those are errors in strict types, so you might be tempted to do > > fn(int $x) => print($x))((int)$some_var); > > but $some_var might not actually be an integer-like (such as null or a string that becomes > zero). > > Some of us prefer the more strict, non-strict mode as the built-in strict mode is actually ... > uhh, problematic, to say the least, in some business cases. So forcing strict mode is probably a > non-starter. If you want to see what I mean: non-strict: https://3v4l.org/kZ09l strict: https://3v4l.org/5kVSG — Rob

« previous php.internals (#123933) next »