From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Daniel Colascione Newsgroups: gmane.emacs.devel Subject: Re: cc-mode fontification feels random Date: Fri, 04 Jun 2021 12:16:47 -0700 Message-ID: <179d874d918.2816.cc5b3318d7e9908e2c46732289705cb0@dancol.org> References: <831r9iw473.fsf@gnu.org> <2d6d1cb0-2e8f-ceea-cb83-3bb840b65115@dancol.org> <83zgw6udxt.fsf@gnu.org> <87czt1zzns.fsf@gmail.com> <371647e9-9508-ae98-26f0-3649d7ba114e@dancol.org> <83o8clla1u.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; format=flowed; charset="us-ascii" Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="40444"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: AquaMail/1.29.2-1810 (build: 102900008) Cc: emacs-devel@gnu.org, monnier@iro.umontreal.ca, joaotavora@gmail.com To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Jun 04 21:19:40 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 1lpFM0-000A94-Vg for ged-emacs-devel@m.gmane-mx.org; Fri, 04 Jun 2021 21:19:38 +0200 Original-Received: from localhost ([::1]:39644 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lpFLz-00049u-TE for ged-emacs-devel@m.gmane-mx.org; Fri, 04 Jun 2021 15:19:36 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:54364) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lpFJd-0001yv-Kf for emacs-devel@gnu.org; Fri, 04 Jun 2021 15:17:10 -0400 Original-Received: from dancol.org ([96.126.100.184]:58024) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lpFJa-0003ID-8y; Fri, 04 Jun 2021 15:17:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=dancol.org; s=x; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Subject: References:In-Reply-To:Message-ID:Date:CC:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=Ibcv07GQZtW7bOt+tO/r52DH5ZN8qSuLO8G/VjyvUL0=; b=LcLXvHZv/tCHcBs/1ckO8O+JLM DpkisW7usWnHbIyNy6uA1NEbPxMfdfW/02VZWojdCZ8+J63lyHWj7OMV4D3fXgl2/a+co1iUM82Ao wDXarqCMFUT1OOa2uT3jLslEA8MF4AvjyV8gKMRziBvOs3E84X+/ijcsrwf5s76K83JWVSFwVNxG7 VZDQb+2/SKhlvcjI/H+NQBRGuMN4e0srNRuZQeFcy2O19MdTeiVfU2UVg6fzwq38b3rzklzktUB4n Ty+r3Y5JussX1VNWCEuIR8oYf8fbKVyoOaPsc3TcgWruB/MpRpx1o5RUqwEcQnErix6W9rB5OHQ/g BkSeSYMQ==; Original-Received: from 248.sub-174-204-83.myvzw.com ([174.204.83.248]:7405 helo=[100.107.68.200]) by dancol.org with esmtpsa (TLS1.2:ECDHE_RSA_CHACHA20_POLY1305:256) (Exim 4.89) (envelope-from ) id 1lpFJW-0004lR-CK; Fri, 04 Jun 2021 12:17:02 -0700 In-Reply-To: <83o8clla1u.fsf@gnu.org> Received-SPF: pass client-ip=96.126.100.184; envelope-from=dancol@dancol.org; helo=dancol.org X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.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, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham 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:270401 Archived-At: On June 4, 2021 12:11:35 PM Eli Zaretskii wrote: >> Cc: Eli Zaretskii , emacs-devel@gnu.org >> From: Daniel Colascione >> Date: Fri, 4 Jun 2021 11:36:05 -0700 >> >> On 6/4/21 11:25 AM, Stefan Monnier wrote: >>>> But I don't understand what's stopping these tree-sitter C modules (like >>>> [1] and [2]) to have access to the buffer's contents directly and have >>>> the best of both worlds. >>> I think it's a direct result of them being "modules": the API doesn't >>> let modules access a buffer's content directly, so it's more efficient >>> copy the content via `buffer-substring` and toss it on the other side >>> than having to use something like `char-after`. >> >> The problem is more fundamental than that. Internally, each buffer has a >> gap. External tools that operate on char arrays don't expect a gap. >> (They also don't expect to operate on Emacs internal coding, but that's >> another issue.) If we *did* grant direct buffer access via modules, we'd >> at least have to memcpy half (on average) the buffer to close the gap, >> then memcpy half the buffer (on average) to open the gap again when we >> began editing. > > I see no reason for copying, nor for making these tools aware of the > gap. At least tree-sitter allows the application to provide a > function through which tree-sitter will access the edited text. It > should be simple to write such a function, because on the C level we > always know where the gap is. So you propose providing a "char get_buffer_char(size_t POS)" function? That *is* copying If you run that over all values of POS, all you've done is make a slow and shitty memcpy. So you want to amortize the call over several characters? Okay. Now you've reinvented buffer-substring. > > >> Besides, memory copies are really, really, ridiculously fast. My system >> can cat from /dev/zero to /dev/null at ~18GB/sec. Copying a buffer's >> contents so we can give it to tree-sitter should be no issue at all. > > Why copy at all? all these libraries need is access to buffer text. > We can just give it to them. Because any kind of "access" to the buffer that doesn't expose the gap is going to be a copy anyway.