unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Daniel Colascione <dancol@dancol.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: owinebar@gmail.com, bjorn.bidar@thaodan.de, philipk@posteo.net,
	emacs-devel@gnu.org, rms@gnu.org, manphiz@gmail.com
Subject: Re: Tree-sitter maturity
Date: Sat, 04 Jan 2025 14:30:30 -0500	[thread overview]
Message-ID: <FA85DC5C-E109-4437-99D7-946D64CB3271@dancol.org> (raw)
In-Reply-To: <86ldvqbe5w.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 5803 bytes --]

On January 4, 2025 1:57:15 PM EST, Eli Zaretskii <eliz@gnu.org> wrote:
>> From: Daniel Colascione <dancol@dancol.org>
>> Cc: Björn Bidar <bjorn.bidar@thaodan.de>,  Philip
>>  Kaludercic
>>  <philipk@posteo.net>,  emacs-devel <emacs-devel@gnu.org>,  Eli Zaretskii
>>  <eliz@gnu.org>,  Richard Stallman <rms@gnu.org>,  manphiz@gmail.com
>> Date: Sat, 04 Jan 2025 12:39:44 -0500
>> 
>> The point I keep trying to make is that you can't safely update a
>> foo-ts-mode tree sitter grammar without updating the corresponding
>> foo-ts-mode Lisp.  They're tightly coupled.  They're not separate
>> programs.  Same goes for nvim or whatever using TS grammars.
>> Even distribution packagers understand the futility of consolidating
>> dependencies with unstable interfaces.
>> 
>> When it comes to Emacs, we either 1) treat grammars as part of Emacs and
>> build them with Emacs, or 2) try to take a runtime dependency on
>> grammars that can be updated independently of Emacs.
>> Compatibility considerations mean #2 can't work, so we're left with
>> doing #1 somehow.
>
>This is true in principle, but in practice incompatible changes in
>grammar libraries are rare. 

They are not rare. There are several workarounds in Emacs Lisp for grammars with different versions with different vocabularies. c++-ts-mode recently stopped recognizing certain languages keywords ("virtual" I believe) when a grammar made an unannounced incompatible change, and such a workaround had to be added. These breakages will keep happening no matter how much one might wish grammar authors would consider stability guarantees.

> So in practice the same Lisp in
>foo-ts-mode can endure quite a few changes in the tree-sitter-foo
>grammar library

It's like cancer. Mutations can happen any time, and if you're unlucky, you'll get a harmful one without warning.

>> We're not talking about something like libpng, which
>> could in principle be updated without Emacs having to know about the
>> update
>
>Libraries like libpng also make incompatible ABI changes from time to
>time.  I agree that they do it less frequently than tree-sitter
>grammar libraries, but they still do.  And yet we don't distribute
>libpng with Emacs.

When a library likes libpng makes an incompatible change, it gets a new major version. Consider GTK3 and GTK4. Often, several versions get maintained simultaneously. Breakages are telegraphed in advance, and versions are usually introspectable. Grammars have none of this version discipline.

Besides: updating libpng usually gives you some value in exchange for the doing the update. A new version might fix a security problem, improve performance, or add a feature. These concerns aren't relevant for grammars: fixes and improvements usually involve changing the shape of the parse tree, and when you change the parse tree, you have to change the Lisp that consumed the parse tree to match.

I think we should vendor even libpng. Down with dynamic linking! Seriousy. But I can at least sort of see the logic in loose coupling to libpng, especially if we consider the constraints of the boxed software and floppies beforetime. But grammars? I don't think it makes sense to depend on them dynamically even under a framework in which it makes sense to unbundle libpng.

>> The simplest possible way to implement #1 is to just check the grammars
>> into the Emacs repository and build them with Emacs using the normal
>> build system.  Trying to check in hashes and download the hash-named
>> grammar versions during the build and *then* build them with Emacs ---
>> why bother?  Because of the hash-locking, a download-at-build-time
>> scheme doesn't actually add any flexibility relative to just checking in
>> the code.
>
>This eliminates the need to keep the grammar in our repository (or
>have it sub-moduled)

