扩展库 / cuckoo
cuckoo
近似成员查询。
16 位指纹、固定容量、可删除且失败插入不会损坏原有数据。查询可能假阳性;仅删除已知插入的键,避免指纹碰撞误删其他项。
2026-10-29 发布阻断:合法模块级过滤器在当前 Windows 独立 EXE 自然退出时发生主线 M2 状态错误;JIT 正常,相同局部对象对照正常,无读写/无输出的全局最小例也失败。默认门禁已加入此正例,不再沿用旧局部范围的全绿记录。算法和公开 API 未改,不通过移动对象、提前销毁或忽略退出码规避。
API
| 接口 | 用途 |
|---|---|
cuckoo.create(capacity) | 创建容量受控的过滤器 |
add / contains / remove | 插入、近似查询与删除 |
count / buckets / clear | 状态与复用 |
范例
import cuckoo
cuckoo.CuckooFilter seen = cuckoo.create(10000)
seen.add("session:abc123")
println(seen.contains("session:abc123"))
seen.clear()
println(seen.count)
过滤器可能误报存在,不应作为精确集合或权限检查;边界与 C 接口见包内 README。
C 构造容量使用 int64_t,对应 XLang int。C 侧有效键未命中返回 false 且无 XRT 错误;空句柄的计数和清空则显式报告参数错误。备用桶偏移为零时改用相邻桶,避免两个候选桶重合而提前拒绝插入;不同指纹的 C 回归测试覆盖该边界。2026-10-26 重建发布物后,Windows/Linux x64 默认包门禁通过严格 C、Linux ASan/UBSan、高装载与失败回滚、XLang 边界、双语固定输出,以及核心、XLang 范例和 C 单文件范例的独立 EXE AOT。旧共享快照缺符号不再复现;仅签收短时包级范围,不保证零假阳性、并发共享实例或其他架构。
C 范例可直接运行 xl run release/extlibs/cuckoo/examples/cuckoo.c,也可独立用 GCC 构建;两种入口与 XLang 范例的输出已在 Windows/Linux 包级测试中对照。
当前门禁仍保留严格 C、Linux sanitizer、高装载/失败回滚、OOM、私有原生方法拒绝、八条实际生成原型和双语黄金输出;另测八条普通 AOT 及两条顶层正例。命令有超时和输入指纹,失败留现场;完整状态和主线恢复路径见 README。局部通过不是整个生命周期验收。