Re: [Concept] Flip relative function lookup order (global, then local)

From: Date: Fri, 02 Aug 2024 17:19:41 +0000
Subject: Re: [Concept] Flip relative function lookup order (global, then local)
References: 1  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
On Fri, 2024-08-02 at 18:51 +0200, Ilija Tovilo wrote:
> Hi everyone
> 
> As you probably know, a common performance optimization in PHP is to
> prefix global function calls in namespaced code with a \. In
> namespaced code, relative function calls (meaning, not prefixed with
> \, not imported and not containing multiple namespace components)
> will be looked up in the current namespace before falling back to the
> global namespace. Prefixing the function name with \ disambiguates
> the called function by always picking the global function.
> 
> Not knowing exactly which function is called at compile time has a
> couple of downsides to this:
> 
> * It leads to the aforementioned double-lookup.
> * It prevents compile-time-evaluation of pure internal functions.
> * It prevents compiling to specialized  opcodes for specialized
> internal functions (e.g. strlen()).
> * It requires branching for frameless functions [1].
> * It prevents an optimization that looks up internal functions by
> offset rather than by name [2].
> * It prevents compiling to more specialized argument sending opcodes
> because of unknown by-value/by-reference passing.
> 
> All of these are enabled by disambiguating the call. Unfortunately,
> prefixing all calls with \, or adding a use function at the top
> of
> every file is annoying and noisy. We recently got a feature request
> to
> change how functions are looked up [3]. 

I think there should be some way to use globals first at compile time.

I had suggested a per-file directive in a post to this list a while
back. Something like:

namespace foo;
use global functions;

class MyClass {

 // do stuff.

}


Where use global functions would be a special token that the compiler
uses to skip the ns lookup and use dedicated opcodes when available.


Thread (112 messages)

« previous php.internals (#124721) next »