# 概要   本文档记录*发布工程(release engineering)* 相关的规则、历史记录和相关计划。   发布策略控制版本更新。   关于*版本(revison)* 的详细规则参见 YSLib 项目文档 `doc/ProjectRules.txt` 。 # 分支   一个项目可有多个*分支(branch)* ,包括至少一个保持工作进行的活动(active) 分支。   发布时使用活动分支,以项目版本库的分支为准。   当前只有*主分支(master branch)* 。 # 标识   具体的*版本(version)* 和*修订版本(revision)* 可具有*标识(identification)* 以便明确地被引用和[指称](Terminology.zh-CN.md#程序设计语言)其中的状态。   *阶段(phase)* 是连续的版本的一种标识,描述一个分支在一个时期内版本的发布状态。   当前位于 Alpha 非正式发布阶段。 ## 迭代阶段   *迭代阶段(iteration phase)* 是工程意义上的版本标识,适用于所有在开发、测试和维护生命周期中的分支,包括仅包含开发和测试版本的场合。   PreAlpha 阶段不对 [API](Terminology.zh-CN.md#程序设计语言) 的稳定性进行任何保证。   Alpha 阶段尽量保证公开 API 的非向后兼容的修改最小化,但仍然不保证兼容。   Beta 阶段保证主要项目的 API 向后兼容性。非兼容的改动不再在当前迭代周期内引入,否则视为缺陷。   Beta 阶段开始提供面向非开发者的部署方案。   允许在每个迭代周期中按以上顺序补充新的阶段。   关于项目内的提交版本(revision) ,详见项目文档 `doc/Dependencies.txt` 的约定。 ## 发布阶段   *发布阶段(release phase)* 使用的版本标识是被用户用于区分产品特性的标识。   正式标记形式为以 `V` 起始,跟随符合[语义化版本](http://semver.org/lang/zh-CN/)规范**语法**的版本号。作为扩展,表示分支的版本号中的 `.y` 或 `.y.z` 以及表示具体版本的非可选部分的后缀 `.0` 或 `.0.0` 可省略。对省略后缀 `.0` 或 `.0.0` 的具体版本号,视为和不省略这些后缀的版本具有等价的含义。 **注释** 标记的大小写敏感。   *发布(release)* 提供*可重复分发(redistributable)* 的、和版本控制机制相对独立的、集成的项目输出,通常以*包(package)* 为单位。   典型的发布的包可以是: * 源代码包。 * (二进制)目标文件包。   公开提供版本标识发布的版本是*发布版本(released version)* 。   为发布准备的[分支](#分支)是*发布分支(relase branch)* 。发布分支可使用语义化版本的版本号标记。   语义化版本之间能确定一个[全序](https://zh.wikipedia.org/zh-cn/%E5%85%A8%E5%BA%8F%E5%85%B3%E7%B3%BB),即*版本顺序(version order)* ,允许同一个项目目标的任意的不同版本之间全局地比较大小,以确定版本演进的拓扑顺序。   版本顺序不一定和发布时间顺序完全对应,但只有一个版本组件的不同的两个语义化版本之间,顺序和发布顺序应保持一致。 **原理** 序是反自反(irreflexive) 的。这保证了同一个发布分支版本演进的因果性(causality) 。   版本号同时符合语义化版本规范的**语义**:在语言实现保持兼容的前提下,相同*主版本(major version)* 的发布应保持公开的命令行调用接口、API 和 ABI 向后兼容。主版本变化可引入不和先前迭代周期中保证兼容的改动。   由公开的[兼容性约定](Home.zh-CN.md),除非另行指定,作为公开的命令行接口的工具在相邻的*次版本(minor version)* 之间向后兼容。一般地,若工具实现的公开功能被继续支持,命令行工具不在提供向后兼容功能的替代工具前被移除。 **注意** 非标记为发布版本的开发版本不需要保证以上要求。   不兼容未来计划的改动的特性可被标记为[废弃](Terminology.zh-CN.md#规范)以表示可能在之后不继续支持。 ### 非正式版   非正式版的版本号小于 `1.0.0` ,不保证任何 ABI(应用程序二进制接口)兼容性。   所有非正式版共享一组迭代阶段。 ### 正式版   正式版的初始版本号为 `1.0.0` 。   正式版提供版本检查的 API 。   正式版对应的开发和测试版本使用以上除 PreAlpha 以外的阶段,具有上述相同的要求。 # 支持策略   支持策略基于发布规则。   当前仅对最新的非正式版及版本库活动开发分支上的最新提交版本(tip) 提供公开支持。   正式版适用的规则另行具体指定。 # 持续集成   *持续集成(continuous integration)* 是支持使项目保持持续演进的开发流程和实践。 ## 构建   提供有限的*构建自动化(build automation)* 支持。   关于使用的构建工具,参见[先决条件](Prerequisitions.zh-CN.md),并参见[构建](Build.zh-CN.md)过程。   在[宿主环境](Terminology.zh-CN.md#环境)下使用项目内自行开发的工具支持,参见 [SHBuild](Tools/SHBuild.zh-CN.md) 和 [Sysroot](Sysroot.zh-CN.md) 。 # 里程碑和路线图   本节略述发布版本的参照目标,包括重要的特性实现。   关于包含较详细特性变更说明的发布版本的*发布注记(release note)* ,参见版本库中的文档 `doc/Dependencies.txt` ;关于提交版本的详细变更记录(change log) ,参见项目文档 `doc/ChangeLog.*.txt` 。 ## 已实现的重要特性 ### PreAlpha   PreAlpha 阶段实现平台中立的基础设施和 GUI 。每个发布版本包含重要的新增特性。 * **PreAlpha 1** 实现可在 DS 和 DeSmuME 运行的 GUI 程序。 * **PreAlpha 2** 完善 GUI 部件并提供框架。 * **PreAlpha 3** 支持 MinGW32 移植和动态库:平台中立设计的验证实现。 * **PreAlpha 4** 支持基于 [NPL](Features/NPL.zh-CN.md) 的配置设置、构建工具 [SHBuild](Tools/SHBuild.zh-CN.md) 和运行时加载的 GUI 。 * **PreAlpha 5** 支持桌面程序特性:界面风格、动画及分离构建等。 ### Alpha   Alpha 阶段仍包含若干重要特性改进,但发布版本不再以添加单一特性为重点,而侧重提升环境的整体可用性。 * **V0.6** 完善项目结构并提升宿主环境下的开发可用性支持。 * 添加整体测试。 * 添加桌面环境 YDE 。 * 当前主要用于示例。 * 添加和完善若干专用于支持开发的工具。 * 添加 [ProjectGenerator](Tools/ProjectGenerator.zh-CN.md) ,支持生成 Code::Blocks 项目。 * 支持宿主环境下的 SHBuild 自举 [Sysroot](Sysroot.zh-CN.md) 部署。 * **V0.7** 完善各个平台的实现行为和互操作接口。 * 替换 DS 的文件系统实现。 * 支持宿主环境下的 YSLib 多个映像实例共存。 * 每个映像实例包括动态库和配置文件等[运行时支持环境](Run.zh-CN.md)。 * 映像实例可以是 Sysroot ,也可以手动部署。 * 不要求映像实例具有相同的版本。 * 当前对环境变量透明;必要时,仍需手动指定 [`PATH`](Run.zh-CN.md) 。 * 当前全面支持仅限 MinGW32 :配置位置不再依赖当前工作目录。 * 按独立的语言解释实现添加 NPL 接口。 * **V0.8** 完善内部互操作性和部署。 * 改进运行时对象操作 API 。 * 扩充 NPLA/NPLA1 。 * 设计和实现新的求值规则。 * 提供较完整的 REPL 支持。 * 在 SHBuild 中使用 NPLA1 代替系统默认的 shell 环境,用于实现部分 Sysroot 部署。 * **V0.9** 增强 NPL 和部署环境。 * 继续完善 NPL 接口并提升实现性能。 * 默认使用异步调用实现,避免嵌套调用过深时的未定义行为,并支持 PTC 。 * 节点和环境等数据结构支持分配器。 * 显著优化分析器和求值的性能。 * 添加 NPLA1 源代码信息支持,并增强错误信息。 * 添加更多的标准库操作。 * 增强配置管理。 * 支持后备路径。 * 支持检测类 FHS 的文件系统布局。 * Sysroot 安装构建脚本。 ## 重点计划目标 * **V0.10** 计划进一步增强 NPL 和构建环境。 * 继续完善 NPL 接口并提升实现性能。 * 支持多个运行时实例交互。 * 基于 Sysroot 的多平台自动化部署方案。 # 待定事项(TODOs)   版本发布的待定事项参照上述目标。   [贡献到问题跟踪系统](Home.zh-CN.md)的内容可能包含特性请求和没有立刻解决的缺陷记录,其实现会被考虑列入待定事项。   完整列表当前仅被内部参照,没有公开。 # 版本发布记录   发布页可能包括后续开发信息。   关于被发布的资源,参见[归档](Archives.zh-CN.md) 。   发布页基于历史因素归档。链接可能失效。 ## PreAlpha 发布页 ### PreAlpha 1 * [百度贴吧](http://tieba.baidu.com/p/767225536)。 * [掌机开发者之家](http://www.yayabo.cn/forum.php?mod=viewthread&tid=3878)。 ### PreAlpha 2 * [百度贴吧](http://tieba.baidu.com/p/1043526998)。 * [掌机开发者之家](http://www.yayabo.cn/forum.php?mod=viewthread&tid=17543)。 ### PreAlpha 3 * [百度贴吧](http://tieba.baidu.com/p/1511876559)。 * [掌机开发者之家](http://www.yayabo.cn/forum.php?mod=viewthread&tid=22988)。 ### PreAlpha 4 * [百度贴吧](http://tieba.baidu.com/p/2288320823)。 * [掌机开发者之家](http://www.yayabo.cn/forum.php?mod=viewthread&tid=25961)。 ### PreAlpha 5 * [百度贴吧](http://tieba.baidu.com/p/3069607390)。 * [掌机开发者之家](http://www.yayabo.cn/forum.php?mod=viewthread&tid=26450)。 ## Alpha 发布页 ### 0.6 * [百度贴吧](http://tieba.baidu.com/p/3747376832)。 * [掌机开发者之家](http://www.yayabo.cn/forum.php?mod=viewthread&tid=26718)。 ### 0.7 * [百度贴吧](http://tieba.baidu.com/p/4701412006) 。 # 版本日程记录   记录的时间来自存档和提交记录,使用时区 UTC+8 。   发布版本的计划时间为截止时间。评估计划完成情况时,实际时间应早于此时间。 ## PreAlpha   早期开发版本计划未定。发布版本为每 100 个开发更新版本中形成。   计划(追溯)及里程碑版本: * **PreAlpha 0** 2009-02 W3 * PALibTest: 2009-10-10 * **PreAlpha 1** 2010-03 W1 * YSTest b98: 2010-05-05 * 使用 [Mercurial](https://www.mercurial-scm.org/) * YSLib b132 2010-07-13   使用版本控制,开发更新版本对应提交版本。提交版本仅主分支版本。更新频率逐步控制为 8 提交版本/月,其中月以自然月计,折合 4 周工作量。   计划及实际发布版本: * **PreAlpha 2** 2011-03 W4 * YSLib b200: 2011-04-11 * **PreAlpha 3** 2012-04 W2 * YSLib b300: 2012-04-12 * **PreAlpha 4** 2013-04 W4 * YSLib b400: 2013-04-24 * **PreAlpha 5** 2014-05 W2 * YSLib b500: 2014-05-30 ## Alpha   保持提交和发布版本更新频率不变。   计划及实际发布版本: * **V0.6** 2015-05 W4 * YSLib b600: 2015-05-26 * **V0.7** 2016-06 W2 * YSLib b700: 2016-06-11   为便于特性整合和进度统计,2017 Q2 计划提交和发布版本基准周期增加 1 倍。   新的发布计划日程安排于 2017-07-01 启用。追溯 Alpha 发布历史并调整截止日程: * **V0.6** 2016-06 W2 * **V0.7** 2018-07 W2   使用以下日程同步计划过渡到新的截止日期: * 同步目标外推 4 次,并对每个发布版本递增添加 4 周发布准备,至 **V0.11** 2027-01 W2 。 * 计划使用在新的基准周期外的至多和原提交周期相同的额外缓冲时间和截止日程同步。 * 因此,提交版本周期至多为原周期的 3 倍;即更新频率控制为至少 8/3 提交版本/月 。 * 同时,抽取 6 周用于 **V0.8** 发布准备。 * 原计划外推 **V0.8** 发布时间为 2017-06 W4 ,推迟后为 2017-08 W2 。 * 新计划外推 1 次 2018-08 W2 ,同步版本后相差 24 月,补充到后续发布版本中。 * **V0.10** 计划周期起每发布版本补充 8 周缓冲准备时间。 * 原计划外推 **V0.10** 发布时间为 2023-12 W2 ,推迟后为 2024-12 W2 。 * 新计划外推 1 次 2027-01 W2 ,同步版本后相差 4 月,补充到后续发布版本中。   随之改订的计划及待定发布版本: * **V0.8** 2017-08 W2 * YSLib b800: 2017-08-10 * **V0.9** 2020-10 W2 * YSLib b900: 2020-10-13 * **V0.10** 2024-02 W2 * YSLib b1000: TBD * **V0.11** 2027-05 W2 * YSLib b1100: TBD ## Beta   待定。