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: Tue, 9 Aug 2022 11:00:40 +0000 Message-ID: References: <87r11s2p7f.fsf@gnus.org> <87fsi818ju.fsf@gnus.org> <87wnbkyuhe.fsf@gnus.org> <83sfm8vxht.fsf@gnu.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="25307"; mail-complaints-to="usenet@ciao.gmane.io" Cc: larsi@gnus.org, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue Aug 09 13:02:53 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 1oLN0e-0006QL-QJ for ged-emacs-devel@m.gmane-mx.org; Tue, 09 Aug 2022 13:02:52 +0200 Original-Received: from localhost ([::1]:57110 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oLN0d-0005Bl-65 for ged-emacs-devel@m.gmane-mx.org; Tue, 09 Aug 2022 07:02:51 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:58200) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oLMyd-0004Kn-6C for emacs-devel@gnu.org; Tue, 09 Aug 2022 07:00:47 -0400 Original-Received: from colin.muc.de ([193.149.48.1]:44419 helo=mail.muc.de) by eggs.gnu.org with smtp (Exim 4.90_1) (envelope-from ) id 1oLMya-00074r-24 for emacs-devel@gnu.org; Tue, 09 Aug 2022 07:00:46 -0400 Original-Received: (qmail 73680 invoked by uid 3782); 9 Aug 2022 11:00:41 -0000 Original-Received: from acm.muc.de (p4fe156e6.dip0.t-ipconnect.de [79.225.86.230]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Tue, 09 Aug 2022 13:00:41 +0200 Original-Received: (qmail 8403 invoked by uid 1000); 9 Aug 2022 11:00:40 -0000 Content-Disposition: inline In-Reply-To: <83sfm8vxht.fsf@gnu.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:293297 Archived-At: 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 > > > 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).