功能策略

运行时标志

通常,面向开发者的**新功能**应通过**运行时标志**来实现。最初,此类标志应在主干(trunk)上禁用。随着功能开发成熟,其标志可在主干(trunk)上启用。最终,应移除保护已广泛部署的稳定功能的运行时标志。

以下标准定义了**在主干(trunk)上**何时应启用或禁用运行时标志。本策略无意体现或传达任何特定 WebKit 端口或嵌入 WebKit 的产品的特性发布策略。各端口有责任决定何时为发布启用或禁用运行时标志。鼓励各端口记录其可能使用的任何附加标准。

在某些情况下,除了运行时标志外,还应使用编译时标志,或代替运行时标志使用编译时标志

  • 当仅将某个功能编译进主干(trunk)会显著影响其可修改性或可维护性时。
  • 当某个功能需要特定于平台的后端,而该后端并非在所有平台上都可用时。
  • 当某些端口或平台存在资源限制,需要能够从构建中完全移除该功能时。
  • 当某个功能仅与某些端口或平台相关时。

尽管如此,只要可行,运行时标志仍是首选。

运行时标志应在**主干(trunk)上禁用**

  • 当功能开发开始时。
  • 当该功能不打算向 Web 公开时。
  • 当该功能定义在一个不成熟或可能发生不兼容更改的 Web 标准中时。
  • 如果启用该功能会负面影响主干(trunk)的可维护性。(在这种情况下,编译时标志也可能是必要的。)

之后,运行时标志可在**主干(trunk)上启用**

  • 当该功能定义在一个成熟且不太可能发生不兼容更改的 Web 标准中时。
  • 如果该功能的实现相对成熟,并已准备好进行更广泛的测试或审查。
  • 如果为了 Web 兼容性需要支持该功能。

最终,运行时标志可被移除,并使该功能**始终开启**

  • 当 WebKit 的大多数或所有主要端口都已发布该功能且没有端口计划将其关闭时。

命名

通常,新功能**不应添加前缀**。

如果某个功能不打算向 Web 公开,则**应添加前缀**。(并且,如前一节所述,此类功能的运行时标志应在主干(trunk)上禁用。)

优先使用特定于产品或内容类型的**前缀**,而不是 `-webkit-` 前缀。例如,针对 FooCorp 旗舰产品 Foo 的功能应获得 `-foo-` 前缀,而不是 `-webkit-` 前缀。