扩展库 / fuzzy
fuzzy
Unicode 文本编辑距离与候选排序。
编辑距离复用 XRT,长候选不会静默截断;C/XL 调用均有明确的结果所有权。
2026-10-28 复查完整调用链,校验后不再复制输入,best 直接返回拥有型文本,正常未匹配仍为空串。C/XL 预算及覆盖五个入口的 cgen 检查通过,十个 NUL 参数位置保持拒绝。当前 XLang 仍为两次 NUL 针串及一次结果分配,不宣称零桥接开销;Windows/Linux 默认门禁、Linux ASan/UBSan 与双语 JIT/AOT 已通过。
API
| 函数 | 用途 |
|---|---|
levenshtein(a, b) | Unicode 标量编辑距离 |
ratio(a, b) | 0..100 整数相似度 |
score / isMatch | 子序列评分与布尔匹配;完整词和连续命中优先 |
best(pattern, candidates) | 换行分隔候选中选最高分;只剥离 CRLF 中的回车 |
xlang
import fuzzy
println(fuzzy.levenshtein("你好", "你们")) // 1
println(fuzzy.best("pc", "src/main.c\nlib/parser.c"))
println(fuzzy.best("abc", "a_b_c\nabc")) // abc
子序列评分只对 ASCII 字母忽略大小写;XLang 文本入口拒绝内嵌 NUL。C 入口在长度预算内有界扫描,超限不执行无界 strlen;失败后可直接重试,正常不匹配不保留旧线程错误。三个整数 C 返回值为 int64_t,与 XLang int 的跨平台 ABI 一致;C 范例用 PRId64 可移植打印。当前 Windows test/check.ps1 和 Linux test/check.sh 均通过严格 C、线程、XLang 边界/分配故障、固定双语输出和独立 C/XLang EXE;Linux 另通过 C ASan/UBSan。-SkipAot 仅为 Windows 聚焦快测。C 测试还以 512 组候选列表核对 best 按最高分选择、并列取首项;评分不承诺全局最优对齐,范例分数不作为稳定 API 常量。长度预算和 C 结果释放见包内 README。