zsh-workers
 help / color / mirror / code / Atom feed
From: Oliver Kiddle <okiddle@yahoo.co.uk>
To: zsh-workers@zsh.org
Subject: Re: Proof of concept: "static" parameter scope
Date: Mon, 28 Sep 2015 19:04:59 +0200	[thread overview]
Message-ID: <21593.1443459899@thecus.kiddle.eu> (raw)
In-Reply-To: <150924192305.ZM2680@torch.brasslantern.com>

Bart wrote:
> 
> The patch below creates a module "zsh/param/static" which supports a
> single builtin command "static".  The included doc section describes
> "static" in detail, but briefly, it works like the "local" builtin
> except that variables so declared are not dynamically visible to any
> called functions.

Very nice.

> "Called functions" includes recursive calls to the function itself, so
> this doesn't work like C "static".  Therefore I'm in the market for a
> better name.

The trouble with "static" is that people with a C or C++ background will
expect something different. It might be better to find a new word in the
thesaurus that doesn't carry the baggage of another common meaning. Note
that, as you mention in the documentation patch, ksh93 has a typeset
-S option which does do C like static variables. Aside from confusing
users, the Zsh use of the term "parameter" seems even more tenuous when
applied to lexically scoped variables because they can't be used as
named parameters. So instead of "static" I would simply suggest "var".

This name does take the emphasis away from the scope but that could be a
good thing in terms of encouraging it's use. It is actually "local" with its
obscure dynamic scoping that really needs the more elaborate explanation
in the documentation. And "typeset" isn't a good name because
typesetting evokes things like LaTeX.

We might also want to hold on to -S for real static variables or perhaps
file backed "shared" variables (as someone recently requested).

> There are some tricks played to avoid creating new PM_* flag bits.  If
> this ceased to be a module and became a "real" builtin (something about
> which I'm ambivalent) there are parts that could be simplified by using
> another flag bit.

I like the fact that this hasn't added a load of extra complexity to
bin_typeset(). An extra flag wouldn't be too invasive if it helps the
implementation. I can't think of a reason to suggest that it should
cease to be a module if the implementation hasn't required it. It's also
worth having the reserved word form as per your later patch even if it
compromises the purity of the module separation.

Despite throwing quite a few odd things at it, I've not been able to
break it.

It'd be nice if typeset -p could tell you that it is a static variable.
Theres also ${(t)...}.

> +Although var(name)tt(=)var(value) sytax may be used in the argument list

typo: syntax

> +itemiz(An exported static remains in the environment of inner scopes but
> +appears unset for the current shell in those scopes.)
> +enditemize()

That doesn't seem ideal. It also seems that can be further affected if
the variable is declared local in some inner scope.

Oliver


  parent reply	other threads:[~2015-09-28 17:11 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-25  2:23 Bart Schaefer
2015-09-25  9:15 ` Peter Stephenson
2015-09-26  5:23   ` Bart Schaefer
2015-09-30 19:38   ` Peter Stephenson
2015-10-01  0:27     ` Bart Schaefer
2015-10-03 19:19       ` Peter Stephenson
2015-10-03 23:43         ` Autoloaded keywords (Re: Proof of concept: "static" parameter scope) Bart Schaefer
2015-10-05 21:55         ` Proof of concept: "static" parameter scope Daniel Shahaf
2015-10-05 22:17           ` Bart Schaefer
2015-10-05 22:36             ` Daniel Shahaf
2015-10-05 23:01               ` Bart Schaefer
2015-10-06  8:40           ` Peter Stephenson
2015-09-28 17:04 ` Oliver Kiddle [this message]
2015-09-28 17:58   ` Roman Neuhauser
2015-09-29 23:31     ` Andrew Janke
2015-09-30  3:06       ` Bart Schaefer
2015-09-28 19:42   ` Mikael Magnusson
2015-09-29  1:23     ` Bart Schaefer
2015-09-29  8:39       ` Peter Stephenson
2015-09-29 22:34       ` Daniel Shahaf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=21593.1443459899@thecus.kiddle.eu \
    --to=okiddle@yahoo.co.uk \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).