Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: zsh 5.0.2-test-1 is available

On Fri, 08 Nov 2013 18:11:43 -0800
Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
> On Nov 8,  4:11pm, Peter Stephenson wrote:
> }
> } It seems to me it's equally not an error to mark zstat as a builtin from
> } zsh/stat if it's already loaded as a builtin from zsh/stat.  It would
> } only be an error if there's a conflict.
> } 
> } That's how "autoload" works, after all: it can't check for a conflict
> } (without major faff) but it does check if a function's already loaded.
> I'm confused; these statements seem contradictory, so I must be missing
> something.  If we can't check for a conflict, how can we suppress the
> error message?  I.e., how do we know that zstat is already loaded as a
> builtin from the same module we're now loading?

For functions, autoload (the builtin of that name) works this way,
suppressing an error message if a functiona already exists, but it can't
check for a conflict because it would have to scan the path, load the
file it found, and check that the loaded file compared the same as the
already loaded file.  This is as much work as deleting the file and
reloading it when "autoload" is encountered again.  So it silently
assumes if a function is loaded that it's the function you wanted.  I
was using this case as the paradigm of how an autoload of any sort
works, to point out that, when whatever-it-is is already loaded,
generating an error on a new autoload isn't necessarily the right thing to do.

For autoloads from modules, which may be builtins, conditions, math
functions or parameters, we can actually do a bit better, with a little
more work but nothing like to the same extent (no additional loading is
required).  Suppose we load builtin bar from zsh/foo at some point,
doesn't matter how, then run "zmodload -a bar zsh/foo".  We find that a
builtin bar exists.  We can then check that zsh/foo is already loaded,
and is already providing builtin bar.  It seems to me, based on the
argument from functions, that it would be entirely natural just to
ignore the zmodload -a as redundant rather than report it as an error;
and, furthermore, given that you can check by this means the effect really
*is* redundant rather than a conflict, it seems to me there is no
harmful side effect of any sort.  (Obviously, contradictory indications
are invited.)

I hope that's clear now.

I started looking at this on Friday but I need to be careful which
builtins flying around are which, so will get back to it at some point.


Messages sorted by: Reverse Date, Date, Thread, Author