Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: PATCH: minor variable allocation change in add-zsh-hook
- X-seq: zsh-workers 36753
- From: Mikael Magnusson <mikachu@xxxxxxxxx>
- To: Matthew Hamilton <M@xxxxxxxxxxxxxx>, zsh workers <zsh-workers@xxxxxxx>
- Subject: Re: PATCH: minor variable allocation change in add-zsh-hook
- Date: Sat, 3 Oct 2015 00:03:41 +0200
- 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==
- In-reply-to: <560EFAC3.2050806@tthamilton.com>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <560EF1CD.6060009@tthamilton.com> <CAHYJk3S+9RoG=JkOrxzzuiW08n91jGZexMcQnu6MxS-MgPaV_g@mail.gmail.com> <560EFAC3.2050806@tthamilton.com>
On Fri, Oct 2, 2015 at 11:44 PM, Matthew Hamilton <M@xxxxxxxxxxxxxx> wrote:
>
>
> On 10/02/2015 05:38 PM, Mikael Magnusson wrote:
>> On Fri, Oct 2, 2015 at 11:06 PM, Matthew Hamilton <M@xxxxxxxxxxxxxx> 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] <HOOK> <FUNCTION(s)...>'
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
Messages sorted by:
Reverse Date,
Date,
Thread,
Author