Comment by rdimartino
16 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.
16 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.
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...
Legendary-tier yak shaving.
"I want to build an editor, but first I must solve rendering 2D graphics purely on the GPU, invent a parallelizable path solver, and code a human perception-based color value manipulation library."
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.
This is the path to Enlightenment (17).
2 replies →
Repo says "discontinued".
Yes, the xi repo is discontinued. They recommend the lapce editor as the spiritual successor:
https://github.com/lapce/lapce
7 replies →
Zed uses something similar to ropes as well:
https://zed.dev/blog/zed-decoded-rope-sumtree
Zed's Sum Tree is my favorite datastructure ever and is the future of database indexes.
I think this is what Guy Steele called a "monoid-cached tree":
https://www.youtube.com/watch?v=ftcIcn8AmSY
1 reply →
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:
https://www.cs.unm.edu/~crowley/papers/sds.pdf
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.
Gap buffers are the other classic option, and there are others too, e.g. piece tables.
Most certainly: gap buffers, piece tables, and line arrays are also popular choices.