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

Re: [PATCH] declarednull: rename DECLARED to NULL

On Sat, Jan 2, 2021 at 6:38 PM Felipe Contreras
<felipe.contreras@xxxxxxxxx> wrote:
> On Sat, Jan 2, 2021 at 7:18 PM Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
> >
> > if we go all the way back to the original
> > discussion about this, the point was that
> >
> > typeset var
> > print ${var-unset}
> >
> > should output "unset".  Correct?
> Yes, but that's only *one* of the considerations. It's still not
> perfectly clear what "typeset -p var" should output.

Hmm, sorry, I thought that was a solved problem.  Except for some
special cases like "readonly var", I thought it was pretty clear that
"typeset -p var" should output a semantically identical command to
that which declared the variable in the first place.  (Assuming
POSIX_BUILTINS, of course.)

> > unset var <- DEFAULT(off), UNSET(on) <- NULL(off)
> Nope. The value hasn't changed, it still has the "default" value.

"Default" here does not refer to the value (or at least, not to the
value alone).  A different example might be more obvious; if I do

integer var
unset var

then "var" is no longer an integer.  That is the default that has changed.

> I think this is playing ring-around-the-rosy; you are trying to find a
> word that signifies that no value has been assigned, even if the
> variable is "set"

No, that's not it.  I'm trying to find a word that describes the STATE
of the variable, independent of its value.  It happens that the "spec"
that we're importing from posix-ish shells means that this particular
state is always paired with the state of "unset-ness" but regardless
of your arguments of functional equivalence, neither of these states
is an actual value of NULL.

> So It seems your code and my code agree with the behavior of both A
> and B. The only unknown is what A and B mean.
> Agreed?

Yes, although I would not say "unknown".  More like "unnamed".  Also,
your script doesn't observe that "current zsh: B(on)" does not mean
the same thing that "patched zsh: B(on)" means (at least for my patch
and I think for yours).

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