Subject: bug#25122: 24.5; function describe-variable hangs on large variables

From: Stefan Monnier <[email-masked]>
Date: Sun, 12 Mar 2017 12:29:16 -0400

> Threads aren't truly parallel.  The user can't do anything while the
> thread is running.

I think the idea is to build the printout while the user is reading the
docstring (for example).  The loop that prints would have regular
`yield` calls so that as soon as not to block other operations.

> I wonder if we could just hook this into scrolling somehow?

We definitely could (at least, there's no fundamental reason why we
can't insert the text from a jit-lock thingy, although modifying the
buffer text from jit-lock might trigger some latent bugs).

> As mentioned in https://debbugs.gnu.org/cgi/bugreport.cgi?bug=21717#8,
> it breaks circularity.  Try describing this variable:

>     (defvar circular-list
>       (let ((l (number-sequence 1 100)))
>         (setcdr (last l) l)
>         l)
>       "A circular list that has problems with (mapc 'pp val).")

That's why I think the (mapc #'pp) trick is an interesting observation
(it points to a performance bug that should be easy to fix) but is not
a solution in itself.

        Stefan