And it creates the need to do code distribution in a bespoke way. How is that a net win?


> to say nothing of the legal aspects that are
>better avoided.  

Nobody has been able to describe these legal aspects. Grammars are free software. GPL compatible, too. That means we can put them in Emacs. That's what software freedom means.

> Also don't forget that we have at least two active
>branches at any given time, and the number of grammar libraries we are
>interested in is more than a handful.  So adding them to our
>repository is a significant addition to the maintenance burden.

Vendoring reduces, not increases, the maintenance burden. If you're vendoring or hash locking, when you cut a branch, you cut the grammars at the same time. If you check in the grammars or their hashes, this snapshotting happens automatically. The alternative would be bizarre: we don't try to combine cc-langs.el from master with cc-engine.el from a release branch!


>Other than that, yes, hash-locking is not much more flexible than
>bundling.  I tried to tell that to people who think hash-locking is a
>solution, but they still insisted.



> And since they also volunteered to
>maintain the DB of hashes, I don't see why I should reject that.  But
>I don't think it's a good solution.

Then these people should use git submodules instead of inventing a random custom thing that we have to maintain that does the same thing as git submodules, except less flexibly, less familiar, and probably less robust.

>> It's just a more complicated and error-prone way of doing the
>> same thing as checking in the code.  The same goes for other forms of
>> downloading dependencies, e.g. via git submodules.
>
>The difference is that the RI changes.  And that's not something to
>ignore, from where I stand.

Huh? In what possible way could a bespoke downloader be a better engineering choice than submodules?

