On Sun, 2024-08-04 at 19:53 +0200, Ilija Tovilo wrote:
> Hi Claude
> 
> On Fri, Aug 2, 2024 at 9:02 PM Claude Pache <claude.pa...@gmail.com>
> wrote:
> > 
> > I propose the following alternative approach:
> > 
> > * establish a restricted whitelist of global functions for which
> > the performance gain would be noteworthy if there wasn’t any need
> > to look at local scope first;
> > 
> > * for those functions, disallow to define a function of same name
> > in any namespace, e.g.: https://3v4l.org/RKnZt
> > 
> > That way, those functions could be optimised, but the current
> > semantics of namespace lookup would remain unchanged.
> 
> That would be an improvement over the status quo. However, if you
> look
> at the bullet points in my original email, while some of the
> optimizations apply only to some functions (CTE, custom opcodes and
> frameless calls), others apply to all internal, global functions
> (double-lookup, lookup by offset, specialized argument passing).
> Hence, we may only get a fraction of the benefits by restricting the
> optimization to a handful of functions. I also wonder if the impact
> is
> actually bigger, as then there's no workaround for redeclaring the
> function, requiring much bigger refactoring.
> 
> Ilija

Also, overriding any default function is one of the benefits of name
spacing in the first place. If we say, "built-in functions can't be
overridden, then you are basically saying that all built-in functions
are global.

But there is a valid use case for overriding built-ins. You may want to
disable built-in functionality with a stub for unit testing.

There should probably be a per-file way of setting the default either
way without ns lookups.

use global functions
- or -
use local functions
- or -
omit directive to use dynamic NS lookup for BC.

Reply via email to