From: Drew Adams <drew.adams@oracle.com>
To: Philipp Stephani <p.stephani2@gmail.com>, help-gnu-emacs@gnu.org
Subject: RE: return first element in list with certain property
Date: Tue, 21 Nov 2017 11:26:35 -0800 (PST) [thread overview]
Message-ID: <31dcbfa2-8d13-463c-bbab-fe5109bbab37@default> (raw)
In-Reply-To: <CAArVCkR_N2uia8J2Ut1oWZqcQNHyjLh-tSJgPD1=guxwicXP-A@mail.gmail.com>
> Please consider Knuth's statement about premature optimization. Until
> your users have actually complained about the speed of your product and you
> have benchmarked it and isolated cl-find-if as the culprit, there's no need to
> micro-optimize.
100% agreement.
> Presumably cl-find-if has performed two iterations for years
> or decades without anybody being bothered enough to improve it.
"Presumably ..." No.
Yes, cl.el has been here for a long time. But that doesn't
mean that everything in it is implemented as well as it
could be.
It was put together in a fairly short time, and it has _not_
had super heavy use over the years (that's my guess).
And yes, Emacs lisp use (including of CL emulation) is mostly
for Emacs, and most use cases do not involve things that need
high performance. The number of cases where `cl-find' has
actually been used on very large lists is likely not so high.
Looking at the code, it seems that it would not be difficult
to improve this aspect, providing just a single traversal.
For the list case it could just use the catch-throw idiom,
for example.
So yes, not choosing to use `cl-find' in your Emacs-Lisp
code just because it traverses the list twice is silly and
is most likely premature optimization.
But fixing the `cl-find' implementation so that it does not
gratuitously traverse the list twice might not be silly.
As those tests communicated here so far have shown, `cl-find'
is anyway performant - no doubt partly because `elt' has a
C implementation. Still, the double traversal is gratuitous,
and `cl-find' would be faster without it.
(Do I personally care about how fast it is? Not really.)
next prev parent reply other threads:[~2017-11-21 19:26 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-19 20:43 return first element in list with certain property Emanuel Berg
2017-11-19 20:51 ` Eric Abrahamsen
2017-11-19 21:37 ` Philipp Stephani
2017-11-19 22:55 ` Emanuel Berg
2017-11-20 18:51 ` John Mastro
2017-11-20 19:21 ` Michael Heerdegen
2017-11-20 21:20 ` Emanuel Berg
2017-11-20 21:40 ` John Mastro
2017-11-20 22:19 ` Michael Heerdegen
2017-11-20 20:52 ` Emanuel Berg
2017-11-20 20:12 ` Drew Adams
2017-11-20 20:49 ` Eric Abrahamsen
2017-11-20 21:16 ` Emanuel Berg
2017-11-20 22:02 ` Eric Abrahamsen
2017-11-21 1:54 ` Emanuel Berg
2017-11-21 2:18 ` Emanuel Berg
2017-11-21 17:34 ` Michael Heerdegen
2017-11-21 20:10 ` Emanuel Berg
2017-11-21 21:33 ` Michael Heerdegen
2017-11-22 21:30 ` Nicolas Petton
2017-11-22 21:31 ` Nicolas Petton
2017-11-21 18:01 ` Philipp Stephani
2017-11-21 18:37 ` Michael Heerdegen
2017-11-21 19:26 ` Drew Adams [this message]
2017-11-21 20:17 ` Emanuel Berg
2017-11-21 20:47 ` Drew Adams
2017-11-21 20:14 ` Emanuel Berg
[not found] ` <mailman.4260.1511289435.27995.help-gnu-emacs@gnu.org>
2017-11-22 3:52 ` James K. Lowden
2017-11-22 5:04 ` Michael Heerdegen
2017-11-22 14:06 ` Emanuel Berg
2017-11-22 14:52 ` Rusi
2017-11-22 21:28 ` Nicolas Petton
2017-11-23 0:56 ` Emanuel Berg
2017-11-23 1:17 ` Michael Heerdegen
2017-11-23 1:30 ` Emanuel Berg
2017-11-25 2:57 ` John Mastro
2017-11-25 3:54 ` Robert Thorpe
2017-11-25 4:44 ` Alexis
2017-11-25 7:10 ` tomas
2017-11-25 17:11 ` Emanuel Berg
2017-11-25 7:46 ` Eli Zaretskii
2017-11-25 8:03 ` tomas
2017-11-25 19:00 ` John Mastro
2017-11-25 19:45 ` Emanuel Berg
2017-11-27 3:44 ` Michael Heerdegen
2017-11-20 22:59 ` Drew Adams
2017-11-21 1:50 ` Emanuel Berg
[not found] ` <mailman.4093.1511127491.27995.help-gnu-emacs@gnu.org>
2018-03-06 0:31 ` Robert L.
2018-03-06 8:53 ` Emanuel Berg
2018-03-06 9:29 ` Emanuel Berg
[not found] <mailman.4086.1511124258.27995.help-gnu-emacs@gnu.org>
2017-11-19 21:19 ` Marco Wahl
2017-11-19 22:51 ` Emanuel Berg
2017-11-21 4:00 ` Emanuel Berg
2017-11-19 21:20 ` Marco Wahl
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=31dcbfa2-8d13-463c-bbab-fe5109bbab37@default \
--to=drew.adams@oracle.com \
--cc=help-gnu-emacs@gnu.org \
--cc=p.stephani2@gmail.com \
/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.
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).