6 支持、兼容性、弃用和移除
6.1 简介
本文档描述了有关支持的版本、兼容性、弃用和功能移除的策略。本文档在 OTP 21 中引入。OTP 21 之前针对这些问题的操作没有遵循本文档。
6.2 受支持的版本
通常,错误仅在最新的 版本 上修复,新功能将在正在开发的即将发布的版本中引入。但是,当我们由于内部原因在旧版本上修复错误时,这些错误也将可用并会发布公告。
由于上述原因,拉取请求仅在我们的 git 仓库 中的 maint 和 master 分支上接受。 maint 分支包含计划用于最新的 OTP 版本的下一个 维护补丁包 的更改,而 master 分支包含计划用于即将发布的 OTP 版本的更改。
6.3 兼容性
我们始终努力保持尽可能的兼容性,即使在没有兼容性保证的情况下也是如此。
系统不同部分在兼容性方面的处理方式不同。以下项目描述了如何处理系统的不同部分。
- Erlang 分布
-
Erlang 节点可以在至少两个先前版本和两个后续版本之间进行通信。
- 编译后的 BEAM 代码、NIF 库和驱动程序
-
编译后的代码可以在至少两个后续版本上加载。
在先前版本上加载不支持。
- API
-
在版本之间兼容。
- 编译器警告
-
在版本之间可能会发出新的警告。
- 命令行参数
-
在版本之间可能会发生不兼容的更改。
- OTP 构建过程
在版本之间可能会发生不兼容的更改。
在某些情况下,即使在系统中应该在版本之间保持兼容的部分,也可能会引入不兼容的更改。可能触发此类不兼容更改的事情包括
- 安全问题
-
为了解决安全问题,可能需要引入不兼容的更改。这种不兼容性可能会出现在补丁中。
- 错误修复
-
我们不会进行错误兼容。错误修复可能会引入不兼容的更改。这种不兼容性可能会出现在补丁中。
- 严重的先前设计问题
-
OTP 的某些部分设计于很久以前,并没有真正考虑到今天的计算环境。在某些情况下,这些设计决策的后果过于严重。这可能是性能方面、可扩展性方面等等。如果我们认为后果过于严重,我们可能会引入不兼容的更改。这种不兼容性不会在补丁中引入,而是在下一个版本中引入。
外围、跟踪和调试功能比语言本身以及操作期间使用的核心库的功能更容易以不兼容的方式更改。
6.4 弃用
当引入新功能时,如果希望使用新功能而不是正在弃用的旧功能,则会弃用旧功能。弃用不意味着移除该功能,除非在弃用中明确说明了即将移除该功能。
弃用的功能将被记录为已弃用,并且编译器警告(如果适用)将在尽可能早的时间发出。也就是说,新首选功能将与弃用同时出现。新的弃用至少将在发行说明和文档中宣布。
6.5 移除
遗留解决方案最终可能需要移除。在这种情况下,它们将在足够长的时间段内逐步淘汰,以使用户有时间适应。在移除功能之前,它将至少在一个版本中被弃用,并且会明确宣布即将移除该功能。新的弃用至少将在发行说明和文档中宣布。
外围、跟踪和调试功能比语言本身以及操作期间使用的核心库的功能更容易移除。