[-- Attachment #2: Type: text/html, Size: 6396 bytes --]

  reply	other threads:[~2025-01-04 19:30 UTC|newest]

Thread overview: 207+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-20 15:13 My resignation from Emacs development Alan Mackenzie
2024-11-20 15:34 ` Eli Zaretskii
2024-11-20 16:23 ` Christopher Dimech
2024-11-21  6:22   ` Gerd Möllmann
2024-11-21 10:05     ` Christopher Dimech
2024-11-21 11:23       ` Gerd Möllmann
2024-11-21 11:40         ` Eli Zaretskii
2024-11-21 10:29   ` Alan Mackenzie
2024-11-21 12:26     ` Christopher Dimech
2024-11-20 16:42 ` Alfred M. Szmidt
2024-11-20 17:04 ` tomas
2024-11-20 21:56 ` Dmitry Gutov
2024-11-21  2:28 ` Stefan Kangas
2024-11-21 12:34   ` Tree-sitter maturity (was: My resignation from Emacs development) Peter Oliver
2024-11-23 13:41     ` Stefan Kangas
2024-11-24  2:10     ` Tree-sitter maturity Björn Bidar
     [not found]     ` <67428b3d.c80a0220.2f3036.adbdSMTPIN_ADDED_BROKEN@mx.google.com>
2024-12-17 22:11       ` Yuan Fu
2024-12-18 13:34         ` Eli Zaretskii
2024-12-19  1:40           ` Yuan Fu
2024-12-19  8:17             ` Eli Zaretskii
2024-12-20  9:13             ` Björn Bidar
     [not found]             ` <6765355b.c80a0220.1a6b24.3117SMTPIN_ADDED_BROKEN@mx.google.com>
2024-12-20  9:29               ` Yuan Fu
2024-12-23  0:43                 ` Björn Bidar
     [not found]                 ` <6768b256.c80a0220.222b1b.64e6SMTPIN_ADDED_BROKEN@mx.google.com>
2024-12-24  1:20                   ` Yuan Fu
     [not found]                 ` <87frmfxm8y.fsf@>
2024-12-24  4:52                   ` Richard Stallman
2024-12-24 12:32                     ` Eli Zaretskii
2024-12-24 21:31                       ` Xiyue Deng
2024-12-26  4:30                         ` Richard Stallman
2024-12-27 10:54                           ` Philip Kaludercic
2024-12-27 12:40                             ` Eli Zaretskii
2024-12-27 13:46                               ` Daniel Colascione
2024-12-27 14:19                                 ` Philip Kaludercic
2024-12-27 14:24                                   ` Daniel Colascione
2024-12-27 14:57                                     ` Philip Kaludercic
2024-12-27 15:02                                       ` Philip Kaludercic
2024-12-29  4:19                                         ` Richard Stallman
2024-12-29  4:23                                           ` Daniel Colascione
2024-12-29  7:44                                             ` Eli Zaretskii
2024-12-29  8:01                                               ` Daniel Colascione
2024-12-29  8:41                                                 ` Eli Zaretskii
2024-12-29  8:59                                                   ` Yuan Fu
2024-12-29  9:14                                                     ` Daniel Colascione
2024-12-29  9:24                                                       ` Eli Zaretskii
2024-12-29 10:01                                                         ` Daniel Colascione
2024-12-29 13:35                                                           ` Eli Zaretskii
2024-12-29 20:12                                                             ` Daniel Colascione
2024-12-29 10:13                                                       ` tomas
2024-12-29 10:21                                                       ` Yuan Fu
2024-12-29 14:59                                                         ` Daniel Colascione
2024-12-29 14:14                                                       ` Dmitry Gutov
2024-12-29  7:26                                           ` Eli Zaretskii
     [not found]                                         ` <904957B9-55C1-42DF-BE6A-16986A4B539A@dancol.org>
     [not found]                                           ` <87r05o2eji.fsf@posteo.net>
     [not found]                                             ` <E2C32D27-EEC2-4DD2-B6F6-8827820B880E@dancol.org>
2024-12-31 16:47                                               ` Philip Kaludercic
2024-12-29 14:36                                     ` Lynn Winebarger
2024-12-29 20:36                                       ` Daniel Colascione
2024-12-29 23:29                                         ` Björn Bidar
     [not found]                                         ` <6771db94.050a0220.386e00.e451SMTPIN_ADDED_BROKEN@mx.google.com>
2024-12-30  0:30                                           ` Yuan Fu
2024-12-30  0:36                                             ` Daniel Colascione
2024-12-30  1:00                                               ` Yuan Fu
2024-12-31  9:48                                               ` Philip Kaludercic
2024-12-30  3:20                                             ` Lynn Winebarger
2024-12-31  3:22                                             ` Björn Bidar
2024-12-31 22:29                                         ` Lynn Winebarger
2025-01-01 20:23                                           ` Björn Bidar
     [not found]                                           ` <6775a459.170a0220.2f3d1e.1897SMTPIN_ADDED_BROKEN@mx.google.com>
2025-01-04 16:15                                             ` Lynn Winebarger
2025-01-04 17:39                                               ` Daniel Colascione
2025-01-04 18:57                                                 ` Eli Zaretskii
2025-01-04 19:30                                                   ` Daniel Colascione [this message]
2025-01-04 20:12                                                     ` Eli Zaretskii
2025-01-04 20:46                                                       ` Daniel Colascione
2025-01-04 20:57                                                         ` Eli Zaretskii
2025-01-04 21:18                                                           ` Daniel Colascione
2025-01-05  6:13                                                             ` Eli Zaretskii
2025-01-04 21:25                                                 ` Lynn Winebarger
2025-01-04 21:34                                                   ` Daniel Colascione
2025-01-04 23:21                                               ` Björn Bidar
2024-12-28 12:20                                   ` Peter Oliver
2024-12-28 12:23                                     ` Philip Kaludercic
2024-12-29 14:50                                     ` Björn Bidar
2024-12-27 14:59                                 ` Eli Zaretskii
2024-12-27 15:05                                   ` Daniel Colascione
2024-12-27 15:31                                     ` Eli Zaretskii
2024-12-27 15:37                                       ` Daniel Colascione
2024-12-28  1:08                                       ` Stefan Kangas
2024-12-29  4:19                                         ` Richard Stallman
2024-12-29  4:21                                           ` Daniel Colascione
2024-12-29  6:41                                             ` tomas
2024-12-29  6:43                                               ` Daniel Colascione
2024-12-29  6:54                                                 ` tomas
2024-12-29  7:05                                                   ` Daniel Colascione
2024-12-29  8:56                                                     ` tomas
2024-12-29 15:16                                                   ` Björn Bidar
2024-12-29 15:05                                     ` Björn Bidar
     [not found]                                     ` <87ed1qedhl.fsf@>
2024-12-29 15:21                                       ` Daniel Colascione
2024-12-29 16:02                                         ` Björn Bidar
     [not found]                                         ` <663726A2-141B-4B98-80FB-BD93E99AC122@dancol.org>
2024-12-29 19:06                                           ` Björn Bidar
     [not found]                                           ` <6771d84b.050a0220.250914.d0e0SMTPIN_ADDED_BROKEN@mx.google.com>
2024-12-30  0:56                                             ` Yuan Fu
2024-12-27 14:11                               ` Philip Kaludercic
2024-12-27 15:06                                 ` Eli Zaretskii
2024-12-31 13:47                                   ` Philip Kaludercic
2024-12-27 18:29                               ` Ihor Radchenko
2024-12-28  7:55                                 ` Eli Zaretskii
2024-12-28  8:11                                   ` Ihor Radchenko
2024-12-28  8:58                                     ` Eli Zaretskii
2024-12-29 15:09                           ` Björn Bidar
2024-12-26  4:32                       ` Richard Stallman
2024-12-26  7:12                         ` Eli Zaretskii
2024-12-29 14:35                         ` Björn Bidar
2024-12-19 12:23           ` Peter Oliver
2024-12-19 12:42             ` Eli Zaretskii
2024-12-19 13:15             ` Vincenzo Pupillo
2024-12-20  8:59           ` Björn Bidar
2024-11-21 13:01   ` My resignation from Emacs development Alan Mackenzie
2024-11-21 13:48     ` Eli Zaretskii
2024-11-21 14:29       ` Alfred M. Szmidt
2024-11-22  0:01         ` Po Lu
2024-11-22  7:03           ` Eli Zaretskii
2024-11-22  8:14             ` Robert Pluim
2024-11-22  8:32               ` Eli Zaretskii
2024-11-22 23:59               ` Po Lu
2024-11-23  6:39                 ` Eli Zaretskii
2024-11-21 16:29       ` Alan Mackenzie
2024-11-22  5:35     ` Adam Porter
2024-11-22  7:24       ` Madhu
2024-11-22  8:11         ` Eli Zaretskii
2024-11-22  9:26           ` Madhu
2024-11-22 12:07             ` Eli Zaretskii
2024-11-22 12:40           ` Stefan Kangas
2024-11-22 13:06           ` Alan Mackenzie
2024-11-22 13:39             ` Stefan Kangas
2024-11-22 14:25             ` Eli Zaretskii
2024-11-25  4:28             ` Richard Stallman
2024-11-26 17:37               ` Alan Mackenzie
2024-12-13  4:35                 ` Richard Stallman
2024-12-15 15:27                   ` Alan Mackenzie
2024-12-15 15:48                     ` Eli Zaretskii
2024-12-15 20:43                       ` Alan Mackenzie
2024-12-19  4:22                     ` Richard Stallman
2024-12-19  8:26                       ` Eli Zaretskii
2024-11-23 22:18           ` Andrea Corallo
2024-11-22 10:57       ` Alan Mackenzie
2024-11-22 23:19         ` Adam Porter
2024-11-26 19:01       ` Daniel Radetsky
2024-11-26 19:51         ` Christopher Dimech
2024-11-27  2:18           ` Adam Porter
2024-11-27  9:36             ` Daniel Radetsky
2024-11-27  9:59             ` Christopher Dimech
2024-11-30  3:52             ` Richard Stallman
2024-11-30  7:53               ` Eli Zaretskii
2024-11-30 16:22                 ` Discuss new features/enhancements or large changes for users in emacs-devel [was: My resignation from Emacs development] Drew Adams
2024-11-30 16:56                   ` Eli Zaretskii
2024-11-30 21:06                     ` [External] : " Drew Adams
2024-12-01  6:00                       ` Eli Zaretskii
2024-12-03  7:26                 ` My resignation from Emacs development Richard Stallman
2024-12-03 13:33                   ` Eli Zaretskii
2024-11-30 16:21               ` Discuss new features/enhancements or large changes for users in emacs-devel [was My resignation from Emacs development] Drew Adams
2024-11-30 17:05                 ` Eli Zaretskii
2024-11-30 21:09                   ` [External] : " Drew Adams
2024-12-01  6:12                     ` Eli Zaretskii
2024-12-01 19:23                       ` Drew Adams
2024-12-03  7:25                   ` Richard Stallman
2024-12-03 13:32                     ` Eli Zaretskii
2024-12-06  4:48                       ` Richard Stallman
2024-12-02  4:09                 ` Richard Stallman
2024-12-02 13:04                   ` Discuss new features/enhancements or large changes for users in emacs-devel Eli Zaretskii
2024-12-02 15:32                     ` [External] : " Drew Adams
2024-12-05  5:08                     ` Richard Stallman
2024-12-05  6:33                       ` Eli Zaretskii
2024-12-02 15:29                   ` [External] : Re: Discuss new features/enhancements or large changes for users in emacs-devel [was My resignation from Emacs development] Drew Adams
2024-11-27  2:06         ` My resignation from Emacs development Adam Porter
2024-11-27  9:17           ` Daniel Radetsky
2024-11-22 15:36     ` Stefan Kangas
2024-11-22 17:48       ` Alan Mackenzie
2024-11-23 23:43     ` Stefan Monnier via Emacs development discussions.
2024-11-23  6:10   ` Richard Stallman
2024-11-23  7:48     ` Eli Zaretskii
2024-11-23 11:06       ` Christopher Dimech
2024-11-23 11:54         ` Eli Zaretskii
2024-11-23 12:48           ` Christopher Dimech
2024-11-23 23:59       ` Adam Porter
2024-12-01  3:50         ` Sean Whitton
2024-12-01  6:19           ` tomas
2024-11-24 18:12     ` Suhail Singh
2024-11-26  4:56       ` Richard Stallman
2024-11-26  7:38         ` Suhail Singh
2024-11-21  5:59 ` Gerd Möllmann
2024-11-22 11:36   ` Alan Mackenzie
2024-11-22 11:52     ` Eli Zaretskii
2024-11-23 10:36       ` Alan Mackenzie
2024-11-23 11:31         ` Eli Zaretskii
2024-11-21 13:39 ` Andrea Corallo
2024-11-21 19:01   ` Alfred M. Szmidt
2024-11-21 19:19     ` Christopher Dimech
2024-11-21 19:47     ` Eli Zaretskii
2024-11-21 19:40 ` Jim Porter
2024-11-24  4:35   ` Richard Stallman
2024-11-21 23:57 ` Po Lu
2024-11-22 17:26 ` On committing significant and/or controversial changes (was: My resignation from Emacs development) Ihor Radchenko
2024-11-22 17:47   ` Ship Mints
2024-11-22 19:04     ` Eli Zaretskii
2024-11-24  2:35       ` On committing significant and/or controversial changes Björn Bidar
2024-11-24  4:41         ` Adam Porter
2024-11-30  2:16           ` Björn Bidar
     [not found]       ` <87ttbx73zu.fsf@>
2024-11-24  8:26         ` Eli Zaretskii
2024-11-22 19:01   ` Eli Zaretskii
2024-11-23  6:10 ` My resignation from Emacs development Richard Stallman
2024-11-23  8:50   ` Eli Zaretskii
2024-11-23  6:10 ` Richard Stallman

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=FA85DC5C-E109-4437-99D7-946D64CB3271@dancol.org \
    --to=dancol@dancol.org \
    --cc=bjorn.bidar@thaodan.de \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=manphiz@gmail.com \
    --cc=owinebar@gmail.com \
    --cc=philipk@posteo.net \
    --cc=rms@gnu.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).