unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: emacs-devel@gnu.org
Subject: Re: New optimisations for long raw strings in C++ Mode.
Date: Sun, 7 Aug 2022 13:25:26 +0000	[thread overview]
Message-ID: <Yu+9RkT/iSgfW7T+@ACM> (raw)
In-Reply-To: <87r11s2p7f.fsf@gnus.org>

Hello, Lars.

On Sun, Aug 07, 2022 at 14:49:40 +0200, Lars Ingebrigtsen wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > I've just committed some optimisations to the savannah master branch
> > which should speed up the handling of long C++ raw strings in an Emacs
> > where font-locking is fully working.

> > On a megabyte long raw string in a normal build on a reasonably modern
> > machine, the response is slightly sluggish, but not unreasonable to
> > somebody who prefers correct fontification to instant response.

> I tried the same test case as before, yanking a 1MB long line into a raw
> string, and Emacs is still hanging after 20s (at which point I'm killing
> it).

Hmm.  Something is different on my setup from yours.  After my
optimisations, I do:
(i) Emacs -Q
(ii) M-: (setq long-line-threshold nil)
(ii) C-x C-f ~/long-line.cc RET; This is a file containing a 1MB raw
  string.
(iii) This loads and displays in somewhere between 1 and 2 seconds.
(iv) C-x 5 b long-line2.cc RET  M-x c++-mode RET
(v) Type in char long_line [] = R"foo(
(vi) Type in RET, twice
(vii) Type in )foo";

(ix) C-x 5 o
(x) Get the long line into the kill ring, with movement commands and
  M-w.
(xi) C-x 5 o.
(xii) Put point on the blank line 2.
(xiii) C-y.
(xiv) This takes less than a second to display.

What does your 1MB string look like?  Does it contain lots of "s?  CC
Mode needs to search through the yanked line for the first occurrence of
)foo", which is why it is not instantaneous.  It also has to put a
syntax-table text property on each " which isn't the terminating )foo",
which is another reason it's not instantaneous.

-- 
Alan Mackenzie (Nuremberg, Germany).



  reply	other threads:[~2022-08-07 13:25 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 [this message]
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
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=Yu+9RkT/iSgfW7T+@ACM \
    --to=acm@muc.de \
    --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).