Comment by rdimartino
Comment by rdimartino 3 days ago
I hadn't heard of rope data structures until I read about the xi editor (also written in Rust) a few years ago, but it looks like that's been discontinued.
Comment by rdimartino 3 days ago
I hadn't heard of rope data structures until I read about the xi editor (also written in Rust) a few years ago, but it looks like that's been discontinued.
You have no idea.
I think we're at five or six levels of yaks by now.
(xi -> xilem -> masonry -> vello -> peniko -> color)
It's a lot of fun to follow, especially as its so different than my developmental expertise.
You can see the current projects (13 active) on https://linebender.org , and several members post interesting checkins in https://xi.zulipchat.com/
> first I must solve rendering 2D graphics purely on the GPU
To be fair, the original author of Xi ('raphlinus) has been working on GPU-side 2D rendering much longer than on Xi.
Yes, the xi repo is discontinued. They recommend the lapce editor as the spiritual successor:
I'd also recommend Helix [0] (which also uses the rope data structure [1]), that's a more widely used editor also written in Rust.
[0] https://github.com/helix-editor/helix
[1] https://github.com/helix-editor/helix/blob/master/docs/archi...
Thanks for posting. I discovered floem https://github.com/lapce/floem I’ve been looking for something like it
Zed uses something similar to ropes as well:
I think this is what Guy Steele called a "monoid-cached tree":
Zed seems to be a gui-oriented editor here: https://zed.dev/
You still need a backing data structure that holds the contents of your editor, and that's where you'd use a rope.
Is it even possible to write any text editor without some form of rope data structure?
Here's a paper reviewing the various choices, that is often mentioned in discussions around data structures for text editors:
VSCode uses a piece table (https://code.visualstudio.com/blogs/2018/03/23/text-buffer-r...).
MS Word used piece table, which led to the "fast save" feature - which saved only the newer pieces.
Most certainly: gap buffers, piece tables, and line arrays are also popular choices.
The authors of Xi are currently working on Xilem, an experimental reactive UI framework for Rust: https://github.com/linebender/xilem
In the announcement post, they mention that work on Xi is considered "on hold" rather than strictly discontinued: https://raphlinus.github.io/rust/gui/2022/05/07/ui-architect...