Arm Compiler 6 基于 Clang 和 LLVM 技术构建。因此,它具有比文档中描述的产品特性集更多的功能。以下定义阐明了对这些特性所期望的功能的支持和保证级别。
Arm 欢迎有关使用所有 Arm Compiler 6 功能的反馈,并努力支持用户达到适合该功能的水平。
文档中的标识
Arm Compiler 6 文档中记录的所有功能都是产品功能,除非明确说明。明确说明了非产品功能的限制。
产品特点
产品特性适合在生产环境中使用。该功能经过充分测试,预计在功能和更新版本中保持稳定。
Arm 努力提前通知产品特性的重大功能更改。
如果您有支持和维护合同,Arm 将为使用所有产品功能提供全面支持。
Arm 欢迎有关产品功能的反馈。
Arm 遇到或意识到的任何产品功能问题都会考虑在 Arm 编译器的未来版本中进行修复。
除了完全支持的产品功能外,某些产品功能只是 alpha 或 beta 质量。
测试版产品功能
Beta 产品功能已实现完整,但尚未经过充分测试以被视为适合在生产环境中使用。
Beta 产品功能用 [BETA] 表示。
Arm 努力记录对 beta 产品功能的已知限制。
Beta 产品功能有望最终成为 Arm Compiler 6 未来版本中的产品功能。
Arm 鼓励使用 beta 产品功能,并欢迎对它们提供反馈。
Arm 遇到或发现的任何与 beta 产品功能有关的问题都将考虑在 Arm 编译器的未来版本中进行修复。
阿尔法产品特点
Alpha 产品功能未完成,在未来版本中可能会发生变化,因此稳定性水平低于 Beta 产品功能。
Alpha 产品功能用 [ALPHA] 表示。
Arm 努力记录 alpha 产品功能的已知限制。
Arm 鼓励使用 alpha 产品功能,并欢迎对它们提供反馈。
Arm 遇到或意识到的任何与 alpha 产品功能有关的问题都会考虑在 Arm 编译器的未来版本中进行修复。
社区特色
Arm Compiler 6 基于 LLVM 技术构建,并尽可能保留该技术的功能。这意味着 Arm 编译器中还有其他可用的功能,这些功能未在文档中列出。这些附加功能称为社区功能。有关这些社区功能的信息。
在文档中引用社区功能的地方,它们用 [COMMUNITY] 表示。
Arm 不对这些功能的质量水平或功能程度做出任何声明,除非在本文档中明确说明。
功能可能会在功能版本之间发生显着变化。
Arm 不保证社区功能将在更新版本中保持功能,尽管预计不太可能发生变化。
某些社区功能在未来可能会成为产品功能,但 Arm 没有为此提供路线图。Arm 有兴趣了解您对这些功能的使用情况,并欢迎提供反馈。Arm 会尽最大努力支持客户使用这些功能,除非这些功能不受支持。Arm 接受有关这些功能的缺陷报告,但不保证这些问题将在未来的版本中得到修复。
社区功能使用指南
在评估社区功能发挥作用的可能性时,需要考虑几个因素:
下图展示了 Arm Compiler 6 工具链的结构:
图 1-1 Arm Compiler 6 中的集成边
虚线框是工具链组件,这些组件之间的任何交互都是集成边界。跨越集成边界的社区特性可能在功能上有很大的限制。例外情况是,如果交互被编入 Arm Compiler 6 支持的标准之一。不跨越集成边界的社区功能更有可能按预期工作。
主要用于针对托管环境(如 Linux 或 BSD)的功能在针对裸机环境时可能有很大的限制,或者可能不适用。
编译器功能的 Clang 实现,尤其是那些在其他工具链中已经存在很长时间的功能,很可能已经成熟。新特性的功能,例如对新语言特性的支持,可能不太成熟,因此更可能具有有限的功能。
不支持的功能
对于产品和社区功能类别,已知特定功能和用例无法正常运行,或者不适合与 Arm Compiler 6 一起使用。
文档中说明了产品功能的限制。Arm 无法提供不支持的功能或社区功能用例的详尽列表。社区功能的已知限制在 社区功能 中列出。
已知不支持的功能列表
以下是不受支持的功能的不完整列表,并且可能会随着时间的推移而变化:
-stdlib=libstdc++不支持Clang 选项。
与标准 C++ 库链接时,局部变量的 C++ 静态初始化不是线程安全的。对于线程安全,您必须提供您自己的线程安全函数实现,如标准 C++ 库实现定义中所述。
笔记
此限制不适用于 [ALPHA] 支持的多线程 C++ 库。
不支持使用 C11 库功能。
不支持仅与非 Arm 架构相关的任何社区功能。
不支持对实现早于 Armv7 或 Armv6-M 架构的目标进行编译。
由于当前 Arm C 库的限制,AArch64 状态不支持该数据类型。long double
由于当前 Arm C 库的限制,不支持复数。
原作者:Arm Developer