unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: Gap buffer problem?
@ 2024-12-12 23:40 arthur miller
  2024-12-13  3:19 ` Gerd Möllmann
  0 siblings, 1 reply; 35+ messages in thread
From: arthur miller @ 2024-12-12 23:40 UTC (permalink / raw)
  To: gerd.moellmann@gmail.com; +Cc: emacs-devel@gnu.org

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

>>> From: Gerd Möllmann <gerd.moellmann@gmail.com>
>>> Cc: emacs-devel@gnu.org,  ofv@wanadoo.es,  pipcet@protonmail.com
>>> Date: Wed, 11 Dec 2024 16:51:56 +0100
>>>
>>> Eli Zaretskii <eliz@gnu.org> writes:
>>>
>>> > Unless you have a huge (and I mean a HUGE) buffer, and some Lisp that
>>> > moves point, then inserts a small number of characters, then moves
>>> > point far away and again inserts a small number of characters, etc.,
>>> > I'd be very surprised if the gap buffer caused significant performance
>>> > problems on a modern CPU.
>>> >
>>> > Can you profile that case and post the expanded profile?  I'm always
>>> > happy to be wrong about performance bottlenecks, and profiles are good
>>> > at proving me wrong.
>>>
>>> Maybe I'll try to investigate that further at some point. Such things
>>> always tend to be so time consuming...
>>
>> I meant profiling with "M-x profile-start", then run your slow-down
>> recipe.  That should be easy and should not consume any significant
>> time.  Analyzing the profile could, but producing it shouldn't.
>
>Plus making it reproducible, if it is.

There is a paper by R. Strandh & others from they work on Climacs.

They have, by now a 20 old year Flexichain implements a circular gap
buffer with the explicit goal to workaround that case. At the same time
it also turns gap buffer into a flexible array usable for other use-cases
like qeues and stacks.

However, they have also gone away from the gap buffer, to something they
call "Cluffer", and which is a strategy where they use a double
linked list of lines. The "open" line is a gap buffer. As they say
in the introduction, the similiar strategy was used in Multics Emacs.
The idea is to allow for incremental editing, a lá
tree sitter I guess, and it is also suitable for multiple cursors. They
also say that for modern hardware the additional memory cost of double
linked lists is not prohibitive.

For those interested relevant papers and sources are here:

https://flexichain.common-lisp.dev/download/StrandhVilleneuveMoore.pdf
https://www.european-lisp-workshop.org/archives/2004/slides/Strandh-slides.pdf
https://github.com/robert-strandh/Flexichain

http://metamodular.com/cluffer.pdf
https://hal.science/hal-01887230v1/file/5-incremental-parsing.pdf
https://research.gold.ac.uk/id/eprint/2351/1/climacssyntax.pdf
https://github.com/robert-strandh/Cluffer

https://github.com/scymtym/text.editing <-- a text editor sans the
application based on the Cluffer

https://github.com/robert-strandh/Second-Climacs <-- text editor
application based on the above text.editing and Cluffer

There is also Lem which uses a similar strategy for its text representation
(if I am not misstaken, long time ago I looked at their code):

https://github.com/lem-project/lem
[https://opengraph.githubassets.com/936483c1586b682884e2dfee10ced041f6306d29afd3df15a26830cc9eb47f65/lem-project/lem]<https://github.com/lem-project/lem>
GitHub
 - lem-project/lem: Common Lisp editor/IDE with high expansibility<https://github.com/lem-project/lem>
Common
 Lisp editor/IDE with high expansibility. Contribute to lem-project/lem development by creating an account on GitHub.
github.com


Don't know if it is of use for you or not, but perhaps there is some
inspiration there. Haven't seen those papers mentioned anywhere
in this discussion, so thought they might be of interest to some of you.

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

^ permalink raw reply	[flat|nested] 35+ messages in thread
[parent not found: <mailman.39.1723910423.12184.emacs-devel@gnu.org>]

end of thread, other threads:[~2024-12-13  3:19 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-12 23:40 Gap buffer problem? arthur miller
2024-12-13  3:19 ` Gerd Möllmann
     [not found] <mailman.39.1723910423.12184.emacs-devel@gnu.org>
2024-12-08 16:49 ` pdumper on Solaris 10 Eli Zaretskii
2024-12-08 17:37   ` Pip Cet via Emacs development discussions.
2024-12-08 18:41     ` Eli Zaretskii
2024-12-09  4:59       ` Stefan Kangas
2024-12-09 14:39         ` Eli Zaretskii
2024-12-10  0:09           ` Stefan Kangas
2024-12-10 12:59             ` Eli Zaretskii
2024-12-10 13:39               ` Óscar Fuentes
2024-12-10 15:38                 ` Pip Cet via Emacs development discussions.
2024-12-11  5:27                   ` Gap buffer problem? Gerd Möllmann
2024-12-11  8:50                     ` Pip Cet via Emacs development discussions.
2024-12-11  9:35                       ` Gerd Möllmann
2024-12-11 11:50                         ` Pip Cet via Emacs development discussions.
2024-12-11 13:22                           ` Gerd Möllmann
2024-12-11 14:53                             ` Pip Cet via Emacs development discussions.
2024-12-11 15:33                               ` Gerd Möllmann
2024-12-11 16:58                                 ` Eli Zaretskii
2024-12-11 17:13                                   ` Gerd Möllmann
2024-12-11 17:45                                     ` Robert Pluim
2024-12-11 18:11                                       ` Gerd Möllmann
2024-12-11 19:08                                       ` Eli Zaretskii
2024-12-11 17:41                                   ` Pip Cet via Emacs development discussions.
2024-12-11 19:04                                     ` Eli Zaretskii
2024-12-11 19:54                                       ` Pip Cet via Emacs development discussions.
2024-12-11 20:26                                         ` Eli Zaretskii
2024-12-11 22:07                                         ` Dmitry Gutov
2024-12-11 19:09                                     ` Gerd Möllmann
2024-12-12  8:55                                       ` Robert Pluim
2024-12-12 10:14                                         ` Gerd Möllmann
2024-12-11 12:27                         ` Pip Cet via Emacs development discussions.
2024-12-11 13:27                           ` Gerd Möllmann
2024-12-11 15:06                             ` Marcus Harnisch
2024-12-11 22:11                               ` Dmitry Gutov
2024-12-12  3:49                                 ` Gerd Möllmann
2024-12-12 19:07                                   ` Dmitry Gutov
2024-12-12 19:30                                     ` Eli Zaretskii
2024-12-12 19:40                                     ` Gerd Möllmann
2024-12-12  6:01                                 ` Eli Zaretskii
2024-12-11 14:22                     ` Eli Zaretskii
2024-12-11 15:51                       ` Gerd Möllmann
2024-12-11 17:06                         ` Eli Zaretskii
2024-12-11 17:15                           ` Gerd Möllmann

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).