Re: function autoloading v4 RFC

From: Date: Tue, 20 Aug 2024 21:53:48 +0000
Subject: Re: function autoloading v4 RFC
References: 1 2 3 4 5 6 7  Groups: php.internals 
Request: Send a blank email to internals+get-125075@lists.php.net to get a copy of this message
On Tue, Aug 20, 2024, at 18:07, Rob Landers wrote: > On Tue, Aug 20, 2024, at 08:50, Rowan Tommins [IMSoP] wrote: >> >> >> On 20 August 2024 00:21:22 BST, Rob Landers <rob@bottled.codes> wrote: >> > >> >I assume you are worried about something like this passing test? >> > >> >--TEST-- >> >show called only once >> >--FILE-- >> ><?php >> > >> >namespace test; >> > >> >spl_autoload_register(function($name) { >> > echo "name=$name\n"; >> >}, true, false, SPL_AUTOLOAD_FUNCTION); >> > >> >echo strlen('foo'); >> >echo strlen('bar'); >> >echo strlen('baz'); >> >?> >> >--EXPECT-- >> >name=test\strlen >> >333 >> > >> >In my RFC, I mention it is called exactly once. >> >> >> I haven't looked at the PR, only the RFC, and I did not see this very important detail >> explained anywhere. The only thing I can see is this rather ambiguous sentence: >> >> > The function autoloader will not be called again. >> >> That could mean not called again for the current call (compared with proposals that call it >> a second time with the unequalled name); it could mean not called again for the current line of code >> (based on the current caching behaviour); or never called again for that combination of namespace >> and name; or possibly, never called again for that combination of namespace, name, and callback >> function. >> >> That's not a small detail of the implementation, it's a really fundamental >> difference from previous proposals. >> >> So I would like to repeat my first response to your RFC: that it should sound more time >> explaining your approach to the multiple lookup problem. >> >> Regards, >> Rowan Tommins >> [IMSoP] >> > > Thanks Rowan, > > That's a fair critique. > > I expect some of the wording will be more clear once I write out the documentation -- even if > it isn't used directly, I tend to write out documentation to force myself to reconcile the code > with the plan, find logic bugs, perform larger scale tests, and create tests to verify assertions in > the documentation. From there, I'll update the plan or code to get everything to match and > spend some time on clarity. It's the hardest part, IMHO, as it requires diligently ensuring > everything is correct. In other words, writing the documentation makes it feel like a "real > thing" and it triggers what small amount of perfectionism I have. > > — Rob I have an experimental library that I use for testing these kinds of things. There are aspects of it that I could work with to make use of function autoloading. Thus, I did so and benchmarked the performance of unit tests. The unit testing library makes a ton of "unqualified function calls". I spent some time working on two autoloaders: 1. A naive autoloader: parses out the file to load, checks if it exists, and then requires the file. 2. An optimized autoloader: only cares about the namespace it has registered. All others are an instant return. In the "vanilla" case, I was mostly concerned with variation. I wanted a statistically significant result, so once I got my system into a stable state and I was no longer seeing any variance, I started benchmarking. For the naive autoloader, I saw a performance degradation of about 6% and lots of variability. This is probably due to the "file_exists" check being done every time an unqualified name was called. However, for the optimized autoloader, I ended up with less variability (🤔) than the vanilla approach and absolutely no measurable performance degradation. Now, time to try this on a larger scale... WordPress. It's pretty much the only large codebase I know of that makes use of tons of functions. — Rob

« previous php.internals (#125075) next »