生态第三方包

言版:语义版本

言版 1.0 的 SemVer 2.0.0 严格解析、范围匹配、稳定排序与资源边界。

言版(yanxu-semver)是纯言序实现的语义版本库。当前稳定版为 1.0.0,严格实现 SemVer 2.0.0 的版本文本与优先级规则,并提供工程常用的范围、筛选和版本选择能力。

版本与安装

项目稳定值
包名言版
版本 / 公开标签1.0.0 / v1.0.0
最低言序1.1.6
依赖
构建目标字节码

从公开附注标签安装:

yanbao add 言版 \
  --git https://github.com/yanxulang/yanxu-semver.git \
  --rev v1.0.0 \
  --version '^1.0'

等价的 言序.toml 依赖为:

[依赖]
言版 = { git = "https://github.com/yanxulang/yanxu-semver.git", 修订 = "v1.0.0", 版 = "^1.0" }

应提交生成的 言序.lock,让来源修订和内容校验也进入版本控制。

快速开始

「包:言版」 言版;

 候选:<>
    「1.2.0」「1.8.4」「2.0.0-rc.1」「2.0.0」
】;

 言版.规范化「1.2.3-alpha.1+linux」);
 言版.比较「1.8.4」「2.0.0-rc.1」);
 言版.满足「1.8.4」「^1.2」);
 言版.最大满足(候选,「^1.0.0」);
 言版.递增「1.8.4」「次」);

比较返回 -101。构建标识不参与优先级,所以 1.0.0+a1.0.0+b 在比较意义上等价;规范化仍保留构建标识。

核心能力

能力主要入口语义
严格解析解析尝试解析是否合法拒绝前导零、v 前缀、首尾空白和非法标识
规范与比较规范化比较等价完整 SemVer 2.0.0 预发布优先级
范围满足满足选项尝试满足比较器、交集、并集、尖帽、波浪、部分、通配和连字范围
候选选择筛选满足最小满足最大满足保持输入顺序筛选,未命中返回空
排序排序版本稳定归并排序,返回新列,不改写输入
递增递增接受 ,并移除预发布与构建标识

范围语法

 言版.满足「1.6.0」「>=1.2.0 <2.0.0」);
 言版.满足「2.3.4」「^1.0.0 || ~2.3」);
 言版.满足「2.2.0」「1.2 - 2.3」);
 言版.满足「3.1.5」「2.x || 3.1.*」);

空格表示交集,||表示并集。连字范围必须是单个分支中以三个空格分隔的形式;若还要追加条件,应改写成显式比较器。

普通稳定范围默认排除预发布候选。范围显式提及同一主、次、修订核心的预发布时可以命中;需要在整个范围放行预发布时使用显式选项:

 言版.满足「1.2.3-beta.2」「>=1.2.3-alpha <2.0.0」);
 言版.满足选项
    「1.5.0-beta.1」
    「^1.2.0」
    {「包含预发布」}
);

结构化失败

外部清单和索引输入应优先使用无异常入口:

 结果: 言版.尝试解析(外部版本);

 结果【「成功」
 结果【「值」】;
否则
 结果【「错误」】【「代码」】;

稳定错误代码包括:

  • YANBAN_PARSE:版本文本不合法;
  • YANBAN_RANGE:范围语法不合法;
  • YANBAN_LIMIT:超过文本、条件或候选预算;
  • YANBAN_ARGUMENT:选项或递增级别不合法。

捕获抛出型入口的错误后可调用 错误详情。程序分支只应依赖代码,不应匹配完整中文消息。

权限与安全边界

言版无第三方依赖,不读写文件,不访问网络、监听端口、环境或进程,也不加载原生扩展。库不保存输入,也没有全局可变状态。

处理不可信输入时还应了解这些硬边界:

  • 单个版本最多 256 个 Unicode 字符;
  • 单个范围最多 2048 个 Unicode 字符;
  • 每个范围最多 32 个并集分支,每分支最多 64 个交集条件;
  • 单次排序或选择最多 4096 个候选版本。

超限会完整失败,不会返回截断后的结果。业务入口仍宜设置更小的请求级配额。

已知限制

  • 主、次和修订号最大为 9007199254740991;数字预发布标识按文本长度和 ASCII 次序比较,不受该浮点安全整数上限影响。
  • 范围是言版的工程扩展,不属于 SemVer 2.0.0 标准本身;不支持括号或隐式逗号交集。
  • 范围分词只把 ASCII 空格当作交集分隔,不接受制表符替代。
  • 比较等价忽略构建标识;需要比较完整文本身份时应比较两边的规范化结果。

项目链接