From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Ergus Newsgroups: gmane.emacs.devel Subject: Re: cc-mode fontification feels random Date: Thu, 10 Jun 2021 17:16:47 +0200 Message-ID: <20210610151647.qtt7pqbjhdtp6coe@Ergus> References: <83o8cge4lg.fsf@gnu.org> <62e438b5-d27f-1d3c-69c6-11fe29a76d74@dancol.org> <83fsxsdxhu.fsf@gnu.org> <83pmwudgw3.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="5169"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Eli Zaretskii , rudalics@gmx.at, dancol@dancol.org, monnier@iro.umontreal.ca, rms@gnu.org, emacs-devel@gnu.org To: Alan Mackenzie Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Jun 10 17:18:45 2021 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 1lrMSC-00019D-Ji for ged-emacs-devel@m.gmane-mx.org; Thu, 10 Jun 2021 17:18:44 +0200 Original-Received: from localhost ([::1]:49306 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lrMS8-0005XH-1S for ged-emacs-devel@m.gmane-mx.org; Thu, 10 Jun 2021 11:18:40 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:50908) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lrMQU-0003uz-L9 for emacs-devel@gnu.org; Thu, 10 Jun 2021 11:16:58 -0400 Original-Received: from sonic306-2.consmr.mail.bf2.yahoo.com ([74.6.132.41]:46137) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lrMQR-0005sj-B8 for emacs-devel@gnu.org; Thu, 10 Jun 2021 11:16:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aol.com; s=a2048; t=1623338213; bh=zTVaJmRA8rsJoMBElT5/hdLp3DldVmvO7trP9Gjj+FU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From:Subject:Reply-To; b=Ddt0aqSKDWVXivlJ5Wt2X4y8UCvebMbP0rLK/GQCp8HtYaxD51grxzh8/ccUjxVkmonXGKlSEn5b8qQtWIkdzx3IM7sMeT90jXCvvenuxM6075MghjwrzX6fUKCURhfw9W9weOyeWW8Yi/RiC0dChXiy1Gq3ojTbSfcjUOt+hVpk9uEyZb4XIqIU7+xxQlp/lWsh6J0YrYe6wBnZnn3qqsAg5gfh9P2wpyA92J0CAY78ZsQTA4ozCNDa/U3oBFhqGzNvMu787JlQbcfe9MZey9/4/DIyxXFPoSurA6bCI09JRHQu/9FypogYYmW488+F5d2P+BM7/UMif1m2frUrOQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1623338213; bh=76QHVySrvRlvSWHaSou0IPXEC2w5CS0UhhYKiaGPbml=; h=X-Sonic-MF:Date:From:To:Subject:From:Subject; b=ASf3iH9Ne0nCPFVQfkK8ga/J3UaGZbjnb3EB/e56kUH8P7nMTrXkT1MDTehUfSCiTE8gAFYSkU2QZ3XCnEXExG0mOokHEQ4cmLjWLkUHbISWOt1r88Yy2sPtGU/JhLyjfZ/z10XLx+oYOS3Q+lNBmidmy4MB5xh+hAvn4jlcNVmdRwuDLyqDX9KVtE9mWeElJpTU4rFCsHCDCf/WAjhXvuQz2R1+krqrjtreZJKzYfDbCT9Zyh1S2i4jBTPAmOHFtLUO1AKwAuBBYq8MkBel0eY0ipB0nigkXnFGxGCsa1592ZPTFnxdI029rfnFOwJMciV0l1gNRzytAIjUwzWVIA== X-YMail-OSG: T1aSbwkVM1n7jD3eVHrymR4DD9XXYIJsDwVVnlq27Oh6wXkChwcq2CUUP1NYZFj dtTBiROkyvbWi6F.YEecxmYAgu9AYPdeDo3W6pZg_EoHpmo2gIrimgsDcfPlpDuMkEfdLXg2b8N8 aQjkFlLzMdV3ESs0tlpLnPKEriEecgwiDVdkKOlOQR72mXj3_SUiwGmHv6uF5dgMVPZHOgyVUi1H OG8ebq0X_FfOSrVOvJTm_n0fgtITC_DjJ24Wn_e6_.Opeg_Dn53jXx8XdTYADV7IiK1ZpWfLBIVx gwgV3BqOxr1DmlDluI1Ybgz13Z6ay_qxU7TH6Kxbco6wzCsW3ghDMuwbKTtf7a6Kq2E0MD.wm3uh eN.CS.ZYAp37T.imiD4OQDGzRVh4ceEwAKaG2VJc9Y1LgzHxRTrGMOY5DioGdKkBrA8ljal.e5QI _3oJLW.n935OsDyAtI9JKIm0kljb3qUpDHstSbiUIrxryUn6obGd4IlRAA11OiI8GPdE9oIo_3tJ QapgxeGHFYE7DLQTLQzEf.lOqMqZfDvL9aYTw0gx9pPZ8TQNRFX00erKjTR.jSmtFNkj4pZ5zp4L ZHxTGvTJg0df8HIL82Oq.XTW12ixzAAv9jVl7uJKEDN2zE7UaMCf5.Y3rcZAmF9JKml1iTN24vna pryoVQ7Xx_48iVFbaWizKtv_jeg1sbP1s_yVGrXIEirKMSKB68NhYXByT_4_ZOnmI_WWKz50iv.D 2a8dwK1ZplS1iN4em1jffe86Y4lKSeKZrXldpJmLSEkVypiRtGsWL21yLdDGsxfjBucA0kZ4nwS5 tKpdTvRQQel5Grbx2WO3OIHxYyy_2wfkFtfIx2gfI. X-Sonic-MF: Original-Received: from sonic.gate.mail.ne1.yahoo.com by sonic306.consmr.mail.bf2.yahoo.com with HTTP; Thu, 10 Jun 2021 15:16:53 +0000 Original-Received: by kubenode531.mail-prod1.omega.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 3ab49cce6b764a65e2c281534d235488; Thu, 10 Jun 2021 15:16:50 +0000 (UTC) Content-Disposition: inline In-Reply-To: X-Mailer: WebService/1.1.18368 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.aol Received-SPF: pass client-ip=74.6.132.41; envelope-from=spacibba@aol.com; helo=sonic306-2.consmr.mail.bf2.yahoo.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, FREEMAIL_REPLY=1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 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:270647 Archived-At: Hi: Sorry to bother, but just to clarify the conclusions because I lost some messages: 1) What is finally the most desirable/long path/future feature? I mean,, finally what is preferred by the developers to support in the future? lsp or tree-sitter? 2) Alan, some time ago there was an issue related with the indentation that the proper fix substituted some regex with iterative solutions. In this case, it seems like that happens relatively often for complex solutions. Do you think that there is some missing/needed common use function/API/feature that we could implement in the C side to improve such iterative solutions? Maybe some vectorized "magic" functions that return pre-processed vectors or low level data structure and avoid lisp loops and object constructors and the lisp forth and back overheads and/or stressing the GC? 3) Eli/Stefan do you think are there any missing feature in the low level API that may simplify/improve integration with LSP or tree-sitters in the future? For things like font-lock/display engine I only consider to do as much as possible in the C side to improve performance. And reduce as much as possible interacting with the lisp side... Do you think that it may be possible? Best, Ergus. On Wed, Jun 09, 2021 at 09:03:03PM +0000, Alan Mackenzie wrote: >Hello, Eli. > >On Wed, Jun 09, 2021 at 21:36:44 +0300, Eli Zaretskii wrote: >> > Date: Wed, 9 Jun 2021 18:22:57 +0000 >> > Cc: Daniel Colascione , monnier@iro.umontreal.ca, >> > rudalics@gmx.at, emacs-devel@gnu.org, rms@gnu.org >> > From: Alan Mackenzie > >> > > I think we agree. Except that for me, it should also not try if it >> > > cannot do it quickly enough, not only reliably enough. > >> > Quickly and reliably enough are desirable things, but in competition >> > with eachother. Reliably enough is a lot easier to measure, quickly >> > enough depends on the machine, the degree of optimisation, and above >> > all, the user's expectations. > >> That's why we had (and still have) font-lock-maximum-decoration: so >> that users could control the tradeoff. Unfortunately, support for >> that variable is all but absent nowadays, because of the widespread >> mistaken assumption that font-lock is fast enough in all modes. > >That variable is still supported by CC Mode (with the exception of AWK >Mode, where it surely is not needed). > >Another possibility would be to replace accurate auxiliary functionality >with rough and ready facilities. In a scroll through xdisp.c, fontifying >as we go, the following three functions are taking around 30% of the >run-time: > >(i) c-bs-at-toplevel-p, which determines whether or not a brace is at the > top level. >(ii) c-determine-limit, c-determine-+ve-limit, which determine search > limits approximately ARG non-literal characters before or after point. > >By replacing these accurate functions with rough ones, the fontification >would be right most of the time, but a mess at other times (for example, >when there are big comments near point). (i) is more important for C++ >that C, but still makes a difference in C. > >If we were to try this, I think a user toggle would be needed. > >> > > > IMHO, we should rely on LSP to figure out what symbols are types, and if >> > > > a LSP isn't available, we shouldn't try to guess. > >> > "Shouldn't try to guess" means taking a great deal of >> > font-lock-type-faces out of CC Mode. I don't honestly think the end >> > result would be any better than what we have at the moment. > >> You don't think it will be better for what reason? > >Because many users will still want at least the basic types (int, double, >unsigned long, ....) fontified, leading to the very mess Daniel would >like to avoid. Declarations with basic types tend to be interleaved >with those using project defined types. > >> > > I was talking about what to do (or not to do) with our existing >> > > regexp- and "syntax"-based fontifications. I still remember the days >> > > when CC Mode handled that well enough without being a snail it >> > > frequently is now, and that was on a machine about 10 times slower >> > > than the one I use nowadays. > >> > Those old versions had masses of fontification bugs in them. > >> I don't remember bumping into those bugs. Or maybe they were not >> important enough to affect my UX. Slow redisplay, by contrast, hits >> me _every_day_, especially if I need to work with an unoptimized >> build. From where I stand, the balance between performance and >> accuracy have shifted to the worse, unfortunately. > >OK. My above suggestion might give ~50% increase in fontification speed. > >> > People wrote bug reports about them and they got fixed. Those fixes >> > frequently involved a loss of speed. :-( > >> If there's no way of fixing a bug without adversely affecting speed, >> we should add user options to control those "fixes", so that people >> could choose the balance that fits them. > >I think this would be a bad thing. There are no (or very few) similar >user options in CC Mode at the moment, and an option to fix or not fix a >bug seems a strange idea, and would make the code quite a bit more >complicated. > >> Sometimes Emacs could itself decide whether to invoke the "slow" code. >> For example, it makes no sense for users of C to be "punished" because >> we want more accurate fontification of C++ sources. > >There is some truth in this imputation, yes. > >> > There have also been several bug reports about unusual buffers >> > getting fontified at the speed of continental drift, and fixing those >> > has usually led to a little slowdown for ordinary buffers. I'm >> > thinking, for example, about bug #25706, where a 4 MB file took >> > nearly an hour to scroll through on my machine. After the fix, it >> > took around 86 seconds. > >> Once again, a pathological use case should not punish the usual ones; >> if the punishment is too harsh, there should be a way to disable the >> support for pathological cases for those who never hit them. > >The punishment is rarely too harsh for a single bug. But a lot of 2%s, >3%s or 5%s add up over time. If we were to outlaw a "3% fix", then many >bugs would just be unsolvable. > >> > > The C language didn't change too much since then, at least not the >> > > flavor I frequently edit. > >> > There are two places where CC Mode can be slow: font locking large areas >> > of text, and keeping up with somebody typing quickly. Which of these >> > bothers you the most? I have plans for speeding up one of these. > >> Both, I guess. Though the former is probably more prominent, since >> I'm not really such a fast typist, but I do happen to scroll through >> source quite a lot. > >Thanks. I'll try to come up with speedups in the coming weeks (and >months). > >Do you have fast-but-imprecise-scrolling enabled? That can reduce the >pain. > >-- >Alan Mackenzie (Nuremberg, Germany). >