Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: New zplugin feature (was: Re: How completions work, do they require fpath?)
- X-seq: zsh-users 21268
- From: Sebastian Gniazdowski <sgniazdowski@xxxxxxxxx>
- To: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- Subject: Re: New zplugin feature (was: Re: How completions work, do they require fpath?)
- Date: Wed, 10 Feb 2016 14:15:24 +0100
- Cc: Zsh Users <zsh-users@xxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type:content-transfer-encoding; bh=AVTsqo1ovPBm80upMVyxc8J5NVUzYpzAZCXQHxSkLro=; b=f+igSpujt3eMFy3/EPJWySGbRT7TaL+utOMNXATHCRIp1ygaSFa14lPpEDxgKwKpij gO+Cy+8hzV5JMRxUzFpr1d8UpWL0/jASr3WHMqL0AFOcSRpI7u1AtFC3eQeZrxHku7nU zgXKXnCGmgM1e+bv4WIxbf1zYlIhCos1lOv//xBd7YOB1xTQ79OEUIsrswDXKE1VjzbF 9xNK5R5NAIiRgmCLRAlviNuZBDWUFUW2m3mvCnxZ07BK2W2jG89eavU7qWJ2reSfuh3+ xdn1rmKup/ynNab04qB7VlwVb15dYfG3mWnzmzedZbVJT2LgG7LhbBHiLS9IqCJbJ4GI jnJw==
- In-reply-to: <CAKc7PVAkV2BAEQ6dX-O3Qfc4xfrzrvJ9bim83o+0m1EifEggkQ@mail.gmail.com>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <CAKc7PVBWKfwV7iCBSw4R+gfes=dw1YHB-dAUAh4PRM2dtcUG=Q@mail.gmail.com> <CAKc7PVAkV2BAEQ6dX-O3Qfc4xfrzrvJ9bim83o+0m1EifEggkQ@mail.gmail.com>
Just to illustrate how ABS style programming (it's probably it)
influences performance – for the same 40 plugins antigen takes 4.906
sec, instead of 0.668 sec. That's with zplugin's "debug" loading, with
light loading (only autoload and compdef are then shadowed) it's 0.326
sec, the same for zgen (compinit called once).
Best regards,
Sebastian Gniazdowski
On 10 February 2016 at 10:19, Sebastian Gniazdowski
<sgniazdowski@xxxxxxxxx> wrote:
> Well, actually, antigen snippet I showed implements this too :D In
> Advanced Bash Scripting Guide style (thus not fast), but still, they
> do it.
>
> Best regards,
> Sebastian Gniazdowski
>
>
> On 10 February 2016 at 10:08, Sebastian Gniazdowski
> <sgniazdowski@xxxxxxxxx> wrote:
>> On 31 January 2016 at 20:26, Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
>>> You could try this: Define your own "compdef" whose only action is
>>> to cache its arguments somewhere. Load all the plugins, then after
>>> compinit is run, play back the cached compdef arguments with the real
>>> compdef.
>>
>> I realized how great that idea is. Implemented it in zplugin, thus an
>> idiom is possible:
>>
>> source '/Users/sgniazdowski/.zplugin/bin/zplugin.zsh'
>> zplugin load "some1/plugin1"
>> zplugin load "some2/plugin2"
>> ...
>> zplugin load "some3/plugin3"
>> autoload -Uz compinit
>> compinit
>> zplugin cdreplay -q # -q is quiet
>>
>> The difference between running compinit once and twice is huge,
>> following time differences are possible:
>> zsh -i -c exit 0,73s user 0,25s system 99% cpu 0,980 total
>> zsh -i -c exit 0,11s user 0,04s system 97% cpu 0,156 total
>> (for 3 plugins)
>> zsh -i -c exit 1,24s user 0,41s system 99% cpu 1,667 total
>> zsh -i -c exit 0,48s user 0,18s system 98% cpu 0,668 total
>> (for 40 plugins)
>>
>> This is a very innovative, great thing. All current plugin managers
>> drifted towards double compinit calling, by force of lack of
>> shadowing:
>> https://github.com/tarjoilija/zgen/blob/master/zgen.zsh#L471-L475
>> https://github.com/zsh-users/antigen/blob/master/antigen.zsh#L441-L462
>>
>> OMZ slowness is I guess also result of this.
>>
>> Fun example:
>> % unfunction compdef
>> % zplg dtrace
>> % compdef _ls cp
>> % zplg dstop
>> % zplg cdlist
>> Recorded compdefs:
>> compdef _ls cp
>> % zplg cdreplay
>> Compinit isn't loaded, cannot do compdef replay
>> % autoload -Uz compinit
>> % compinit
>> % zplg cdreplay
>> Running compdef _ls cp
>> % echo $_comps[cp]
>> _ls
>>
>> Best regards,
>> Sebastian Gniazdowski
Messages sorted by:
Reverse Date,
Date,
Thread,
Author