zsh-workers
 help / color / mirror / code / Atom feed
* Naive question: how hard are namespaces for functions
@ 2017-05-15  8:24 Sebastian Gniazdowski
  2017-05-17 14:20 ` Sebastian Gniazdowski
  0 siblings, 1 reply; 4+ messages in thread
From: Sebastian Gniazdowski @ 2017-05-15  8:24 UTC (permalink / raw)
  To: zsh-workers

Hello,
writing something sophisticated involves multiple functions. E.g. I have 47 interactive-mode (not at-startup time) functions in Zplugin, to provide things like:

% zplugin csearch  # Search for completions of plugins
[+] is installed, [-] uninstalled, [+-] partially installed
[+] _local/zplugin                      _zplugin
[-] benclark/parallels-zsh-plugin       _parallels
[-] or17191/going_places                _favrm, _goto
[+] psprint/zsh-navigation-tools        _n-kill
[-] tevren/gitfast-zsh-plugin           _git

So one can disable/enable selected completions. This is nice, but it hurts me that compared to zsh -f, $functions here are very populated. I have much free time so I invest it in Zsh, from this experience I can theoretically see Zsh becoming more like e.g. Ruby. Modules can be built outside Zsh source as plugins, I plan to add Oracle DBM module either on Github or in Zsh upstream, there is the fresh zsh/gdbm module (and it loads in just 0.43 ms, according to zprof, so modules are good way to go), I also plan to publish the regex re2 module from Phill as plugin. Then there is ZUI library, I wrote variable browser (https://github.com/zdharma/zbrowse) in 4 hours with it.

The point is: there is growing discomfort that $functions and $parameters tend to get more populated. Database, regex, etc. support can grow, ZUI applications can grow, but it comes down to single bag for all this, single namespace.

Maybe a namespace support at least for $functions can be easily added? Few ready namespaces:

- completions,
- autosuggestions plugin ${#functions[(I)_zsh_autosuggest*]} == 253
- zsh-syntax-highlighting, ${#functions[(I)_zsh_highlight*]} == 250

The point is to make $functions/functions (builtin) usable again. Like it probably was 5-10 years ago when one could use $functions to e.g. find interactively created functions. Now it's impossible.

--
Sebastian Gniazdowski
psprint /at/ zdharma.org


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Naive question: how hard are namespaces for functions
  2017-05-15  8:24 Naive question: how hard are namespaces for functions Sebastian Gniazdowski
@ 2017-05-17 14:20 ` Sebastian Gniazdowski
  2017-05-17 22:43   ` Bart Schaefer
  0 siblings, 1 reply; 4+ messages in thread
From: Sebastian Gniazdowski @ 2017-05-17 14:20 UTC (permalink / raw)
  To: zsh-workers

Maybe the post was too long, sorry. I just want to say that this:

- completions ls /usr/local/share/zsh/5.3.1-dev-0/functions | grep -c '^_' == 801,
- autosuggestions plugin ${#functions[(I)_zsh_autosuggest*]} == 253
- zsh-syntax-highlighting, ${#functions[(I)_zsh_highlight*]} == 250

is a serious not-nice thing. Maybe namespaces are easy?

Other question is performance. Doing 1304 iterations of function adding, how much does it cost:

% zmodload zsh/zprof; () { source ~/.zcompdump; }; zprof
...
1)    1          55,89    55,89  100,00%     55,89    55,89  100,00%  (anon)

Well that's not much, but this 1304/801.0 * 55 = 89.5, that is I would say something, almost 100 ms.

On 15 maja 2017 at 10:39:40, Sebastian Gniazdowski (psprint@zdharma.org) wrote:
> Hello,
> writing something sophisticated involves multiple functions. E.g. I have 47 interactive-mode  

--
Sebastian Gniazdowski
psprint /at/ zdharma.org


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Naive question: how hard are namespaces for functions
  2017-05-17 14:20 ` Sebastian Gniazdowski
@ 2017-05-17 22:43   ` Bart Schaefer
  2017-05-18 10:29     ` Sebastian Gniazdowski
  0 siblings, 1 reply; 4+ messages in thread
From: Bart Schaefer @ 2017-05-17 22:43 UTC (permalink / raw)
  To: zsh-workers

On May 17,  4:20pm, Sebastian Gniazdowski wrote:
}
} Maybe namespaces are easy?

This depends entirely on what you mean by "namespaces".

Voluntarily naming functions with an identifiable prefix string is easy.

Calling those functions by a name other than the full name with the
prefix string is probably of middling difficulty, but would require
some sort of collision resolution if the same suffix appeared with two
or more prefixes.

Dividing $functions (or any hash parameter value) up into named sections
that the shell somehow understands natively, is very difficult.

I'm not following what this would have to do with how long it takes to
load function definitions.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Naive question: how hard are namespaces for functions
  2017-05-17 22:43   ` Bart Schaefer
@ 2017-05-18 10:29     ` Sebastian Gniazdowski
  0 siblings, 0 replies; 4+ messages in thread
From: Sebastian Gniazdowski @ 2017-05-18 10:29 UTC (permalink / raw)
  To: Bart Schaefer, zsh-workers

On 18 maja 2017 at 00:43:39, Bart Schaefer (schaefer@brasslantern.com) wrote:
> On May 17, 4:20pm, Sebastian Gniazdowski wrote:
> }
> } Maybe namespaces are easy?
>  
> This depends entirely on what you mean by "namespaces".
>  
> Voluntarily naming functions with an identifiable prefix string is easy.
>  
> Calling those functions by a name other than the full name with the
> prefix string is probably of middling difficulty, but would require
> some sort of collision resolution if the same suffix appeared with two
> or more prefixes.

I might be too simple on this, but thought that calling would be with full prefix, only display of $functions (also output of builtin `functions`) would be changed. That might be not too much, but it lead me to an idea:

- prefix is always separated with ":" or "::"
- when defining, one sets ZSH_NSPACE="name"
- then he has functions name::load, name::exit, etc.
- such definition, confronted with ZSH_NSPACE, results in:
  - internal change of name of the functions to ^Aname^Aload, ^Aname^Aexit,
  - when any call is made, "::" is detected, and first the ^A... fields in functions hash table are checked,
  - then normal string e.g. "name::exit" is searched
- displaying of $functions skips elements starting with ^A unless ZSH_NSPACE is set

Just free thinking. Double-searching functions tab is an obvious slowdown, but it would happen only to "::" functions. Legacy software would rarely suffer because "::" function names are rare (and would suffer not much except when performance-hungry), maintained software would utilize ZSH_NSPACE and single search would happen.

But what namespace should completion functions have, not breaking too much similarity to current version.

> Dividing $functions (or any hash parameter value) up into named sections
> that the shell somehow understands natively, is very difficult.
>  
> I'm not following what this would have to do with how long it takes to
> load function definitions.

I've did a run on this (in other mail), it was an connected issue "many functions feel hard" with "many functions might require optimization", and also the division you mentioned, introducing namespaces might be through some division, which might open way to optimization.

--
Sebastian Gniazdowski
psprint /at/ zdharma.org


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-05-18 10:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-15  8:24 Naive question: how hard are namespaces for functions Sebastian Gniazdowski
2017-05-17 14:20 ` Sebastian Gniazdowski
2017-05-17 22:43   ` Bart Schaefer
2017-05-18 10:29     ` Sebastian Gniazdowski

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