unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: Eli Zaretskii <eliz@gnu.org>
Cc: larsi@gnus.org, emacs-devel@gnu.org
Subject: Re: New optimisations for long raw strings in C++ Mode.
Date: Tue, 9 Aug 2022 11:00:40 +0000	[thread overview]
Message-ID: <YvI+WKO/bPsPO5Cu@ACM> (raw)
In-Reply-To: <83sfm8vxht.fsf@gnu.org>

Hello, Eli and Lars.

On Sun, Aug 07, 2022 at 19:17:50 +0300, Eli Zaretskii wrote:
> > Date: Sun, 7 Aug 2022 16:13:56 +0000
> > Cc: emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>

> > > Simplest case to reproduce:

> > > M-: (setq long-line-threshold nil)

> > > Go to a cc buffer containing:

> > > char long_line[] = R"foo(

> > > )foo"

> > > M-: (insert (make-string 1000000 ?y))

> > > on the second line.  This reliably hangs Emacs for me.

> > Actually, when I try your recipe with make-string, it hangs for me, too,
> > for quite a few minutes.  Alternatively, when I do C-y, the insertion
> > takes a little less than a second.

> I actually tried the "C-y" recipe, and it hangs for me that way, too.

The problem was not so much the long line itself, but that there were too
many contiguous letters in it.  This caused (repeated) overflow of the
regexp engine stack in jit-lock.

Just as a matter of interest, my functions (not yet committed) for
dumping backtraces after a redisplay error were very useful in
identifying the problematic regexp.

I fixed this regexp by replacing a "*" by a "\\{,1000\\}", in the hope
that nobody will want an identifier longer than 1000 characters.

I've committed the fix.  Now the sequence
(i) emacs -Q
(ii) M-: (setq long-line-threshold nil)
(iii) Insert opening and closing raw string delimiters into a C++ Mode
  buffer.
(iv) Put point between the delimiters.
(v) M-: (insert (make-string 1000000 ?y))

works in a reasonable amount of time (the last step takes under a second
on my system), especially considering that the code scans the inserted
string for a closing raw string delimiter.

-- 
Alan Mackenzie (Nuremberg, Germany).



  reply	other threads:[~2022-08-09 11:00 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-06 21:29 New optimisations for long raw strings in C++ Mode Alan Mackenzie
2022-08-07 12:49 ` Lars Ingebrigtsen
2022-08-07 13:25   ` Alan Mackenzie
2022-08-07 13:34     ` Lars Ingebrigtsen
2022-08-07 14:40       ` Alan Mackenzie
2022-08-07 14:41         ` Lars Ingebrigtsen
2022-08-07 14:54         ` Lars Ingebrigtsen
2022-08-07 16:13           ` Alan Mackenzie
2022-08-07 16:17             ` Eli Zaretskii
2022-08-09 11:00               ` Alan Mackenzie [this message]
2022-08-09 15:35                 ` Lars Ingebrigtsen
2022-08-09 15:38                   ` Lars Ingebrigtsen
2022-08-09 16:05                     ` Alan Mackenzie
2022-08-09 16:34                       ` Eli Zaretskii
2022-08-09 20:39                         ` Gregory Heytings
2022-08-09 21:43                           ` Alan Mackenzie
2022-08-09 23:05                             ` Stefan Monnier
2022-08-10  2:43                               ` Eli Zaretskii
2022-08-10  7:42                             ` Gregory Heytings
2022-08-10 13:28                             ` Eli Zaretskii
2022-08-10 16:23                               ` Alan Mackenzie
2022-08-10 16:35                                 ` Eli Zaretskii
2022-08-10 16:50                                   ` Alan Mackenzie
2022-08-10 16:58                                     ` Eli Zaretskii
2022-08-10 17:32                                       ` Alan Mackenzie
2022-08-10 17:41                                         ` Eli Zaretskii
2022-08-10 22:31                                           ` Stefan Monnier
2022-08-11  6:21                                             ` Eli Zaretskii
2022-08-11  7:37                                               ` Stefan Monnier
2022-08-11  6:27                                             ` Immanuel Litzroth
2022-08-11 16:54                                           ` Alan Mackenzie
2022-08-11 17:15                                             ` Eli Zaretskii
2022-08-12 13:05                                           ` Lynn Winebarger
2022-08-12 13:18                                             ` Eli Zaretskii
2022-08-11 15:47                                         ` Yuri Khan
2022-08-11 16:04                                           ` Eli Zaretskii
2022-08-10 17:19                                 ` Gregory Heytings
2022-08-10 17:21                                   ` Eli Zaretskii
2022-08-10 19:45                                   ` Alan Mackenzie
2022-08-14 20:15                                     ` Alan Mackenzie
2022-08-15  8:00                                       ` Gregory Heytings
2022-08-10 13:25                     ` Eli Zaretskii
2022-08-12 12:44                       ` Lars Ingebrigtsen
2022-08-12 12:52                         ` Eli Zaretskii
2022-08-07 15:00         ` 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=YvI+WKO/bPsPO5Cu@ACM \
    --to=acm@muc.de \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=larsi@gnus.org \
    /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).