BCS*_*BCS 12 c++ compiler-construction standards
大多数标准库的实现似乎相当简单,无论是从库的其他部分、操作系统系统调用还是裸 C++ 代码来看。更多位(例如<atomic>
)可能需要 ASM 实现
但至少有一些位看起来只能根据编译器内在函数来实现(例如,<source_location>
当然,std::has_virtual_destructor
, 的其他一些部分<type_traits>
等)。
最后一组特别令人感兴趣,因为它有点模糊了标准库和语言标准本身之间的界限。这可能是编译器之间库实现可移植性的最重要限制之一。
具体来说,我的问题是:
是否有属于最后一类的零件的明确列表?该标准在谈论这些事情时是否使用了特定术语?
编辑:
作为一点背景信息,这个问题是在关于“引导”编译器和库堆栈是什么样子的思想实验中出现的。这是一个与平台无关的源代码球,只需绝对最少的手动步骤和外部依赖项,即可获得完全符合标准的库和编译器。重点不是性能,而是健壮性、简单性和“相信它实际上是正确的”外部依赖的最小内核。
因此,实践中通常完成的方式,或者标准委员会划分它们的方式,甚至制作快速编译器所需的内容(无论哪种意义上)都不会自动相关。
C++ 规范并没有真正考虑将库与语言分开,因此任何答案都将是相当空洞的。然而,我们可以利用一个怪癖来找到答案……
\nhttps://eel.is/c++draft/requirements#compliance
\n\n\n“16.4.2.5 独立实现”
\n
\n\n...独立实现具有实现定义的标头集。该集应至少包括表 27 中所示的标头。
\n
子条款 | 标头 | ||
---|---|---|---|
[支持类型] | 常见定义 | <cstddef> | |
[cstdlib.syn] | C标准库 | <cstdlib> | |
[支持限制] | 实现属性 | <cfloat>、\xc2\xa0<限制>、\xc2\xa0<限制>、<版本> | |
[cstdint.syn] | 整数类型 | <cstdint> | |
[支持动态] | 动态内存管理 | <新> | |
[支持.rtti] | 类型识别 | <类型信息> | |
[支持.srcloc] | 源位置 | <源位置> | |
[支持.异常] | 异常处理 | <异常> | |
[支持.initlist] | 初始化列表 | <初始化列表> | |
[化学机械] | 比较 | <比较> | |
[支持.协程] | 协程支持 | <协程> | |
[支持.运行时] | 其他运行时支持 | <cstdarg> | |
[概念] | 概念库 | <概念> | |
[错误号] | 错误编号 | <cerrno> | |
[系统错误] | 系统错误支持 | <系统错误> | |
[记忆] | 记忆 | <记忆> | |
[类型.性状] | 类型特征 | <类型特征> | |
[比率] | 编译时有理算术 | <比例> | |
[公用事业] | 实用组件 | <实用程序> | |
[元组] | 元组 | <元组> | |
[选修的] | 可选对象 | <可选> | |
[变体] | 变体 | <变体> | |
[预期的] | 预期对象 | <预期> | |
[函数.对象] | 函数对象 | <功能性> | |
[字符转换] | 原始数字转换 | <字符转换> | |
[少量] | 位操作 | <位> | |
[字符串.视图] | 字符串视图类 | <字符串视图> | |
[字符串.类] | 字符串类 | <字符串> | |
[c.字符串] | 空终止序列实用程序 | <cstring>,\xc2\xa0<cwchar> | |
[大批] | 类模板\xc2\xa0array | <数组> | |
[连续视图] | 连续访问 | <跨度> | |
[视图.multidim] | 多维访问 | <mdspan> | |
[迭代器] | 迭代器库 | <迭代器> | |
[范围] | 范围库 | <范围> | |
[算法] | 算法库 | <算法>,\xc2\xa0<数字> | |
[c.数学] | 浮点类型的数学函数 | <数学数学> | |
[原子] | 原子学 | <原子> | |
[调试] | 调试 | <调试> |
据我所知,这是标准库中需要编译器支持且无法编写为独立于编译器的部分列表的超集。官方没有这么说,但实际上,这个列表是我发现的最接近客观答案的列表。
\n实际上,其中一些可以用可移植的 C++ 编写,例如std::string
.
归档时间: |
|
查看次数: |
389 次 |
最近记录: |