From: "João Távora" <joaotavora@gmail.com>
To: Dmitry Gutov <dgutov@yandex.ru>
Cc: Daniel Mendler <mail@daniel-mendler.de>,
Juri Linkov <juri@linkov.net>,
Stefan Monnier <monnier@iro.umontreal.ca>,
"emacs-devel@gnu.org" <emacs-devel@gnu.org>
Subject: Re: [PATCH] (icomplete-vertical-mode): Add support for affixations and, annotations
Date: Wed, 2 Jun 2021 13:59:19 +0100 [thread overview]
Message-ID: <CALDnm50SQoogdbFDFr_rqXBNsLHuAwMuUwnC3sEsP5nnTvUcVA@mail.gmail.com> (raw)
In-Reply-To: <390c2a7d-b173-b788-8e72-b8254462ea2f@yandex.ru>
On Wed, Jun 2, 2021 at 12:48 PM Dmitry Gutov <dgutov@yandex.ru> wrote:
>
> On 02.06.2021 03:02, João Távora wrote:
> > On Wed, Jun 2, 2021 at 12:46 AM Dmitry Gutov <dgutov@yandex.ru> wrote:
> >>> Indeed. Indeed that does show that we simplify the code and can keep
> >>> the current calling convention. But then why should we? Its akwardness
> >>> becomes even clearer there: calling the same function twice in quick
> >>> succession with different second arg for two different types of return value.
> >>
> >> I think the awkwardness comes from the general organization of
> >> minibuffer.el rather than from this particular addition.
> >
> > Yes, yes. Just that this particular addition pulls things in the wrong
> > direction, in my opinion.
> >
> > Another pain point in minibuffer is the representation of candidates.
> > Sometimes they are strings, sometimes they are lists of strings with
> > prefixes and suffixes, lots of silly "if consp". Really should all be slots
> > in a completion object.
>
> Maybe, maybe not. Sometimes we're dealing with a lot of completions,
> though (like 10s of thousands). It would not be great to see some extra
> latency because of a "cleanup" like that.
[ Mind you I'm not proposing completions-as-structs in earnest right
now, I think strings as containers of completions are fine for now.
Just food for thought. ]
If each completion was, say a struct with the completion text, and
some standard fields, I would expect to see a speedup, since struct
access is very fast.
The downside is the loss of flexibility, and that's why when taking
this approach it is common to make these structs also carry a 'plist' slot
where performance isn't paramount.
In terms of usability and speed of these approaches (propertized string
or struct or something else) would be faster than "sometimes string,
sometimes cons, let's just test it here and there and everywhere".
> The cases you are referring to could be solved with a "completions and
> some extra info" struct or several, I think. Where one of the fields is
> the list of completion strings.
OK, but that's on another level. We do have per-completion properties which
could possibly not be modeled as string properties. It's much faster
to access say, the completion score for a given company from a slot,
rather than from a text property. Other less important things could stay in
the string property list (or in a plist of said hypothetical struct,
which should
be about the same in terms of cost).
> > If that object is a string, text properties are a
> > good choice (but we could even abstract the implementation away,
> > though it could be slow).
> Text properties are a good choice in a lot of cases. If we try to turn
> each completion into a struct, that would limit fields that could be
> stored.
See above. Keep using the string plist for that, or use a plist
> Add some versioning concerns, etc.
Defstruct is like a macro yes. So you handle it like you do macros,
recompilation of its users is needed, unless you add slots in order.
But what exactly is the "versioning concern etc" scenario that
you're envisoning? Is it older backends compiled for older Emacs working
with newer Emacsen? As long as you don't mess with the order of slots,
you should be fine. And that's only if you decide to make the slots
public, which doesn't necessarily need to happen.
> But speaking of pulling things in the right direction, I think one of
> the main troubles on minibuffer.el is a lot of the implicit, untyped
> global state. And that change would add to it. The "little md dance", on
> the other hand, makes things explicit.
The little md dance is the same. In the end it relies on global state
as well, unless you thread the whole thing down again.
Anyway, I agree with you and that's basically why I prefer keeping
properties of completion objects in the completion object. I'm not a
fan of the global state either for exactly the reasons you list.
> You are describing the action of caching.
Yes, but caching wouldn't be done by the backend/table/API consumer.
> Which is a fine thing for the
> caller to do, but there's no need to make the API less flexible than it
> is now.
It wouldn't be less flexible. Having a "group fun" take a single completion
string and no other args and return its group and a transformer function isn't
less flexible. Alternatively having a "group fun" take a completion string
and fills in its "group" and "transform" properties is also no less flexible.
And both these options are, IMO, better than having a "group fun" take a
second boolean parameter telling it which of two actions to perform, because
of (yet) unproven performance concerns. It seems pretty clear that that's
letting the implementation spill into the API.
João
next prev parent reply other threads:[~2021-06-02 12:59 UTC|newest]
Thread overview: 178+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-22 21:00 [PATCH] (icomplete-vertical-mode): Add support for affixations and, annotations Daniel Mendler
2021-05-23 9:37 ` João Távora
2021-05-23 11:10 ` bug#48013: " Daniel Mendler
2021-05-23 19:55 ` João Távora
2021-05-23 20:14 ` Daniel Mendler
2021-05-23 21:04 ` João Távora
2021-05-23 21:31 ` Daniel Mendler
2021-05-23 21:54 ` João Távora
2021-05-23 22:38 ` Daniel Mendler
2021-05-24 22:46 ` João Távora
2021-05-25 3:06 ` Daniel Mendler
2021-05-25 9:21 ` João Távora
2021-05-26 18:12 ` João Távora
2021-05-26 19:32 ` Daniel Semyonov via Emacs development discussions.
2021-05-23 23:04 ` Daniel Mendler
2021-05-23 23:39 ` Stefan Monnier
2021-05-24 22:54 ` João Távora
2021-05-25 1:38 ` Stefan Monnier
2021-05-25 8:39 ` João Távora
2021-05-25 11:00 ` Gregory Heytings
2021-05-26 0:03 ` João Távora
2021-05-25 3:12 ` Daniel Mendler
2021-05-25 9:25 ` João Távora
2021-05-24 19:05 ` João Távora
2021-05-24 19:13 ` João Távora
2021-05-24 19:53 ` Daniel Mendler
2021-05-24 23:04 ` João Távora
2021-05-25 3:14 ` Daniel Mendler
2021-05-25 9:31 ` João Távora
2021-05-25 9:40 ` Daniel Mendler
2021-05-24 22:05 ` Dmitry Gutov
2021-05-23 23:37 ` Juri Linkov
2021-05-23 23:39 ` Juri Linkov
2021-05-24 10:26 ` Daniel Mendler
2021-05-24 22:07 ` Juri Linkov
2021-05-25 2:53 ` Daniel Mendler
2021-05-25 8:30 ` João Távora
2021-05-25 16:59 ` Juri Linkov
2021-05-25 17:46 ` João Távora
2021-05-25 20:37 ` Juri Linkov
2021-05-26 21:45 ` Juri Linkov
2021-05-26 22:20 ` Dmitry Gutov
2021-05-26 23:17 ` João Távora
2021-05-27 1:06 ` Dmitry Gutov
2021-05-27 7:29 ` João Távora
2021-05-27 13:15 ` Dmitry Gutov
2021-05-27 14:19 ` João Távora
2021-05-27 18:52 ` Dmitry Gutov
2021-05-27 20:58 ` João Távora
2021-05-28 8:08 ` Daniel Mendler
2021-05-28 8:34 ` João Távora
2021-05-28 9:06 ` Daniel Mendler
2021-05-28 10:09 ` João Távora
2021-05-28 11:16 ` Daniel Mendler
2021-05-28 11:41 ` João Távora
2021-05-28 11:55 ` Daniel Mendler
2021-05-28 12:15 ` João Távora
2021-05-28 12:32 ` Daniel Mendler
2021-05-28 13:17 ` João Távora
2021-05-28 13:55 ` Daniel Mendler
2021-05-28 18:46 ` Juri Linkov
2021-05-29 8:11 ` Daniel Mendler
2021-05-28 12:44 ` Dmitry Gutov
2021-05-28 13:14 ` Daniel Mendler
2021-05-28 13:57 ` Dmitry Gutov
2021-05-28 14:10 ` Daniel Mendler
2021-05-28 14:57 ` Dmitry Gutov
2021-05-28 16:01 ` Daniel Mendler
2021-06-01 9:56 ` João Távora
2021-06-01 11:27 ` Daniel Mendler
2021-06-01 12:00 ` João Távora
2021-06-01 12:37 ` Daniel Mendler
2021-06-01 14:30 ` João Távora
2021-06-01 14:40 ` Daniel Mendler
2021-06-01 15:49 ` João Távora
2021-06-01 16:00 ` Daniel Mendler
2021-06-01 18:47 ` João Távora
2021-06-01 19:03 ` Daniel Mendler
2021-06-01 22:32 ` João Távora
2021-06-01 20:22 ` Stefan Monnier
2021-06-01 22:39 ` João Távora
2021-06-02 2:40 ` Stefan Monnier
2021-06-02 7:53 ` João Távora
2021-06-02 13:48 ` Stefan Monnier
2021-06-01 23:04 ` Dmitry Gutov
2021-06-01 23:22 ` João Távora
2021-06-01 23:29 ` João Távora
2021-06-01 23:46 ` Dmitry Gutov
2021-06-02 0:02 ` João Távora
2021-06-02 11:48 ` Dmitry Gutov
2021-06-02 12:59 ` João Távora [this message]
2021-06-02 18:29 ` Dmitry Gutov
2021-06-02 18:52 ` João Távora
2021-06-02 14:19 ` complexity in minibuffer (was: (icomplete-vertical-mode): Add support for affixations and, annotations) Stefan Monnier
2021-06-02 14:33 ` João Távora
2021-06-02 15:06 ` complexity in minibuffer Stefan Monnier
2021-06-02 15:20 ` João Távora
2021-06-02 15:29 ` Dmitry Gutov
2021-06-02 15:37 ` João Távora
2021-06-02 18:11 ` Dmitry Gutov
2021-06-02 18:30 ` João Távora
2021-06-02 15:38 ` Stefan Monnier
2021-06-02 15:45 ` João Távora
2021-06-02 15:59 ` Daniel Mendler
2021-06-02 16:29 ` João Távora
2021-06-02 15:53 ` Daniel Mendler
2021-06-02 18:31 ` Dmitry Gutov
2021-06-02 19:03 ` João Távora
2021-06-02 20:15 ` Dmitry Gutov
2021-06-02 22:11 ` Juri Linkov
2021-06-03 9:04 ` João Távora
2021-06-03 20:28 ` Juri Linkov
2021-06-01 15:58 ` [PATCH] (icomplete-vertical-mode): Add support for affixations and, annotations Stefan Monnier
2021-06-01 16:04 ` Daniel Mendler
2021-06-02 5:17 ` tumashu
2021-06-02 7:48 ` João Távora
2021-06-02 10:40 ` Dmitry Gutov
2021-06-02 11:04 ` João Távora
2021-06-02 11:28 ` Dmitry Gutov
2021-06-02 11:33 ` João Távora
2021-06-02 12:31 ` Dmitry Gutov
2021-06-02 13:16 ` João Távora
2021-06-05 1:48 ` Dmitry Gutov
2021-06-05 9:21 ` João Távora
2021-06-05 23:06 ` Dmitry Gutov
2021-06-05 23:25 ` João Távora
2021-06-05 4:23 ` Stefan Monnier
2021-06-05 9:26 ` João Távora
2021-06-05 13:02 ` Ergus
2021-06-05 23:47 ` Dmitry Gutov
2021-06-06 2:30 ` Stefan Monnier
2021-06-02 13:38 ` Stefan Monnier
2021-06-02 14:11 ` Dmitry Gutov
2021-06-02 14:54 ` Stefan Monnier
2021-06-02 15:07 ` João Távora
2021-06-05 1:08 ` Dmitry Gutov
2021-06-05 9:16 ` João Távora
2021-06-01 14:47 ` Gregory Heytings
2021-06-01 14:53 ` Daniel Mendler
2021-06-01 14:58 ` Gregory Heytings
2021-06-01 15:06 ` Daniel Mendler
2021-06-01 15:33 ` Gregory Heytings
2021-06-01 15:41 ` Daniel Mendler
2021-06-01 15:09 ` João Távora
2021-06-01 15:12 ` Daniel Mendler
2021-06-01 15:06 ` João Távora
[not found] ` <b49749e34d620592d83a@heytings.org>
[not found] ` <CALDnm53Wdnp0yAu6uQd8A=6-uLArCBEdj4F+aVzUdFOT00XMWw@mail.gmail.com>
[not found] ` <b49749e34dc4e4287593@heytings.org>
[not found] ` <87lf7t8wfz.fsf@gmail.com>
2021-06-01 15:24 ` Gregory Heytings
2021-06-01 23:05 ` João Távora
2021-05-24 23:02 ` Dmitry Gutov
2021-05-24 23:04 ` Dmitry Gutov
2021-05-23 21:35 ` Daniel Mendler
2021-05-23 22:42 ` Dmitry Gutov
2021-05-23 23:33 ` Stefan Monnier
2021-05-23 23:42 ` Juri Linkov
2021-05-24 23:24 ` Dmitry Gutov
2021-05-23 23:35 ` Juri Linkov
2021-05-24 3:23 ` Stefan Monnier
2021-05-24 10:34 ` Daniel Mendler
2021-05-24 16:22 ` Caching where-is-internal (was: (icomplete-vertical-mode): Add support for affixations and, annotations) Stefan Monnier
2021-05-24 16:31 ` Daniel Mendler
2021-05-24 19:53 ` Caching where-is-internal Stefan Monnier
2021-05-24 20:07 ` Daniel Mendler
2021-05-24 20:33 ` Stefan Monnier
2021-05-24 20:45 ` Daniel Mendler
2021-05-24 21:44 ` Stefan Monnier
2021-05-24 21:52 ` [PATCH] (icomplete-vertical-mode): Add support for affixations and, annotations Juri Linkov
2021-05-24 22:41 ` João Távora
2021-05-25 1:27 ` Stefan Monnier
2021-05-24 22:37 ` João Távora
2021-05-25 16:53 ` Juri Linkov
2021-05-25 17:24 ` Stefan Monnier
2021-05-25 17:40 ` João Távora
2021-05-25 20:01 ` Stefan Monnier
2021-05-25 20:27 ` Dmitry Gutov
2021-05-25 20:46 ` João Távora
-- strict thread matches above, loose matches on Subject: below --
2021-06-02 8:25 Manuel Uberti
2021-06-02 11:07 ` João Távora
2021-06-02 11:29 ` Manuel Uberti
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CALDnm50SQoogdbFDFr_rqXBNsLHuAwMuUwnC3sEsP5nnTvUcVA@mail.gmail.com \
--to=joaotavora@gmail.com \
--cc=dgutov@yandex.ru \
--cc=emacs-devel@gnu.org \
--cc=juri@linkov.net \
--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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.