From: Dmitry Gutov <dmitry@gutov.dev>
To: "João Távora" <joaotavora@gmail.com>
Cc: Daniel Mendler <mail@daniel-mendler.de>,
Eli Zaretskii <eliz@gnu.org>,
Stefan Monnier <monnier@iro.umontreal.ca>,
47711@debbugs.gnu.org
Subject: bug#47711: bug#48841: bug#47711: bug#48841: bug#47711: [PATCH VERSION 2] Add new `completion-filter-completions` API and deferred highlighting
Date: Fri, 27 Oct 2023 16:29:03 +0300 [thread overview]
Message-ID: <5d0a78cc-4fa0-ef04-3462-1826f17d7d56@gutov.dev> (raw)
In-Reply-To: <CALDnm52orHVT4gNEu7xvtMoWT9JA9H3nL_P+2k=5rbEGDC_Jvw@mail.gmail.com>
On 27/10/2023 03:26, João Távora wrote:
> On Fri, Oct 27, 2023 at 1:11 AM Dmitry Gutov <dmitry@gutov.dev> wrote:
>
>>> Also in the last iteration of the "yoyo" fido-vertical-mode test,
>>> results with my latest patch are quite a bit faster.
>>
>> Hmm, your latest (lazy-hilit-2023-v3.diff) improves the (completing-read
>> "" obarray) scenario a lot (over the original two 2023 solutions), but
>> not the the 'C-h v' scenario. I don't have an explanation.
>
> The improvement was due to running string-match only once per completion,
> if you look at the changes to completion-pcm--all-completions.
Right. I just don't (didn't?) have an explanation for the difference in
the improvement in performance (or the lack thereof) between the two
scenarios.
> It could be this code doesn't kick in in the C-h v scenario. Notice
> that that function already has some optimizations: for example, when
> the regexp match is performed by all-completions and its use of
> completion-regexp-alist, there's no way to get the regex match data
> to compute the score, so it'll have to be postponed to
> completion-pcm--hilit-commonality as in the v2.diff case.
>
> Then again, that doesn't explain why in the C-h v scenario, the regression
> was fixed precisely by adjust that code that I was conjecturing might
> not kick in.
According to my print-debugging, the situation is the reverse:
(completing-read "" obarray) goes the "The internal functions already
obeyed" route (because obarray is not a function?), and the scenario
that didn't get better (C-h v) goes down the clause "pattern has
something interesting to match". Unless the input is empty, then it also
goes down the first clause.
So it seems like we might misunderstand the reason why the former got
faster. I see the check changed from
(not (functionp table)
to
(or (not (functionp table))
(cl-loop for e in pattern never (stringp e)))
but that can't be that reason.
BTW, all-completion's docstring also says that a COLLECTION that is a
function should itself handle completion-regexp-list, so we could try to
rely on that too and drop the additional check. That's risky, though, so
something for a later follow-up.
> Anyway, I think it's safer to say that my latest patch is at least as fast,
> sometimes faster, than the 2023 completion-filter-completions solution.
All other things equal, I also prefer a smaller change, and thank you
for producing it. Functionally, too, it's almost equivalent to
completion-filter-completions. So one could easily write a wrapper like
that with the same performance.
But there are differences. The first is that the highlighter function
takes one string as an argument instead of a collection. I mentioned
this before, this will be much handier to use in company-capf.
Second, in Daniel's patch the "adjust metadata" function got a
different, arguably better, calling convention. That's not dependent on
the rest of the patch, so it can be considered separately.
Third, it made a principled stance to avoid altering the original
strings, even the non-visual text properties. This approach could be
adopted piecewise from Daniel's patch, especially if the performance
ends up the same or insignificantly different in practical usage.
As for whether we migrate to the completion-filter-completions API, I
don't have a strong opinion. If we still think that the next revision of
the completion API will be radically different, then there is not much
point in making medium-sized steps like that. OTOH, if we end up with
the same API for the next decade and more, completion-filter-completions
does look more meaningful, and more easily extensible (e.g. next we
could add a pair (completion-scorer . fn) to its return value; and so
on). And again, the implementation could be a simple wrapper at first.
next prev parent reply other threads:[~2023-10-27 13:29 UTC|newest]
Thread overview: 174+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-05 1:39 bug#48841: fido-mode is slower than ido-mode with similar settings Dmitry Gutov
2021-06-05 9:35 ` João Távora
2021-06-05 23:02 ` Dmitry Gutov
2021-06-05 23:20 ` João Távora
2021-06-05 23:42 ` Dmitry Gutov
2021-06-06 0:25 ` Dmitry Gutov
2021-06-06 6:54 ` João Távora
2021-06-06 22:20 ` Dmitry Gutov
2021-06-06 23:49 ` João Távora
2021-06-07 0:11 ` Dmitry Gutov
2021-06-07 8:52 ` João Távora
2021-06-11 2:19 ` Dmitry Gutov
2021-06-11 17:09 ` João Távora
2021-06-11 22:34 ` Dmitry Gutov
2021-06-11 22:41 ` Dmitry Gutov
2021-06-13 14:55 ` João Távora
2021-06-17 2:36 ` Dmitry Gutov
2021-06-17 21:21 ` João Távora
2021-07-04 1:53 ` Dmitry Gutov
2021-07-07 8:56 ` bug#47711: " Daniel Mendler
2021-06-11 23:24 ` João Távora
2021-06-12 0:43 ` Dmitry Gutov
2021-06-13 14:29 ` João Távora
2021-06-14 0:08 ` Dmitry Gutov
2021-06-14 0:16 ` João Távora
2021-06-17 2:23 ` Dmitry Gutov
2021-06-17 21:29 ` João Távora
2021-07-04 1:42 ` Dmitry Gutov
2021-06-06 2:34 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-06-06 6:59 ` João Távora
2021-06-06 16:54 ` Dmitry Gutov
2021-06-06 18:37 ` João Távora
2021-06-06 22:21 ` Dmitry Gutov
2021-06-06 23:27 ` João Távora
2021-06-06 17:55 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-06-06 21:33 ` João Távora
2021-08-11 14:16 ` bug#48841: [PATCH] Add new `completion-filter-completions` API and deferred highlighting Daniel Mendler
2021-08-11 16:11 ` Daniel Mendler
2021-08-11 16:17 ` bug#47711: " João Távora
2021-08-12 9:24 ` Daniel Mendler
2021-08-13 10:38 ` bug#48841: [PATCH VERSION 2] " Daniel Mendler
2021-08-13 10:56 ` João Távora
2021-08-13 11:21 ` bug#48841: bug#47711: " Daniel Mendler
2021-08-13 12:05 ` João Távora
2021-08-13 12:22 ` Daniel Mendler
2021-08-13 12:37 ` bug#48841: " João Távora
2021-08-13 12:56 ` Daniel Mendler
2021-08-13 13:36 ` bug#48841: " João Távora
2021-08-13 14:03 ` Daniel Mendler
2021-08-13 14:11 ` bug#48841: " João Távora
2021-08-13 14:37 ` bug#47711: " Daniel Mendler
2021-08-14 2:47 ` Dmitry Gutov
2021-08-14 7:12 ` bug#47711: " Eli Zaretskii
2021-08-14 11:22 ` Dmitry Gutov
2021-08-16 8:48 ` Daniel Mendler
2021-08-16 11:57 ` bug#47711: " Eli Zaretskii
2021-08-16 12:02 ` João Távora
2021-08-16 12:19 ` Eli Zaretskii
2021-08-16 12:08 ` Daniel Mendler
2021-08-14 10:36 ` João Távora
2021-08-14 11:29 ` Eli Zaretskii
2021-08-14 12:12 ` bug#47711: " Lars Ingebrigtsen
2021-08-14 12:39 ` Eli Zaretskii
2021-08-14 13:29 ` Lars Ingebrigtsen
2021-08-16 3:21 ` Dmitry Gutov
2021-08-16 3:27 ` bug#47711: " João Távora
2021-08-16 3:31 ` Dmitry Gutov
2021-08-16 3:53 ` João Távora
2021-08-16 3:59 ` Dmitry Gutov
2021-08-16 4:25 ` bug#47711: " João Távora
2021-08-16 9:08 ` Daniel Mendler
2021-08-16 10:15 ` João Távora
2021-08-16 10:52 ` Daniel Mendler
2021-08-16 11:37 ` bug#48841: " João Távora
2021-08-16 12:05 ` Daniel Mendler
2021-08-16 12:17 ` João Távora
2021-08-16 12:43 ` Eli Zaretskii
2021-08-16 14:26 ` bug#48841: " Dmitry Gutov
2021-08-16 14:29 ` João Távora
2021-08-16 12:39 ` Eli Zaretskii
2021-08-16 12:49 ` bug#48841: " Daniel Mendler
2021-08-16 13:21 ` Eli Zaretskii
2021-08-16 14:00 ` Dmitry Gutov
2021-08-16 14:20 ` João Távora
2021-08-16 14:33 ` bug#48841: " Dmitry Gutov
2021-08-16 14:36 ` João Távora
2021-08-16 14:47 ` bug#47711: bug#48841: " Dmitry Gutov
2021-08-16 16:59 ` João Távora
2021-08-16 18:25 ` João Távora
2021-08-17 2:08 ` Dmitry Gutov
2021-08-17 8:59 ` João Távora
2021-08-17 11:48 ` bug#48841: " Eli Zaretskii
2021-08-17 11:52 ` bug#47711: " João Távora
2021-08-16 3:17 ` Dmitry Gutov
2021-08-16 11:46 ` Eli Zaretskii
2021-08-16 13:38 ` Dmitry Gutov
2021-08-16 13:41 ` João Távora
2021-08-16 14:14 ` bug#47711: " Dmitry Gutov
2021-08-15 18:32 ` bug#48841: [PATCH] Make fido-mode about as fast as ido-mode even with many completions João Távora
2021-08-25 15:42 ` João Távora
2021-08-14 7:01 ` bug#48841: bug#47711: [PATCH VERSION 2] Add new `completion-filter-completions` API and deferred highlighting Eli Zaretskii
2021-08-14 9:48 ` João Távora
2021-08-15 0:03 ` João Távora
2021-08-16 3:26 ` Dmitry Gutov
2021-08-16 11:48 ` bug#48841: " Eli Zaretskii
2021-08-16 8:47 ` Daniel Mendler
2021-08-14 2:55 ` bug#47711: bug#48841: " Dmitry Gutov
2021-08-14 7:16 ` bug#48841: " Eli Zaretskii
2023-10-24 22:25 ` bug#47711: " Dmitry Gutov
2023-10-25 17:52 ` João Távora
2023-10-25 20:50 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-25 21:02 ` João Távora
2023-10-25 22:12 ` João Távora
2023-10-26 21:49 ` João Távora
2023-10-26 23:10 ` Dmitry Gutov
2023-10-26 23:27 ` João Távora
2023-10-26 23:35 ` Dmitry Gutov
2023-10-26 23:52 ` João Távora
2023-10-26 23:25 ` Dmitry Gutov
2023-10-26 23:44 ` João Távora
2023-10-27 0:11 ` Dmitry Gutov
2023-10-27 0:26 ` João Távora
2023-10-27 13:29 ` Dmitry Gutov [this message]
2023-10-27 13:46 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-27 15:41 ` Dmitry Gutov
2023-10-27 16:19 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-27 17:06 ` Dmitry Gutov
2023-10-27 18:12 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-29 2:07 ` Dmitry Gutov
2023-10-29 4:41 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-11-03 0:16 ` Dmitry Gutov
2023-11-03 3:05 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-27 17:16 ` João Távora
2023-10-28 22:24 ` Dmitry Gutov
2023-10-29 23:12 ` João Távora
2023-10-31 3:20 ` Dmitry Gutov
2023-10-31 10:55 ` João Távora
2023-10-31 20:52 ` Dmitry Gutov
2023-11-01 18:47 ` João Távora
2023-11-01 22:45 ` Dmitry Gutov
2023-11-02 9:48 ` João Távora
2023-11-02 10:10 ` Eli Zaretskii
2023-11-02 10:39 ` João Távora
2023-11-02 10:58 ` Eli Zaretskii
2023-11-02 11:12 ` João Távora
2023-11-02 14:40 ` Dmitry Gutov
2023-11-02 15:24 ` João Távora
2023-11-02 15:36 ` Dmitry Gutov
2023-11-02 15:58 ` João Távora
2023-11-02 16:03 ` Dmitry Gutov
2023-11-02 16:09 ` João Távora
2023-11-02 16:15 ` Dmitry Gutov
2021-04-11 20:51 ` bug#47711: 27.1; Deferred highlighting support in `completion-all-completions', `vertico--all-completions` Daniel Mendler
[not found] ` <handler.47711.B.16181742862702.ack@debbugs.gnu.org>
2021-04-18 21:26 ` bug#47711: Acknowledgement (27.1; Deferred highlighting support in `completion-all-completions', `vertico--all-completions`) Daniel Mendler
2023-11-04 18:46 ` bug#47711: bug#48841: bug#47711: bug#48841: bug#47711: [PATCH VERSION 2] Add new `completion-filter-completions` API and deferred highlighting Howard Melman
2024-04-08 17:19 ` bug#47711: 27.1; Deferred highlighting support in `completion-all-completions', `vertico--all-completions` Dmitry Gutov
2023-11-06 16:20 ` bug#47711: bug#48841: bug#47711: bug#48841: bug#47711: [PATCH VERSION 2] Add new `completion-filter-completions` API and deferred highlighting João Távora
2023-11-06 19:38 ` Dmitry Gutov
2023-11-07 12:13 ` João Távora
2023-11-08 1:06 ` Dmitry Gutov
2023-11-08 1:24 ` João Távora
2023-11-08 1:47 ` Dmitry Gutov
2023-10-27 0:14 ` João Távora
2021-08-14 8:23 ` João Távora
2021-08-16 3:48 ` Dmitry Gutov
2021-08-16 4:20 ` bug#48841: " João Távora
2021-08-16 8:53 ` Daniel Mendler
2021-08-14 6:45 ` Eli Zaretskii
2021-08-14 3:11 ` bug#47711: bug#48841: [PATCH] " Dmitry Gutov
2021-08-12 8:00 ` Eli Zaretskii
2021-08-12 8:47 ` Daniel Mendler
2021-08-14 6:27 ` Eli Zaretskii
2021-08-16 9:42 ` Daniel Mendler
2021-08-16 12:58 ` bug#47711: " Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5d0a78cc-4fa0-ef04-3462-1826f17d7d56@gutov.dev \
--to=dmitry@gutov.dev \
--cc=47711@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=joaotavora@gmail.com \
--cc=mail@daniel-mendler.de \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).