生态第三方包
言版:语义版本
言版 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」,「次」);比较返回 -1、0 或 1。构建标识不参与优先级,所以 1.0.0+a 与 1.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 空格当作交集分隔,不接受制表符替代。
比较和等价忽略构建标识;需要比较完整文本身份时应比较两边的规范化结果。