From: Lynn Winebarger <owinebar@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: luangruo@yahoo.com, acm@muc.de, emacs-devel@gnu.org,
monnier@iro.umontreal.ca, Yuan Fu <casouri@gmail.com>
Subject: Re: Why tree-sitter instead of Semantic? (was Re: CC Mode with font-lock-maximum-decoration 2)
Date: Fri, 12 Aug 2022 08:37:25 -0400 [thread overview]
Message-ID: <CAM=F=bDgW-m2_p7FZArzoiK9=dzsv4=QsOc8QkmRfmiOhLbcWg@mail.gmail.com> (raw)
In-Reply-To: <838rnws5c7.fsf@gnu.org>
CC'ing Yuan Fu on Po Lu's recommendation earlier in the thread.
On Wed, Aug 10, 2022 at 7:31 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Lynn Winebarger <owinebar@gmail.com>
> > Date: Wed, 10 Aug 2022 06:05:56 -0400
> > Cc: Po Lu <luangruo@yahoo.com>, Alan Mackenzie <acm@muc.de>, emacs-devel <emacs-devel@gnu.org>,
> > Stefan Monnier <monnier@iro.umontreal.ca>
> >
> > It is simply too slow to be a modern solution for these features.
> >
> > Can you (or anyone on the list) provide a more detailed analysis? Is the slowness inherent in the algorithm
> > design, the implementation method (eg table driven parsing designed before the availability of the native
> > compiler), the basic synchronous nature of ELisp, the impact on garbage collection, etc?
>
> I don't have this information. Maybe someone else does. But in
> general, it is a very small wonder that a parser written in optimized
> C is much faster than anything written in Emacs Lisp, given that Lisp
> is an interpreted language that has no special support for writing
> parsers.
That can be cured over time, now that the bulk of the core of emacs
uses lexical scoping. With proper tail recursion, ELisp should be
able to produce lexers and parsers roughly as efficient as C code, if
not more efficient (depending on if you allow use of "computed goto"
in the C code for the lexers and parsers). That does require changes
to the byte code VM, but it's doable.
>
> > If the analyzer were run in a second emacs process using mmaped files to share buffers being analyzed,
> > then communicating the results either via LSP or some other channel, would that make it usable?
>
> I doubt that. In particular, LSP-style communications are a cause of
> slower operation, not faster operation. Various LSP-based packages
> tolerate that because the server can do stuff clients cannot easily do
> without investing a lot of language-specific efforts and expertise.
That's more along the lines of what I expected (and Tassilo's
response) - the overhead of creating and maintaining these language
analyses in Emacs. But for a DSL, I'd personally prefer to be able to
put something together "quickly" in emacs to get a working IDE.
> > I've definitely noticed more pausing with Semantic turned on, but it's not unusable so far (but I'm also not
> > looking at any C++ source, just ELisp and C, maybe some shell scripts, info files and Markdown).
>
> I didn't say Semantic is unusable. It certainly is usable.
The pausing was in fact due to a different library - tabbar-ruler -
that had for some reason made frequently refreshing the tab list call
eval on a thunk instead of just calling the thunk, generating huge
amounts of garbage from "eval". Since I corrected that, I haven't
noticed much pausing. A better fix would make it stop refreshing tabs
that aren't even displayed when Semantic takes over the header line,
but that would require more effort.
Lynn
next prev parent reply other threads:[~2022-08-12 12:37 UTC|newest]
Thread overview: 136+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-06 20:13 Major modes using `widen' is a good, even essential, programming practice Alan Mackenzie
2022-08-06 21:05 ` Stefan Monnier
2022-08-07 6:03 ` Eli Zaretskii
2022-08-07 13:31 ` Gregory Heytings
2022-08-07 14:13 ` Alan Mackenzie
2022-08-07 14:20 ` Eli Zaretskii
2022-08-07 14:59 ` Alan Mackenzie
2022-08-07 15:13 ` Eli Zaretskii
2022-08-07 17:01 ` Alan Mackenzie
2022-08-07 17:23 ` Eli Zaretskii
2022-08-07 17:53 ` Dmitry Gutov
2022-08-07 18:00 ` Eli Zaretskii
2022-08-07 18:05 ` Dmitry Gutov
2022-08-07 18:37 ` Eli Zaretskii
2022-08-07 23:02 ` Stefan Monnier
2022-08-07 18:49 ` Óscar Fuentes
2022-08-07 18:59 ` Eli Zaretskii
2022-08-07 18:56 ` Lars Ingebrigtsen
2022-08-07 19:20 ` Alan Mackenzie
2022-08-07 19:26 ` Dmitry Gutov
2022-08-08 2:36 ` Eli Zaretskii
2022-08-08 9:58 ` Alan Mackenzie
2022-08-08 11:39 ` Eli Zaretskii
2022-08-08 15:05 ` CC Mode with font-lock-maximum-decoration 2 [Was Major modes using `widen' is a good, even essential, programming practice.] Alan Mackenzie
2022-08-08 15:51 ` Gregory Heytings
2022-08-08 16:05 ` CC Mode with font-lock-maximum-decoration 2 Alan Mackenzie
2022-08-08 16:50 ` Gregory Heytings
2022-08-09 19:49 ` Gregory Heytings
2022-08-08 17:15 ` CC Mode with font-lock-maximum-decoration 2 [Was Major modes using `widen' is a good, even essential, programming practice.] Eli Zaretskii
2022-08-08 17:41 ` Eli Zaretskii
2022-08-08 18:41 ` CC Mode with font-lock-maximum-decoration 2 Alan Mackenzie
2022-08-08 18:51 ` Eli Zaretskii
2022-08-08 19:09 ` Alan Mackenzie
2022-08-09 2:24 ` Eli Zaretskii
2022-08-09 8:00 ` Alan Mackenzie
2022-08-09 11:07 ` Eli Zaretskii
2022-08-09 11:24 ` Alan Mackenzie
2022-08-09 11:57 ` Eli Zaretskii
2022-08-09 16:36 ` Alan Mackenzie
2022-08-09 16:59 ` Eli Zaretskii
2022-08-09 17:43 ` Alan Mackenzie
2022-08-09 17:55 ` Eli Zaretskii
2022-08-10 0:22 ` Why tree-sitter instead of Semantic? (was Re: CC Mode with font-lock-maximum-decoration 2) Lynn Winebarger
2022-08-10 2:14 ` Po Lu
2022-08-10 2:42 ` Eli Zaretskii
2022-08-10 10:05 ` Lynn Winebarger
2022-08-10 10:49 ` Po Lu
2022-08-10 11:31 ` Eli Zaretskii
2022-08-12 12:37 ` Lynn Winebarger [this message]
2022-08-12 12:50 ` Eli Zaretskii
2022-08-12 21:50 ` Ideal performance of ELisp (was: Why tree-sitter instead of Semantic? (was Re: CC Mode with font-lock-maximum-decoration 2)) Stefan Monnier
2022-08-12 23:26 ` Lynn Winebarger
2022-08-13 2:11 ` Ideal performance of ELisp Stefan Monnier
2022-08-13 10:51 ` Lynn Winebarger
2022-08-13 11:13 ` Lynn Winebarger
2022-08-13 14:07 ` Stefan Monnier
2022-08-13 14:56 ` Lynn Winebarger
2022-08-16 16:46 ` Lynn Winebarger
2022-08-16 17:22 ` Stefan Monnier
2022-08-17 12:41 ` Lynn Winebarger
2022-08-17 14:04 ` Stefan Monnier
2022-08-17 14:19 ` Mattias Engdegård
2022-08-17 22:18 ` Stefan Monnier
2022-08-17 14:25 ` Lynn Winebarger
2022-08-13 4:39 ` Ideal performance of ELisp (was: Why tree-sitter instead of Semantic? (was Re: CC Mode with font-lock-maximum-decoration 2)) Ihor Radchenko
2022-08-13 7:45 ` Ideal performance of ELisp Philip Kaludercic
2022-08-13 11:58 ` Ihor Radchenko
2022-08-13 14:15 ` Stefan Monnier
2022-08-14 9:25 ` Andrea Corallo
2022-08-14 9:34 ` Ihor Radchenko
2022-08-14 13:01 ` Eli Zaretskii
2022-08-16 19:23 ` Andrea Corallo
2022-08-14 13:01 ` Stefan Monnier
2022-08-16 8:59 ` Andrea Corallo
2022-08-16 9:50 ` Ihor Radchenko
2022-08-16 18:21 ` Andrea Corallo
2022-08-17 9:48 ` Ihor Radchenko
2022-08-17 12:02 ` Eli Zaretskii
2022-08-16 15:06 ` Lynn Winebarger
2022-08-16 18:24 ` Andrea Corallo
2022-08-17 13:04 ` Lynn Winebarger
2022-08-17 14:18 ` Andrea Corallo
2022-08-18 12:17 ` Lynn Winebarger
2022-08-12 16:00 ` Why tree-sitter instead of Semantic? (was Re: CC Mode with font-lock-maximum-decoration 2) Akib Azmain Turja
2022-08-12 19:06 ` tomas
2022-08-13 4:41 ` Akib Azmain Turja
2022-08-13 5:14 ` tomas
2022-08-13 11:57 ` Lynn Winebarger
2022-08-13 14:28 ` Akib Azmain Turja
2022-08-14 19:24 ` Eric Ludlam
2022-08-16 10:42 ` Lynn Winebarger
2022-08-17 1:56 ` Eric Ludlam
2022-08-10 17:03 ` Tassilo Horn
2022-08-13 14:40 ` Jostein Kjønigsen
2022-08-14 1:23 ` Po Lu
2022-08-16 9:06 ` Lynn Winebarger
2022-08-16 11:05 ` Po Lu
2022-08-16 11:41 ` Eli Zaretskii
2022-08-16 16:33 ` Lynn Winebarger
2022-08-16 17:19 ` Stefan Monnier
2022-08-16 17:40 ` Lynn Winebarger
2022-08-17 1:41 ` Eric Ludlam
2022-08-18 12:34 ` Lynn Winebarger
2022-08-20 13:15 ` Eric Ludlam
2022-08-08 18:20 ` CC Mode with font-lock-maximum-decoration 2 Alan Mackenzie
2022-08-07 20:17 ` Major modes using `widen' is a good, even essential, programming practice Gregory Heytings
2022-08-07 20:46 ` Alan Mackenzie
2022-08-07 20:53 ` Gregory Heytings
2022-08-08 2:37 ` Eli Zaretskii
2022-08-08 10:33 ` Alan Mackenzie
2022-08-08 11:41 ` Eli Zaretskii
2022-08-07 23:21 ` Stefan Monnier
2022-08-08 2:29 ` Eli Zaretskii
2022-08-08 9:25 ` Stefan Monnier
2022-08-08 11:16 ` Lynn Winebarger
2022-08-08 11:47 ` Eli Zaretskii
2022-08-08 14:24 ` Lynn Winebarger
2022-08-08 11:30 ` Eli Zaretskii
2022-08-08 12:05 ` Stefan Monnier
2022-08-08 12:40 ` Eli Zaretskii
2022-08-08 17:22 ` Stefan Monnier
2022-08-08 17:34 ` Eli Zaretskii
2022-08-08 21:16 ` Dmitry Gutov
2022-08-09 11:30 ` Eli Zaretskii
2022-08-09 14:38 ` Dmitry Gutov
2022-08-09 16:12 ` Eli Zaretskii
2022-08-09 16:52 ` Dmitry Gutov
2022-08-09 17:05 ` Eli Zaretskii
2022-08-09 18:52 ` Dmitry Gutov
2022-08-09 19:46 ` Gregory Heytings
2022-08-08 10:38 ` Alan Mackenzie
2022-08-08 11:49 ` Eli Zaretskii
2022-08-08 10:41 ` Gregory Heytings
2022-08-07 17:57 ` Dmitry Gutov
2022-08-22 11:26 ` Alan Mackenzie
2022-08-22 23:59 ` Dmitry Gutov
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='CAM=F=bDgW-m2_p7FZArzoiK9=dzsv4=QsOc8QkmRfmiOhLbcWg@mail.gmail.com' \
--to=owinebar@gmail.com \
--cc=acm@muc.de \
--cc=casouri@gmail.com \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=luangruo@yahoo.com \
--cc=monnier@iro.umontreal.ca \
/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).