The wiki source of YSLib documentation.
Revision | 45b875735a1412d5b3bbe9b67dc43dea20b8d030 (tree) |
---|---|
Zeit | 2024-04-01 02:31:48 |
Autor | FrankHB <frankhb1989@gmai...> |
Commiter | FrankHB |
Development.zh-CN.md: 修订实现规则,添加可选支持要求。
@@ -1,6 +1,6 @@ | ||
1 | 1 | # 开发说明 |
2 | 2 | |
3 | - 关于环境配置,详见[运行](Run.zh-CN.md)。当前没有其它的面向最终用户的说明。 | |
3 | + 关于环境配置,详见[先决条件](Prerequisitions.zh-CN.md)和[运行](Run.zh-CN.md)。其中后者也包含部分面向最终用户的说明。 | |
4 | 4 | |
5 | 5 | 以下为面向开发者的说明。 |
6 | 6 |
@@ -23,9 +23,7 @@ | ||
23 | 23 | |
24 | 24 | 实现的附加输出为库和工具。 |
25 | 25 | |
26 | - 之前阶段(如设计)为前期过程,其文档和适用于维护过程的项目规则位于 YSLib 项目文档(位于 `doc/` )。 | |
27 | - | |
28 | - 其中整体过程由 `doc/Designation.txt` 指定。当前内联设计以外的过程,因此不存在设计外前期过程的单独文档。 | |
26 | + 之前阶段(如设计)为前期过程,其文档和适用于维护过程的项目规则位于 YSLib 存储库中的项目文档(位于 `doc/` )。其中整体过程由 `doc/Designation.txt` 指定。当前内联设计以外的过程,因此不存在设计外前期过程的单独文档。 | |
29 | 27 | |
30 | 28 | # 开发 |
31 | 29 |
@@ -44,7 +42,11 @@ | ||
44 | 42 | |
45 | 43 | ## 语言使用和实现要求 |
46 | 44 | |
47 | - 本节适用于本项目,不直接限制依赖项和用户程序。项目中特定部分的规则及适用性详见 YSLib 项目文档 `doc/ProjectRules.txt` 。 | |
45 | + 本节适用于 YSLib 项目,不直接限制依赖项和用户程序。项目中特定部分的规则及适用性详见 YSLib 项目文档 `doc/ProjectRules.txt` 。 | |
46 | + | |
47 | + 本节不保证所有具体要求都是完备的。特别地,这里不指定仅具体平台配置适用的要求。对一般开发者,[先决条件](Prerequisitions.zh-CN.md)中应已足够配置开发环境。 | |
48 | + | |
49 | +**原理** 本节中的要求和配置补充[先决条件](Prerequisitions.zh-CN.md),和开发环境的选型可能直接相关,为维护者提供设定平台配置要求提供基准依据。 | |
48 | 50 | |
49 | 51 | 除脚本(见以下相关章节)外,使用 ISO C++ 作为主要开发语言。 |
50 | 52 |
@@ -128,12 +130,36 @@ | ||
128 | 130 | * 这允许改进代码生成,如使用 [G++ 的 `-fno-enforce-eh-specs` 选项](https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html)。 |
129 | 131 | * 程序应不依赖违反异常规范时调用标准库的函数的行为。否则,程序行为未定义。 |
130 | 132 | |
131 | - YSLib 中具体子项目可要求更严格的实现假定,违反这些假定要求诊断,并可能在不保证支持的构建配置环境下终止构建。需要显式提供诊断时,若可行,应使用符合上述要求的可移植特性。此外,YSLib 实现可依赖可选的语言实现扩展。具体的更严格的假定和可选特性使用参见项目版本库中 `doc` 目录下的相关项目文档。 | |
133 | + YSLib 中具体子项目可要求更严格的实现假定,违反这些假定要求诊断,并可能在不保证支持的构建配置环境下终止构建。需要显式提供诊断时,若可行,应使用符合上述要求的可移植特性。此外,YSLib 实现可依赖可选的语言实现扩展。具体的更严格的假定、可选特性或非全局的特性使用参见项目版本库中 `doc` 目录下的相关项目文档。 | |
132 | 134 | |
133 | 135 | **注释** 一些诊断通过语言规则保证而无需显式提供。提供诊断使用的可移植特性的一个例子是 `#error` 预处理命令。 |
134 | 136 | |
135 | -**原理** YBase 对标准库的修正实现要求更严格的关于实现细节的假定。YBase 对标准库的不分替代(如 `std::addressof` )需依赖更严格的实现特性才能完整实现和标准库相同的保证(尽管不分保证作为 YBase 替代是可选提供的)。依赖更严格的实现假定也允许依赖和向用户代码提供特定平台配置的功能特性,以及提供质量更好的高性能实现。 | |
137 | +**原理** | |
136 | 138 | |
139 | + 本节中指定的要求通常难以以源代码的形式检查或检测,因此在此作为前提明确。一些普遍但并非严格必须作为全局依赖的特性和实现假定,可以通过源程序表达时,不在这里指定;但为简化实现,也可以通过要求的形式可选地指定。 | |
140 | + | |
141 | + YBase 对标准库的修正实现要求更严格的关于实现细节的假定。YBase 对标准库的不分替代(如 `std::addressof` )需依赖更严格的实现特性才能完整实现和标准库相同的保证(尽管不分保证作为 YBase 替代是可选提供的)。依赖更严格的实现假定也允许依赖和向用户代码提供特定平台配置的功能特性,以及提供质量更好的高性能实现。 | |
142 | + | |
143 | +**注释** | |
144 | + | |
145 | + 非全局的特性涉及的假定可能以子项目或更小的模块作为单位明确其适用范围。关于可选指定的实现要求,参见以下的[可选实现要求](#可选实现要求)。 | |
146 | + | |
147 | +### 可选实现要求 | |
148 | + | |
149 | + 以下相对[基准实现要求](#基准实现要求)更严格的实现要求默认不作为全局默认要求,而可供特定的子项目和平台配置按需启用。具体使用参见存储库中 `doc/` 目录下有关具体子项目的项目文档。 | |
150 | + | |
151 | +* 关于整数类型的假定: | |
152 | + * 1 字节具有 8 位(即 `CHAR_BIT == 8` )。 | |
153 | + * 相对 ISO C++ 要求更严格的特定整数类型的取值范围。 | |
154 | + * 语言实现和外部环境满足以下表示的要求: | |
155 | + * 除指定的例外,整数类型的表示不具有*填充位(padding bit)* ,即构成其[*对象表示(object representation)*](https://eel.is/c++draft/basic.types) 的位和[*值表示(value representation)*](https://eel.is/c++draft/basic.types#general-4)一致,但这里指定的例外除外。 | |
156 | + * **注释** 关于填充位,参见 ISO C 关于整数类型的描述。 | |
157 | + * 指定的例外包含以下情形: | |
158 | + * (可能 *cv* 限定的)`bool` 类型。 | |
159 | + * 语义和表示可能兼容 ISO C23 [`_BitInt(N)`](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2763.pdf) 的类型。 | |
160 | + * **注释** 一个例子是 LLVM 扩展 [`_ExtInt(N)`](https://blog.llvm.org/2020/04/the-new-clang-extint-feature-provides.html) 。 | |
161 | + * 其它在 YSLib 中的 API 或互操作规范中指定的允许接受的特定整数类型。 | |
162 | + | |
137 | 163 | ### 历史实现要求 |
138 | 164 | |
139 | 165 | 以下要求已被修改或取消。 |
@@ -159,7 +185,11 @@ | ||
159 | 185 | |
160 | 186 | ### 扩展特性 |
161 | 187 | |
162 | - 不依赖实现的方言扩展,但在确保实现能支持时,在特定的代码中可通过条件包含等方式选用。 | |
188 | + 除非另行指定,不依赖实现的方言扩展。 | |
189 | + | |
190 | +**注释** 在确保实现能支持时,在特定的代码中可通过条件包含等方式选用。 | |
191 | + | |
192 | + 关于语言特性中的具体使用以及启用的扩展,参见 YSLib 项目文档 `doc/LanguageRules.txt` 和 `doc/YBase.txt` 等具体部分的相关开发文档。 | |
163 | 193 | |
164 | 194 | 若实现默认具有不符合标准的特性,在本项目的代码中不依赖这些特性,即便外部依赖项可能对此进行配置(如 MinGW G++ 为了和 Microsoft VC++ 兼容启用的 `-mms-bitfields` ,而 MSYS2 安装的 freetype2 的 `pkg-config` 的 CFLAGS 隐含此参数)。 |
165 | 195 |