生态第三方包

言容:容器与集合

言容 1.0 的有界容器、稳定优先队列、LRU 缓存与受限集合算法。

言容(yanxu-collections)是纯言序实现的通用容器与集合算法库。稳定版 1.0.0 为容器、批量算法和回调建立了明确的顺序契约、无异常结果与资源预算。

版本与安装

项目稳定值
包名言容
版本 / 公开标签1.0.0 / v1.0.0
最低言序1.1.6
依赖无
构建目标字节码
yanbao add 言容 \
  --git https://github.com/yanxulang/yanxu-collections.git \
  --rev v1.0.0 \
  --version '^1.0'
[依赖]
言容 = { git = "https://github.com/yanxulang/yanxu-collections.git", 修订 = "v1.0.0", 版 = "^1.0" }

提交生成的 言序.lock,以固定标签解析出的修订与内容校验。

核心能力:选择容器

容器主要入口顺序与用途
栈()压入、弹出、尝试弹出、查看后进先出
队列()入队、出队、尝试出队、队首先进先出
双端队列()加首、加尾、移首、移尾两端操作,快照按首到尾
有序集合()加入、删除、含有、转列去重并保留首次加入顺序
优先队列()加入、取出项、转项列数值越小越优先,同级保持加入顺序
最近最少使用缓存(容量)写入、读取、查看、尝试读取固定容量,读取触碰、查看不触碰

稳定优先队列

引「包:言容」为 言容;

定 待办 为 言容.优先队列();
待办.限制为(100);
待办.加入(「常规任务」,10)
    .加入(「紧急任务甲」,1)
    .加入(「紧急任务乙」,1);

定 下一项:典 为 待办.取出项();
言 下一项【「值」】;
言 下一项【「优先级」】;

输出的第一项是“紧急任务甲”。取出项返回值和优先级,取出只返回值。

LRU 缓存

定 缓存 为 言容.最近最少使用缓存(2);
缓存.写入(「甲」,1).写入(「乙」,2);
缓存.读取(「甲」);          # 命中并触碰甲
缓存.写入(「丙」,3);       # 淘汰乙

言 缓存.含有(「乙」);       # 假
言 缓存.键列();             # 从最少使用到最近使用

旧式 读取在缺失时返回空。若缓存允许保存真实空值,应使用 尝试读取或不触碰顺序的 尝试查看,并读取结果中的成功字段。

容量和无异常操作

栈、队列、双端队列、有序集合和优先队列默认最多保存 100000 项,可以按实例收紧:

定 事件队 为 言容.队列();
事件队.限制为(256);

定 结果:典 为 事件队.尝试出队();
若 结果【「成功」】 则
    言 结果【「值」】;
否则
    言 结果【「错误」】【「代码」】;
终

上限必须为正整数,不能超过库硬上限,也不能低于当前项目数。超限加入会在修改容器前以 YANRONG_LIMIT失败。

集合与列算法

法 数值先于(甲:数,乙:数):理 则
    归 (甲 小于 乙);
终

定 来源:列<数> 为 【5,2,3,2,1】;

言 言容.去重(来源);
言 言容.并集(来源,【8,2】);
言 言容.对称差(【1,2】,【2,3】);
言 言容.窗口(来源,3);
言 言容.频次(来源);
言 言容.稳定排序(来源,数值先于);

还提供 交集、差集、分块、压平一级、拉链、拉链全部、划分、分组和旋转。所有算法返回新的外层列,不改写输入;分组和频次按键或值首次出现顺序输出。

每个批量算法都有同名的“受限”入口,最后一个参数为限制典:

定 限制:典 为 {
    「最大输入项」:200,
    「最大输出项」:1000,
    「最大比较次数」:4000
};

言 言容.窗口受限(来源,3,限制);

默认预算为 1024 个输入项、100000 个输出项目和 8192 次通用相等比较。窗口、分块、拉链和分组生成的子列或记录也计入输出预算。

错误、权限与安全边界

稳定错误前缀为 YANRONG_。常见代码包括:

代码含义
YANRONG_EMPTY从空容器读取或移出
YANRONG_NOT_FOUND缓存键不存在
YANRONG_LIMIT容量、输入、输出或比较预算耗尽
YANRONG_LIMIT_CONFIG限制配置不合法
YANRONG_CAPACITYLRU 容量不合法
YANRONG_PRIORITY优先级超出安全数值范围
YANRONG_CALLBACK / YANRONG_ORDER回调返回类型或排序关系不合法

捕获错误后用 错误详情取代码,不要比较中文消息。言容无第三方依赖,不申请文件、网络、监听、环境、进程或原生扩展权限。

已知限制

  • 通用相等使用言序值相等语义,不依赖哈希;有序集合、LRU、去重、分组和频次在大量互异值下最坏为二次时间。
  • 快照和算法结果只复制外层列,复合项目仍是浅引用;需要隔离可变敏感对象时由调用方先复制或冻结。
  • 通用比较的可配置硬上限为 16384 次;大型可信数据也应优先分批,而不是盲目提高预算。
  • 排序比较器必须返回逻辑值、不可令值先于自身,也不可同时令甲先于乙且乙先于甲;库不能证明任意回调的传递性或纯度。
  • 单实例容器是内存对象,不提供持久化、跨进程同步或并发协调。

项目链接