From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29631 invoked from network); 19 Jul 2000 13:08:16 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 19 Jul 2000 13:08:16 -0000 Received: (qmail 25855 invoked by alias); 19 Jul 2000 13:08:07 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 12312 Received: (qmail 25848 invoked from network); 19 Jul 2000 13:08:06 -0000 Date: Wed, 19 Jul 2000 15:07:44 +0200 (MET DST) Message-Id: <200007191307.PAA10850@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: Clint Adams's message of Wed, 19 Jul 2000 04:59:10 -0400 Subject: 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)"$( > 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... Bye Sven -- Sven Wischnowsky wischnow@informatik.hu-berlin.de