From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13753 invoked by alias); 2 Oct 2015 22:03:43 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 36753 Received: (qmail 12022 invoked from network); 2 Oct 2015 22:03:42 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=2nC3OcktyCDpsLa30wyVuvJVlygsswog/bC08Ne2CgE=; b=yJOIfYXVScCMkwTB+SAejbuNX9+XTJGU4t/KniZI/rVxixr9CZgt7E0KBnCEv6oIFc uWXxowW8BtBdz2fcXHTx2WpOi9RpEvYQkKKetIs+3oH5h1RNEWe3ZXbfDPepUh5q9ZPn yGPVxw9re9aCIQE3+8OMf+ZprJimlnQN+yyP5ILHG/tMrU6u3TswL28/P6SfJ+2AjDXO 458tCIixaI3r6hqwb8eiiQ3YCuLj3IkDJmXYCNwIyFGYOzQ8vyVdMqZYzqhtNW5/Ych8 8QAIAo7mrpIagNpQibQG5O3o08RR4ylJqz3Oapplg8okIBCpn7uQuJdNsYC7yRb6x+OI 6eBg== MIME-Version: 1.0 X-Received: by 10.55.212.77 with SMTP id l74mr6803171qki.19.1443823421325; Fri, 02 Oct 2015 15:03:41 -0700 (PDT) In-Reply-To: <560EFAC3.2050806@tthamilton.com> References: <560EF1CD.6060009@tthamilton.com> <560EFAC3.2050806@tthamilton.com> Date: Sat, 3 Oct 2015 00:03:41 +0200 Message-ID: Subject: Re: PATCH: minor variable allocation change in add-zsh-hook From: Mikael Magnusson To: Matthew Hamilton , zsh workers Content-Type: text/plain; charset=UTF-8 On Fri, Oct 2, 2015 at 11:44 PM, Matthew Hamilton wrote: > > > On 10/02/2015 05:38 PM, Mikael Magnusson wrote: >> On Fri, Oct 2, 2015 at 11:06 PM, Matthew Hamilton wrote: >>> The 'local usage' variable is allocated in main, outside of the if loop >>> that determines if it is going to print the usage information. This >>> means time is spent allocating that variable, when in most cases, it >>> will never be printed. It would be better to set it within the if loop, >>> or alternatively, not using a variable and simply output the usage text >>> as as literal string (as many other functions do). >>> >>> A trace of the time being needlessly being spent allocating the variable >>> can be seen here: https://gist.github.com/Eriner/3192c9eb98fabdd70607 >>> >>> It's not that much time, but it adds up and is inefficient/unnecessary. >>> >>> diff --git a/Functions/Misc/add-zsh-hook b/Functions/Misc/add-zsh-hook >>> index ee37d67..bccd115 100644 >>> --- a/Functions/Misc/add-zsh-hook >>> +++ b/Functions/Misc/add-zsh-hook >>> @@ -19,7 +19,6 @@ hooktypes=( >>> chpwd precmd preexec periodic zshaddhistory zshexit >>> zsh_directory_name >>> ) >>> -local usage="Usage: $0 hook function\nValid hooks are:\n $hooktypes" >>> >>> local opt >>> local -a autoopts >>> @@ -58,6 +57,7 @@ if (( list )); then >>> typeset -mp "(${1:-${(@j:|:)hooktypes}})_functions" >>> return $? >>> elif (( help || $# != 2 || ${hooktypes[(I)$1]} == 0 )); then >>> + local usage="Usage: $0 hook function\nValid hooks are:\n $hooktypes" >>> print -u$(( 2 - help )) $usage >>> return $(( 1 - help )) >>> fi >> >> You would need to add tens of thousands of hooks before this would >> make any difference, and then you're already far past the point of >> sanity. I like the way the current code separates the content and >> logic. There is also no such thing as an "if loop". >> > > You're correct, I meant 'if statement'. My counter to that point would > be to match how many of the other functions do it; they simply print the > help and do not allocate any variables. > > ex: Functions/TCP/tcp_shoot > > if [[ $# -ne 2 ]]; then > print "Usage: tcp_dump host port This one was a good example, because the usage message is actually incorrect (tcp_dump instead of tcp_shoot) :). > ex: Functions/VCS_Info/vcs_info_hookdel > > if (( ${#argv} < 2 )); then > print 'usage: vcs_info_hookdel [-a] ' Well, it's true that add-zsh-hook is the only function that does the 'local usage' thing, and I don't feel strongly about it. It just looks nice to me the way it is in that particular case, what with the long case statement coming before the print and all. -- Mikael Magnusson