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

Re: excessive memory usage?

I had seen this message on the debian list, but didn't have the time
to reply yet.

Clint Adams wrote:

> I received this bug report last week.  Due to lack of time,
> I haven't had a chance to look into it thoroughly, but I
> just tried it out, and it did suck up (rather slowly) about
> 42 megs (temporarily) before it finally completed.
> I'm guessing that this happens during compadd.  So is this
> evidence of some inefficiency or is all that memory necessary?

As Peter already pointed out the problem is really that the function
passes down huge arrays and has to copy them several times and the
solution is to use the -a option to compadd. Some more comments below.

> As for the second issue, I grabbed a vera.index that is probably
> more recent (it has 9109 lines), and zsh happily completes from all
> of the 6380 unique values.  I assume that his 7617->5996 effect
> is also from duplicate values.

This is what I was thinking, too.

> ...
> I have ~/.zshfunc directory in $fpath, and I made _dict file and put it
> there. That file contained:
> #compdef dict
> _arguments '*:dictword:_dictwords'

If there isn't anything else in this file, then we don't need to use
_arguments. Because calling _arguments with only one `*:...' spec and
no options, no other arguments specs is the same as doing the action
from the `*:...' spec. Only slower.

> ...
> I also tried this to define $dictwords:
> (( $+_cache_dictwords )) || \
>   : ${(A)_cache_dictwords:=${${(f)"$(</usr/share/dictd/wn.index)"}%%[   ]*}}
> dictwords=("$_cache_dictwords[@]")

For things that change as seldom as dictionaries, caching is
definetely a good idea. But no need to copy the cache-array into yet
another local array -- that would cause some more unnecessary
allocation and copying. Just use `compadd ... -a _cache_dictwords'.

And if this is ever intended to be included in the distribution, the
-M should be removed, there are enough styles around to give users the 
possibility to define them if they want them. In a simple personal
completion function, of course...


Sven Wischnowsky                         wischnow@xxxxxxxxxxxxxxxxxxxxxxx

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