Skip to content

Commit

Permalink
feat(docs): 详细说明操作转换(OT)机制
Browse files Browse the repository at this point in the history
添加对操作转换(OT)机制的详细描述,包括其基本构件、操作组件以及变换函数的作用。
  • Loading branch information
phodal committed Jul 19, 2024
1 parent 77476b9 commit 853e4cf
Showing 1 changed file with 20 additions and 1 deletion.
21 changes: 20 additions & 1 deletion src/aise-fix-issue.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
### 方法论

1. **数据收集**
- 收集表示代码更改的操作转换(OTs)。
- 收集表示代码更改的操作转换(OTs, Operational Transformations )。
- 记录会话事件,包括 LSP 诊断、CodeMirror 操作、包安装、代码执行和 shell 命令。

2. **数据重建**
Expand All @@ -32,6 +32,25 @@
- 验证生成的差异的正确性和可适用性。
- 使用正则表达式和 LLM 过滤出不正确或格式错误的差异。

#### Operational Transformation

Operational Transformation (OT) 是一种乐观并发控制机制,旨在解决多个用户同时编辑共享文档时的冲突问题。它允许多个编辑器同时对同一文档的相同部分进行修改,并通过一套变换机制来解决这些冲突,从而避免用户干预或锁定操作。

OT 的基本构件是操作 (operations)。操作是对文档执行的动作,例如插入字符、删除字符、打开或关闭 XML 元素、修改注解等。每个操作由一系列操作组件 (operation components) 组成,这些组件定义了与光标位置相关的具体操作。常见的操作组件包括:

- `insertCharacters` — 在当前索引处插入指定字符串
- `deleteCharacters` — 在当前索引处删除指定字符串
- `openElement` — 在当前索引处创建一个新的 XML 开始标签
- `closeElement` — 在当前索引处关闭第一个打开的标签
- `annotationBoundary` — 定义在当前索引处开始或结束的注解
- `retain` — 前进指定数量的索引项

操作是一个完整的、连续的组件序列,每个组件定义了一个对文档内容或光标位置的操作。这种结构使得操作能够在自动处理过程中表现出极大的灵活性和精确性。

OT 的核心在于其变换函数 (transform function),该函数接受两个操作 (一个来自客户端,一个来自服务器) 并生成一对新的操作。这两个新操作应用于各自的文档状态后,会产生相同的最终文档状态。这种机制确保了在多个客户端和服务器之间编辑操作的有序和一致性,解决了并发编辑中的冲突问题。

通过这种方法,OT 允许实现诸如 Google Wave 这样的实时协作工具,在不需要锁定或用户干预的情况下,实现多个用户对文档的同步编辑。

### 数据流水线

1. **数据源集成**
Expand Down

0 comments on commit 853e4cf

Please sign in to comment.