From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Re: New optimisations for long raw strings in C++ Mode. Date: Sun, 7 Aug 2022 13:25:26 +0000 Message-ID: References: <87r11s2p7f.fsf@gnus.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23017"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Lars Ingebrigtsen Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Aug 07 15:26:30 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oKgIY-0005qJ-Lr for ged-emacs-devel@m.gmane-mx.org; Sun, 07 Aug 2022 15:26:30 +0200 Original-Received: from localhost ([::1]:35008 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oKgIX-0001Y6-Dt for ged-emacs-devel@m.gmane-mx.org; Sun, 07 Aug 2022 09:26:29 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:48968) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oKgHb-0000g5-JA for emacs-devel@gnu.org; Sun, 07 Aug 2022 09:25:31 -0400 Original-Received: from colin.muc.de ([193.149.48.1]:27860 helo=mail.muc.de) by eggs.gnu.org with smtp (Exim 4.90_1) (envelope-from ) id 1oKgHZ-0007rE-Fs for emacs-devel@gnu.org; Sun, 07 Aug 2022 09:25:31 -0400 Original-Received: (qmail 35529 invoked by uid 3782); 7 Aug 2022 13:25:26 -0000 Original-Received: from acm.muc.de (p2e5d5157.dip0.t-ipconnect.de [46.93.81.87]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Sun, 07 Aug 2022 15:25:26 +0200 Original-Received: (qmail 5190 invoked by uid 1000); 7 Aug 2022 13:25:26 -0000 Content-Disposition: inline In-Reply-To: <87r11s2p7f.fsf@gnus.org> X-Submission-Agent: TMDA/1.3.x (Ph3nix) X-Primary-Address: acm@muc.de Received-SPF: pass client-ip=193.149.48.1; envelope-from=acm@muc.de; helo=mail.muc.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:293198 Archived-At: Hello, Lars. On Sun, Aug 07, 2022 at 14:49:40 +0200, Lars Ingebrigtsen wrote: > Alan Mackenzie 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).