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

Errors on module feature [auto]loading (Re: zsh 5.0.2-test-1 is available)

[> workers]

On Nov 9, 10:32pm, Peter Stephenson wrote:
} 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.

And conversely we can tell that a builtin bar already exists that is not
provided by zsh/foo ?  This is the part that I thought for some reason
was difficult.

Where the analogy with autoloaded functions breaks down is that autoload
for functions cannot be told which file the function must come from.  It
searches $fpath and takes the first one it finds.  The autoload builtin
makes the assumption (rightly or wrongly) that $fpath is stable and that
if a function has already been loaded, it is the same one that would be
found if $fpath were searched again.

Loading of modules *themselves* with "zmodload zsh/foo" can make a similar
assumption about $module_path so the analogy holds there.

Explicit builtin autoloads with "zmodload -a zsh/foo bar" have no basis
for making that same assumption.  We've provided a way to say "bar must
come from zsh/foo, even if zsh/bar would be found first by a $module_path
search".  Therefore, if we *can't* guarantee that bar came from zsh/foo,
we should not suppress the error message.

} 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.

I'm OK with this given the precondition.  Do all the rules about warning
on circular dependency, etc., apply?  If I try to explicitly autoload
from zsh/foo a feature that would implicitly be provided by zsh/bar,
when if ever would an error occur?

Aside:  Should we update the manual to say that the right way to test for
module existence is "zmodload -F module" (with no feature arguments)?  This
checks that the module could be loaded without enabling anything, whereas
"zmodload [-i] module" enables all the default features.

Barton E. Schaefer

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