扩展库 / roaring

roaring

精确的 uint32 整数集合。

高 16 位分桶,桶内有序数组按密度升级为位图;删除后会回退并收缩,适合 ID 去重。

API

2026-10-29 发布阻断 M2:模块级空位图仅查询 valid/count,Windows/Linux 独立 EXE 打印 PASS 后状态错误、退出 1;JIT 和相同局部对象对照正常。默认门禁已接入共享生命周期专项,保留合法全局正例和失败现场,不借搬入 main 或提前销毁换绿灯。算法、API 和 ABI 未改,此问题不涉及未执行的数组投影或集合运算。

接口用途
roaring.create()创建空集合
add / contains / remove插入、查询、删除整数
count / min / max / clear统计、范围与复用
toArray()生成独立的升序整数数组快照
unionWith / intersectWith / differenceWith生成并集、交集、差集的新集合

范例

import roaring
roaring.RoaringBitmap ids = roaring.create()
ids.add(65536)
var ordered = ids.toArray()
roaring.RoaringBitmap other = roaring.create()
other.add(42)
roaring.RoaringBitmap both = ids.unionWith(other)
println(both.count)

范围为 0..4294967295。集合运算不修改输入,差集是左集合减右集合;没有 Roaring 二进制格式互操作。C 接口和验证范围见包内 README。

toArray() 按数值升序返回独立快照;C 接口 xroaring_to_array 的结果由调用方用 xrtValueRelease 释放。集合归并使用 xroaring_combine_into,先构造结果再替换输出,允许句柄别名。C 侧空句柄返回参数错误,与合法空集合或成员未命中区分;分配失败抛 MemoryError,原集合不变。

从仓库根目录可直接运行 xl run release/extlibs/roaring/examples/roaring.c。2026-10-26 重建发布物后,Windows/Linux x64 默认包门禁均通过严格 C、Linux ASan/UBSan、桶升级/故障回滚、私有入口负例、C/XLang 固定输出,以及核心和双语范例独立 EXE AOT;-SkipAot 仅作聚焦检查。旧 VFS/共享快照阻断不再复现。本包只提供文档化的 uint32 内存集合,不提供标准 Roaring 二进制格式。