On 08/08/2016 18:03, Levi Morrison wrote:
    If not, I don't see why we ever need to be able to autoload global
    functions. "You want autoloading? Put it in a namespace." Like I
    say, that leaves the very small edge case of a single namespace
    spanning multiple files, and an autoloader implementation able to
    include one of them when a function is called from another.


I'm not sure why you would think a single namespace spanning multiple
files is a "very small edge case". I disagree. Here are some libraries I
am aware of *off the top of my head* that use functions the same
namespace across multiple files:

  * https://github.com/nikic/iter
  * https://github.com/lstrojny/functional-php

As well as several of my personal projects. I do not think this is a
"very small edge case."

The "iter" example looks a long way from being autoloadable whatever we supported, but the example of one-function-per-file is definitely relevant, so I stand corrected.

After a bit of clicking, I even managed to find a line which would fail to autoload under the proposed limitation:

https://github.com/lstrojny/functional-php/blob/master/src/Functional/CompareObjectHashOn.php

> return compare_on($comparison, $keyFunction);

Although interestingly, at the top of the file there is a (technically unnecessary) "use function Functional\compose;" If there was a "use function Functional\compare_on;" as well, we'd be fine. (The function name would then become qualified at compile time and trigger autoloading at run time.)


On 08/08/2016 18:06, Rasmus Schultz wrote:
> Unless there's a demonstrated, critical performance issue with
> auto-loading of global functions, please, let's not cripple this feature
> with inconsistencies from the get-go!

Sure, we could try to measure it, but remember that it's not just the engine code that has the extra cost, it will actually call a userland function every time you use a global function from inside a namespace if you don't add a leading "\". That userland function will probably do a bunch of string comparisons before deciding it's not interested, and may even try to stat a file or two. Those are really expensive operations, so I think it's a long way from "micro-optimisation".

Unfortunately, function name resolution has this quirk that class name resolution doesn't, so something's got to give.

Regards,
--
Rowan Collins
[IMSoP]

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to