OCaml 版本号、发布周期与发布流程全解析(ocaml/ocaml 仓库)

发布时间:2026/10/8 1:57:30
OCaml 版本号、发布周期与发布流程全解析(ocaml/ocaml 仓库) 编程语言编译器语言运行时标准库【免费下载链接】ocamlThe core OCaml system: compilers, runtime system, base libraries项目地址https://gitcode.com/gh_mirrors/oc/ocaml点击查看免费下载OCaml 的版本号遵循 Linux 风格的语义化方案其含义直接关系到用户如何选择编译器、判断兼容性与规划升级时机。本文以 release-info/introduction.md 为骨架结合仓库中的 release-info/calendar.md预期发布日历、release-info/howto.md发布操作手册、release-info/News历版亮点以及 build-aux/ocaml_version.m4、stdlib/sys.mli 等源码级证据系统讲解 OCaml 版本字符串的解析方法、六个月一次的时间驱动发布节奏、minor 版本之间的分支冻结与预发布流程、4.14 LTS 例外策略以及从打 tag 到 opam 同步的完整发布链路。读完你将能够一眼读懂任意 OCaml 版本号、判断某个版本属于哪个发布阶段并理解仓库内各版本分支、Changes 与版本宏之间的对应关系。OCaml 版本号的含义OCaml 的版本字符串由三个数字组成可选地跟一个预发布标签prerelease tag或开发标签development tag完整格式为%i.%i.%i[~alpha%i|~beta%i|~rc%i|%s]即主版本.次版本.修订号后面可跟~alphaN、~betaN、~rcN~前缀表示预发布或tag前缀表示开发/实验版本。例如4.14.1正式发布版本5.1.0~alpha25.1.0 的第二个 alpha 预发布版本5.3.0dev0-2023-12-22带日期戳的开发版本。这一格式也由标准库正式文档化在 stdlib/sys.mli 中Sys.ocaml_version的说明明确写出版本字符串形如major.minor[.patchlevel][(|~)additional-info]其中major、minor、patchlevel均为整数additional-info为任意字符串。实际编译出的编译器会在运行时把这一字符串暴露给程序例如在顶层直接执行Sys.ocaml_version即可获取当前编译器版本。三个数字分别代表什么主版本号第一个数字仅在语言层面加入重大新特性时递增。典型例子OCaml 5 引入了共享内存并行shared memory parallelism与效应处理器effect handlersOCaml 4 引入了 GADT广义抽象数据类型Generalised Abstract Data Types。从 release-info/News 可以印证5.0.02022 年 12 月 15 日发布introduces a completely new runtime environment with support for shared memory parallelism and effect handlers这正是主版本号跳升的驱动因素。次版本号第二个数字每发布一个新版本就递增一次。新次版本可能包含破坏性变更但社区会尽可能保持向后兼容。例如 4.14.0 的 News 条目中明确列出了为 OCaml 5 做准备而弃用的函数与模块特别是 Stream 和 Genlex 模块说明这类破坏是在次版本中被逐步引入的。修订号第三个数字bugfix 号。升级到最新的修订版本永远是安全的——修订版本被设计为完全向后兼容只包含重要或非常安全的 bug 修复。预发布标签与开发标签预发布标签~alphaN、~betaN、~rcN描述当前正在测试的编译器预发布版本例如5.1.0~alpha2中的~alpha2。在仓库中这些标签实际进入~前缀的版本宏。见下文预发布版本一节。开发标签tag表示开发或实验版本。编译器自身的开发版本使用形如dev%i-%date的标签例如5.3.0dev0-2023-12-22。当前仓库的 VERSION 文件就写着5.6.0dev1-2026-10-02即 5.6 分支建立后的第一个开发版本。版本号在仓库中的定义位置自 OCaml 4.14 起虽然 VERSION 文件仍然保留且内容正确但版本的真实定义已迁移到 build-aux/ocaml_version.m4其中的OCAML__VERSION*宏VERSION 文件由tools/autogen自动重新生成。以当前仓库为例OCAML__VERSION_MAJOR5OCAML__VERSION_MINOR6OCAML__VERSION_PATCHLEVEL0OCAML__VERSION_EXTRAdev1-2026-10-02OCAML__VERSION_EXTRA_PREFIXOCAML__VERSION宏最终拼出5.6.0dev1-2026-10-02。VERSION 文件头部注释还要求更新版本时应先修改build-aux/ocaml_version.m4再运行tools/autogen并把两个文件一起提交。这一约束与 release-info/howto.md 中描述的发布操作步骤完全一致见下文发布流程。何时发布新版本六个月一次的时间驱动节奏自 OCaml 4.03 起OCaml 采用基于时间的发布计划time-based release schedule每六个月发布一个新的次版本。原文档写作时的规划是OCaml 5.3约 2024 年 10 月OCaml 5.4约 2025 年 4 月。实际结果以 release-info/News 与 release-info/calendar.md 为准是5.3.0 于 2025 年 1 月 8 日发布5.4.0 于 2025 年 10 月 9 日发布5.5.0 于 2026 年 6 月 19 日发布。可见时间驱动是节奏框架而非硬性承诺文档明确说明时间只是近似值遇到不可预见的问题时经常推迟发布通常最多晚两个月。因此 release-info/calendar.md 开篇就幽默地声明这份预期日历与实际发布日历完全吻合的概率低到可以视为意外事故。预发布日历中的预期早与预期晚两列正是这一弹性的体现例如 5.6.0 的计划阶段预期早预期晚实际特性冻结2026 年 9 月 15 日2026 年 10 月 1 日10 月 2 日发布12 月 15 日次年 2 月 1 日待定另外bugfix 修订版本可以在任意时间发布不受六个月周期的约束。次版本之间发生了什么分支、冻结与预发布所有 PR 首先进入编译器的开发分支名为trunk这个名称来自 SVN 时代的标准叫法比main更具描述性一直沿用至今。特性冻结Feature freeze在距离新版本发布三个月时——也就是两个发布之间时间窗的中点——维护者为下一个版本单独创建分支。设计意图总会有例外是发布内容应对应于创建分支时trunk的状态但还要再等三个月用于质量分析、收集反馈并整合 bugfix。发布分支上不集成新特性以避免最后一刻的改动引入计划外回归。只有 bugfix 和文档改进会进入发布分支且通过从trunk的cherry-pick方式合入。维护团队没有资源同时维护超过一个开发分支、一个预发布分支和例外的一个 LTS 分支。示例5.1.0 于 2023 年 9 月发布5.2 的特性冻结发生在 2023 年 12 月5.2 计划于 2024 年 4 月前后发布实际 5.2.0 于 2024 年 5 月 13 日发布。预发布版本alpha → beta → rc新版本分支创建、特性集稳定之后就开始发布该分支的预发布版本。流程是分支创建后先发布alpha版本5.2.0~alpha1、5.2.0~alpha2……核心开发工具merlin、pppxlib、dune移植到 alpha 版本可用后切换到beta版本如5.2.0~beta1正式发布前发布release candidate如5.2.0~rc1对最终形态的分支做最后检查。设计意图是让 alpha、beta、rc 的稳定性保证逐级递增可被越来越广泛的受众测试alpha 版本内部 compiler-libs API 接近稳定只接受 API 修复不加入新特性有问题的特性可能在此阶段被移除非常欢迎 bug 修复仍接受文档 PR面向核心开发工具merlin、ppxlib、dune为整个 opam 生态解锁。beta 版本compiler-libs API 稳定特性集稳定非常欢迎 bug 修复仍接受文档 PR面向早期采用者opam 库作者此时应能测试自己的库。rc 版本compiler-libs API 稳定、特性集稳定只接受紧急 bug 修复文档 PR 推迟到发布之后面向广泛测试在大规模私有代码库中发现部署/生产问题。从第一个 alpha 版本开始会有一支小团队尝试用新版本构建并测试 opam 上的每一个包大部分工作由 Kate Deplaix 完成。这一实践在过去多次成功捕获 bug 与可用性回归是预发布质量保障的关键一环。release-info/calendar.md 中 5.5.0 的实际时间线是这条流程的完整实证特性冻结 2026 年 1 月 22 日 → 首个 alpha 2 月 25 日 → 首个 beta 4 月 20 日 → 首个 rc 6 月 10 日 → 正式发布 6 月 19 日。从 alpha 到正式发布前后跨度约四个月。如何安装预发布版本预发布版本的安装模板记录在 release-info/templates/beta.md 与 release-info/templates/rc.md 中源码可从 caml.inria.fr 发行目录下载也可直接用 opam 创建测试 switchopam update opam switch create ocaml-variants.$VERSION --repositoriesdefault,betagithttps://github.com/ocaml/ocaml-beta-repository.git或选择特定变体variantopam update opam switch create ocaml-variants.$VERSIONVARIANT --repositoriesdefault,betagithttps://github.com/ocaml/ocaml-beta-repository.git其中VARIANT可替换为afl、flambda、fp、fpflambda。beta 与 rc 的模板结构几乎相同——rc 模板只是在正文之后附加插入相关 Changes 章节的提示因为它距离正式发布只有一步之遥。Bugfix 版本如果发现严重影响初始版本使用的问题就会发布 bugfix 版本。此时通常会把发布后已合入trunk的安全 bugfix 反向移植backport到发布分支。大多数 bugfix 版本是M.m.1发生在M.m.0发布后一两个月用于修复预发布测试阶段未发现的重要问题。文档强烈鼓励用户尽快切换到最新 bugfix 版本而维护团队也尽量保证这些版本零回归让升级变得容易。例外的 LTS 版本OCaml 4.14从 OCaml 4 切换到 OCaml 5 需要对运行时runtime做全面重写这在以下方面对 OCaml 5 各版本的稳定性造成了负面影响支持的架构支持的操作系统性能稳定性运行时 bug 数量。为了让稳定版本始终易得维护团队例外地将 OCaml 4.14 维护为长期支持Long Term Support版本在 OCaml 5 被认为足够成熟之前会持续发布 4.14 的新 bugfix 版本。用户反馈哪些 OCaml 5 的修复也应合入 4.14 是受欢迎的。一旦 OCaml 5 稳定这一延长支持就会停止——原文档预期至少支持到 OCaml 5.5 前后约 2026 年 1 月。从 release-info/calendar.md 可见4.14.3 的发布流程rc 预计 5 月 2 日22 日发布预计 5 月 9 日6 月 1 日当时仍在推进中印证了这条 LTS 分支的活跃状态。新版本如何发布从打 tag 到 opam 同步完整发布流程记录在 release-info/howto.md其操作对象正是本仓库。文档将其分为测试版本Beta 或 Release Candidate与生产版本production release两类两者在步骤上有差异。0. 环境准备发布前在/tmp/env-$USER.sh中配置发布环境变量MAJOR/MINOR/BUGFIX定义版本号、PLUSEXT定义附加后缀预发布标签、HUMAN是发布公告署名、BRANCH与VERSION由它们拼接而成TAGVERSION会把~替换为-Git tag 中不允许~。同时还要配置 Inria 档案服务器ARCHIVE_HOST/ARCHIVE_PATH与网页服务器WEB_HOST/WEB_PATH等访问信息。14. 仓库状态检查、构建与测试检出发布分支并确认工作区干净、git pull最新主版本发布时检查并更新 magic numbers详见 utils/HACKING.adoc依次执行make distclean、./configure --prefix...、make -j5、make alldepend确认依赖最新、git diff应无输出、检查.depend无绝对路径、运行./tools/check-typo、make install以及./tools/check-symbol-names runtime/*.a应无输出且返回 0运行make tests跑完整测试套件对应本仓库的 testsuite 目录。5. 构建、打 tag 并推送发布的关键动作序列是先手动递增版本宏例如4.07.0dev8-2018-06-19→4.07.0dev9-2018-06-26运行tools/autogen重新生成 configure 与 VERSION 等文件提交tag 前最后一笔提交把版本宏更新为目标版本例如4.07.0dev9-2018-06-26→4.07.0rc2同步更新 ocaml-variants.opam再次tools/autogen生产版本需要连续运行两次make coreboot -j5直到输出Fixpoint reached, bootstrap succeeded.引导修复点达成git tag -m release $VERSION $TAGVERSION打 tag发布后再把版本宏递增到下一个开发版本生产版本为(N1)dev0测试候选为Ndev(D2)提交并git push、git push --tags。分支创建branching走的是5-bis备选流程先在 trunk 上递增开发版本号、改名 Changes 头部然后git branch $BRANCH创建分支、为新分支设定新的未来版本号如4.07.0dev1→4.08.0dev0-2018-06-30、更新 opam 开发包最后推送并设置上游。创建后还需在 GitHub 上为分支配置保护规则、加入 Inria CI 列表、在 README.adoc 中更新分支徽章。6. opam 包同步生产版本需要在 opam-repository 中更新/创建ocaml-base-compiler.$VERSION、ocaml-variants.$VERSIONoptions所有发布都需要ocaml-system、ocaml-src、ocaml-manual、虚拟包ocaml必须指向下一个版本等生产发布需要。注意更新 tarball 的 checksum 字段并用opam-lint检查PR 之前可以用本地仓库加 beta 仓库的方式预先验证 switch 能否构建。713. 归档、上传与公告用git checkout-index导出 tag 对应的干净源码树以owner/group 0打包出.tar.gz与.tar.xz两个压缩归档上传到 Inria 档案服务器更新MD5SUM/SHA512SUM校验文件注意保留旧校验文件作为回退备份上传INSTALL.adoc、LICENSE、README.adoc、README.win32.adoc、Changes等说明文件重新构建并上传参考手册release candidate 若与上一版本手册完全相同可跳过生产版本还要同步到公开网页并把manual-ocaml软链接指向新手册生产版本与 ocaml.org 协作准备发布网页最后在 caml-list、caml-announce、discuss.ocaml.org 上发布公告公告模板见 release-info/templates 下的beta.md、rc.md、production.md并向 compiler-explorer 等外部工具传播新编译器。附录Changes 文件的整理规范release-info/howto.md 的附录对 Changes 文件给出了细致的整理规范同步 trunk 与发布分支发布分支的 Changes 条目必须精确包含在 trunk Changes 的对应版本章节中用交互式 diff 工具如 meld比对同步条目所在章节不一致时应放到最小的版本章节假设所有更大的版本都包含该变更。每条目归入正确章节新版本 Changes 的常用小节模板为Language features、Runtime system、Code generation and optimizations、Standard library、Other libraries、Tools、Manual and documentation、Compiler user-interface and warnings、Internal/compiler-libs changes、Build system、Bug fixes。补充细节尤其对语言变更给出具体语法示例如#8820引号字符串扩展的例子对破坏性变更明确说明破坏点与推荐迁移方式便于用户判断、也便于日后 grep 追溯变更引入时机。排序自 4.09 起按重要性而非数字/时间排序Language features通常靠前Bug fixes永远最后过于琐碎的条目可移入 Bug fixes 章节时不时把各版本亮点抽取同步到 release-info/News。读者视角如何利用这套规则做升级决策结合以上机制普通用户可以建立一条清晰的决策链读版本号M.m.p~alpha/beta/rc表示预发布稳定性递增、不推荐生产使用M.m.ptag表示开发版可能随时变化纯M.m.p才是正式版无p或p缺失的字符串如 3.08.0 之前的版本不属于现代格式。选版本生产环境优先选当前次版本的最新修订号如5.5.x中尽量取最高x因为修订版本被保证完全向后兼容且只含安全修复升级次版本前查阅对应版本的 Changes 与 release-info/News 了解破坏性变更。尝鲜预发布按 release-info/templates/beta.md 的 opam 命令用ocaml-variants.$VERSIONswitch 测试自己的库库作者应至少从 beta 开始适配以赶上正式发布。追节奏关注 release-info/calendar.md 的预期早/预期晚/实际三列——它如实反映了时间驱动计划经常晚一两个月的现实。验证版本在代码中可用Sys.ocaml_versionstdlib/sys.mli读取编译器的完整版本字符串配合Sys.development_version与Sys.ocaml_release_info含major/minor/patchlevel及extra_prefix/extra_info字段在运行时精确区分发布类型这与build-aux/ocaml_version.m4中OCAML__RELEASE_EXTRA宏生成的 OCaml 值一一对应。这套版本体系既是 OCaml 项目的发布纪律也是用户与生态dune、merlin、opam协同演进的节奏表alpha 解锁核心工具链、beta 带动库作者适配、rc 做最终部署验证最后以完全向后兼容的修订版本收尾——理解它就能在任何版本号出现时迅速定位它处在整个生态演进的哪个坐标点上。赞分享编程语言编译器语言运行时标准库【免费下载链接】ocamlThe core OCaml system: compilers, runtime system, base libraries项目地址https://gitcode.com/gh_mirrors/oc/ocaml点击查看免费下载相关推荐Spaceship Prompt 的 OCaml 版本指示区ocaml section配置与实现解析Spaceship Prompt 的 OCaml 版本指示区ocaml section配置与实现解析 OCaml 是支持函数式、命令式与面向对象多种风格的工开发工具CKEditor 5 版本策略与发布流程全解统一版本号、LTS 周期与发布渠道CKEditor 5 版本策略与发布流程全解统一版本号、LTS 周期与发布渠道 CKEditor 5 是一个由超过 80 个 npm 包组成的模块化富文本编辑前端富文本UI组件DeepSeek Harness 快照测试产物精简以 session.jsonl 作为唯一的 ACP 会话日志预期产物DeepSeek Harness 快照测试产物精简以 session.jsonl 作为唯一的 ACP 会话日志预期产物 导读 DeepSeek Harness编程语言编译器语言运行时标准库上一篇终极轻量级内存优化工具Mem Reduct深度解析与实战指南下一篇Bootstrap 3.0.3 前端框架快速入门从快速开始到 Grunt 编译与插件源码解析Parsley.js 仓库内嵌组件实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询