扩展库 / diff
diff
中小文本的行级 LCS 差异。
2026-10-28:校验不再返回并复制输入,两个原生文本结果直接转移,完整调用夹具没有输入或结果正文副本。固定空/短文本的 C 与 XLang 各 8 组预算、四组 NUL 反例、Windows/Linux 默认门禁和双语 JIT/AOT 均通过,Linux 包含 ASan/UBSan。仍保留两次小型 NUL 针串分配、长度扫描与错误作用域,不称整条调用零开销;C 算法与 ABI 不变。
保留长行和完整输出,超出明确预算时报错。2026-10-26 当前发布物的 Windows/Linux 默认门禁通过 C 边界与线程、Linux ASan/UBSan、XLang 边界、公开范例 AOT,以及新增 C 单文件范例独立 EXE;GCC、TCC、C AOT、XLang JIT/AOT 对固定输出一致。旧版共享快照缺符号已不阻断双平台 AOT。-SkipAot 仅用于 C/JIT 聚焦验证。本包是有界行级 LCS,不生成 unified patch,也不处理大文件流式 diff。
API
| 函数 | 用途 |
|---|---|
lines(oldText, newText) | 以空格、减号、加号前缀输出相同/删除/新增行 |
stats(oldText, newText) | 返回新增数、删除数、相同行数 |
xlang
import diff
println(diff.lines("a\nb", "a\nB"))
println(diff.stats("a\nb", "a\nB"))
输出不是可直接应用的 unified patch。每侧最多 8 MiB/2048 行,输入须为有效 UTF-8,XLang 文本入口另拒绝内嵌 NUL;C 接口要求 NUL 结尾字符串,空指针报参数错误,超限检测使用有界扫描。采用 O(m×n) 的完整 LCS 表。C 入口失败后可直接重试,成功不会保留旧线程错误。C 教学范例可直接运行 xl run release/extlibs/diff/examples/diff_c.c,Windows/Linux 门禁均与 GCC 分离编译及 XLang 范例对照固定输出。C 所有权和验证命令见包内 README。