GNU bug report logs -
#73766
30.0.91; (documentation 'pcase) can take several seconds
Previous Next
Reported by: Yikai Zhao <yikai <at> z1k.dev>
Date: Sat, 12 Oct 2024 08:03:01 UTC
Severity: normal
Found in version 30.0.91
Done: Stefan Monnier <monnier <at> iro.umontreal.ca>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
>> >> Apparently, it would iterate over all defined pcase macros (N), and for
>> >> each of those, `help-fns-short-filename` would iterate over all items in
>> >> `load-path` (M). Total time complexity is N*M.
>> > Adding Stefan and João, in case they have some comments or
>> > suggestions.
>> How 'bout a patch like the one below?
> I tried this patch and can confirm it improves the performance.
> Here's the result of (benchmark-run (documentation 'pcase)):
> - master: 4s
> - master with this patch: 0.12s
Thanks 🙂
Wli, this is a non-trivial chunk of code and it's used more often than
just to get the docstring of `pcase`, so I'm clearly not obviously safe
for `emacs-30`.
Here are some options I can think of:
- Install it `emacs-30` anyway.
- Revert on `emacs-30` the change that introduced the slowdown:
commit 052c2ce0284c5193c9d6768a45a9b3508af51230
Author: Stefan Monnier <monnier <at> iro.umontreal.ca>
Date: Sun Feb 11 17:43:37 2024 -0500
(pcase): Add buttons to the macros' defs in the docstring of `pcase`
* lisp/emacs-lisp/pcase.el (pcase--find-macro-def-regexp): New var.
(find-function-regexp-alist): Add entry for `pcase-macro`s.
(help-fns--signature): Move declaration to where we know it is valid.
(pcase--make-docstring): Add buttons to jump to the definition
of Pcase macros.
- Install on `emacs-30` a simpler and more focused change, which should
work acceptably in most cases, such as:
diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el
index 5a7f3995311..811d42793cd 100644
--- a/lisp/emacs-lisp/pcase.el
+++ b/lisp/emacs-lisp/pcase.el
@@ -214,7 +214,7 @@ pcase--make-docstring
(save-excursion
(forward-char -1)
(insert (format-message " in `"))
- (help-insert-xref-button (help-fns-short-filename filename)
+ (help-insert-xref-button (file-name-nondirectory filename)
'help-function-def symbol filename
'pcase-macro)
(insert (format-message "'."))))
> However it's still slower than last stable version:
> - 29.4 version: 0.02s
Slower than 29.4 is expected because it gives more information (the
file name, as a hyperlink).
I think for `C-h o` this plenty fast.
There's still a remaining performance issue for things like
`eldoc-mode`, admittedly where we'd really want it to be instantaneous,
but I think this should be fixed by making `eldoc` call `documentation`
in a special way to skips those useless computations (eldoc just wants
a "short doc" anyway). This affects other functions using the
`function-documentation` property in a similar way.
Stefan
This bug report was last modified 299 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.