2 个版本 (1 个稳定版本)

1.0.0 2022 年 8 月 25 日
0.1.0 2021 年 7 月 26 日

#15 in #text-editing

ISC 许可协议

655KB
11K SLoC

钻石类型

此仓库包含一个高性能的 Rust CRDT 用于文本编辑。这是一个特殊的数据类型,支持在 P2P 网络中由多个用户并发编辑列表或字符串(文本文档),而无需中央服务器。

此版本的钻石类型仅支持纯文本编辑。目前正在努力添加对其他 JSON 风格数据类型的支持。有关详细信息,请参阅 more_types 分支。

此项目最初是一个原型,用于查看如何快速优化 CRDT。答案是真的很快 - 比其他类似库快。此库目前正在扩展成为一个快速且功能丰富的 CRDT。

有关此库如何工作的更多详细信息,请参阅

此外,此库还设计为与位置更新兼容。这允许简单的对等体通过操作转换与数据结构交互。

内部结构

每个客户端/设备都有一个唯一的 ID。每个设备上键入或删除的每个字符都分配一个递增的序列号(从 0 开始)。因此,文档中的每个字符都可以通过 (客户端 ID, 序列号) 元组唯一标识。这使得文档中的任何位置都可以唯一命名。

内部数据结构旨在优化两个主要操作

  • 文本编辑到 CRDT 操作(例如,“用户 A 在位置 100 插入”->“用户 A seq 1000 在 (B, 50) 插入”)
  • CRDT 操作到文本编辑(“用户 A seq 1000 在 (B, 50) 插入”->“在文档位置 100 插入”)

有关内部数据结构的更多详细信息,请参阅 INTERNALS.md

许可协议

此代码根据 ISC 许可协议发布。

致谢

此工作得到了 Invisible College 的资助。

依赖项

~2.5MB
~52K SLoC