关于clang
https://en.wikipedia.org/wiki/Clang
7 September 2017 | Clang 5.0.0 released |
19 January 2018 | Clang becomes default compiler in OpenBSD 6.3 on arm.[54] |
5 March 2018 | Clang is now used to build Google Chrome for Windows.[55] |
8 March 2018 | Clang 6.0.0 released |
5 September 2018 | Clang is now used to build Firefox for Windows.[56] |
19 September 2018 | Clang 7.0.0 released |
20 March 2019 | Clang 8.0.0 released |
1 July 2019 | Clang becomes default compiler in OpenBSD 6.6 on mips64.[57] |
19 September 2019 | Clang 9.0.0 released with official RISC-V target support.[58] |
29 February 2020 | Clang becomes the only C compiler in the FreeBSD base system, with the removal of GCC.[59] |
24 March 2020 | Clang 10.0.0 released |
2 April 2020 | Clang becomes default compiler in OpenBSD 6.7 on powerpc.[60] |
12 October 2020 | Clang 11.0.0 released |
21 December 2020 | Clang becomes default compiler in OpenBSD 6.9 on mips64el.[61] |
14 April 2021 | Clang 12.0.0 released |
4 October 2021 | Clang 13.0.0 released |
25 March 2022 | Clang 14.0.0 released |
关于LLVM
在 Xcode 中,LLVM 编译器使用 Clang 前端(LLVM.org 上基于 C 的语言项目)来解析源代码并将其转换为临时格式。然后 LLVM 代码生成层(后端)将该临时格式转换为最终的机器代码。Xcode 还包括 LLVM GCC 编译器,它使用 GCC 编译器前端以获得最大的兼容性,以及 LLVM 后端,它利用 LLVM 的高级代码生成器。这显示了基于库的编译器开发方法的灵活性。由于采用 LLVM,Xcode 还可以使用许多其他功能,例如链接时间优化、更详细的诊断信息,甚至静态分析。
The LLVM Compiler Infrastructure Project
C++ Support in Clang
Clang – C++ Programming Language Status
Clang implements the following published and upcoming ISO C++ standards:
Language Standard | Flag | Available in Clang? |
---|---|---|
C++98 / C++03 | –std=c++98 | Yes (other than export) |
C++11 | –std=c++11 | Clang 3.3 |
C++14 | –std=c++14 | Clang 3.4 |
C++17 | –std=c++17 | Clang 5 |
C++20 | –std=c++20 | Partial |
C++2b (tentatively C++23) | –std=c++2b | Partial |
It’s just that Apple Clang and LLVM Clang use different release cycles. So one release 13.0 is not the same as the other release 13.0…
Compiler support for C++20 – cppreference.com
Compiler support for C++20
Compiler support for C++20 – cppreference.com
C++ 编译器支持
C++ compiler support – cppreference.com
Xcode与clang版本关系
Xcode clang version record · GitHub
https://en.wikipedia.org/wiki/Xcode#Toolchain_versions
macOS 系统与Xcode版本关系概览
Xcode Release Notes Clang相关更新
Apple Developer Documentation
Xcode 13
Apple clang version 13.0.0 (clang-1300.0.29.3)
包括适用于 iOS 15、iPadOS 15、tvOS 15、watchOS 8 和 macOS Big Sur 11.3 的 SDK。Xcode 13 版本支持 iOS 9 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。
Xcode 13 需要运行 macOS 11.3 或更高版本的 Mac。
Xcode 13.3
Apple clang version 13.1.6 (clang-1316.0.21.2)
包括适用于 iOS 15.4、iPadOS 15.4、tvOS 15.4、watchOS 8.5 和 macOS Monterey 12.3 的 SDK。Xcode 13.3 版本支持 iOS 15.4、iPadOS 15.4、tvOS 15.4、watchOS 8.5 及更高版本的设备上调试。Xcode 13.3 需要运行 macOS Monterey 12 或更高版本的 Mac。
新功能
-
Clang 现在遵循 C++ 标准的要求。因此,编译器可以删除无限循环而不会产生副作用。如果您的代码具有无限循环而编译器必须保留的可观察到的副作用,请考虑使用。(84717970)
[intro.progress]
-fno-finite-loops
-
Xcode 不再传递
-stdlib=libstdc++
给 Clang,因为 Clang 在 Apple 平台上不再支持该库。如果您的项目定义了构建设置,请将其删除,因为它不再执行任何操作。(83768231)CLANG_CXX_LIBRARY
Xcode 12.5
Apple clang version 12.0.5 (clang-1205.0.22.9)
包括适用于 iOS 14.5、iPadOS 14.5、tvOS 14.5、watchOS 7.4 和 macOS Big Sur 11.3 的 SDK。Xcode 12.5 版本支持 iOS 9 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 12.5 需要运行 macOS Big Sur 11 或更高版本的 Mac。
新功能
-
Clang 现在从方法
+new
上的可用性注释中推断出可用性-init
。由于+new
调用[[Foo alloc] init]
,+new
除非可用,否则+init
不可用。(75884815) -
在使用 libc++ 调试 C++ 程序时,LLDB 现在为 STL 容器和算法提供改进的表达式评估支持。(19866497)
Xcode 11
Apple clang version 11.0.0 (clang-1100.0.33.8)
可在 Mac App Store 中获得,包括适用于 iOS 13、macOS Catalina 10.15、watchOS 6 和 tvOS 13 的 SDK。Xcode 11 支持对运行 iOS 13.1 的设备进行开发。Xcode 11 支持 iOS 8 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 11 需要运行 macOS Mojave 10.14.4 或更高版本的 Mac。
-
Clang 现在提供了一种控制退出时间析构函数注册的机制。您可以使用 flag 全局禁用这些
-fno-c++-static-destructors
,或应用该属性来禁用特定变量的析构函数。还添加了该属性以在使用时启用特定变量的析构函数。(21734598)[[clang::no_destroy]]
[[clang::always_destroy]]
-fno-c++-static-destructors
Xcode 11.5
Apple clang version 11.0.3 (clang-1103.0.32.62)
可在 Mac App Store 中获取,包括适用于 iOS 13.5、iPadOS 13.5、tvOS 13.4、watchOS 6.2 和 macOS Catalina 10.15.4 的 SDK。Xcode 11.5 版本支持 iOS 8 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 11.5 需要运行 macOS Catalina 10.15.2 或更高版本的 Mac。
Xcode 10
Apple LLVM version 10.0.0 (clang-1000.11.45.2)
已在 Mac App Store 中提供,包括适用于 iOS 12、watchOS 5、macOS 10.14 和 tvOS 12 的 SDK。Xcode 10 支持 iOS 8 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 10 需要运行 macOS 10.13.6 或更高版本的 Mac。
新功能
已解决的问题
弃用
-
使用 libstdc++ 构建已在 Xcode 8 中弃用,并且在针对 iOS 时在 Xcode 10 中不受支持。C++ 项目现在必须迁移到 libc++,并且建议将部署目标设置为 macOS 10.9 或更高版本,或者 iOS 7 或更高版本。除了更改 C++ 标准库构建设置外,开发人员还应审核硬编码的链接器标志和目标依赖项以删除对 libstdc++ 的引用(包括 –lstdc++、-lstdc++.6.0.9、libstdc++.6.0.9.tbd 和 libstdc++.6.0。 9.dylib)。项目依赖项(例如针对 libstdc++ 构建的静态档案)也需要针对 libc++ 重新构建。(40885260)
-
Libgcc 已过时。Xcode 10 无法再构建部署目标为 macOS 10.4 和 10.5 的应用程序。(42818150, 38035243)
Xcode 10.2
Apple LLVM version 10.0.1 (clang-1001.0.46.3)
包括适用于 iOS 12.2、watchOS 5.2、macOS 10.14.4 和 tvOS 12.2 的 SDK。Xcode 10.2 支持 iOS 8 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 10.2 需要运行 macOS 10.14.3 或更高版本的 Mac。
新功能
-
-Watomic-implicit-seq-cst
是一个新警告,默认关闭,当 C_Atomic
或与隐式、顺序一致的排序一起使用时发出警告。大多数代码库默认使用顺序一致性,但有些要求开发人员在任何地方都使用显式排序。此警告适用于后一组。(28172966)__sync_*
-
新的诊断识别使用引号包含而不是框架样式包含的框架标头。默认情况下警告是关闭的,但您可以通过传递
-Wquoted-include-in-framework-header
来启用它clang
。(37077034) -
-Wmemset-transposed-args
是一个新警告,用于诊断memset
对第二个和第三个参数转置的调用。例如,以下调用被诊断为带有新警告:memset(buf, sizeof(buf), 0)
. (42360478) -
的构造函数现在根据其成员的相应构造函数是否为. 这是一个符合标准的扩展,它具有潜在的性能优势,以防对于不会在构造时抛出异常的类型进行更快的操作。(29537079)
std::pair
noexcept
noexcept
-
在 a或 a中使用非常量可调用谓词的警告现在显示了错误容器的实例化点,而不是不相关的实现细节。(41370747)
std::map
std::set
-
<experimental/any>
和标<experimental/optional>
头已被弃用,取而代之的是它们的 C++17 对应标头:<any>
和<optional>
. 它们将在 Xcode 的未来版本中删除,您不应依赖它们的存在。(46903112) -
已删除使用内联宏来控制 libc++ 标头中符号的可见性,以提供更好的解决方案。这应该会导致包含 libc++ 标头的代码的代码大小和性能得到改进,并在使用 libc++ 时显着改进调试体验。(47259325)
-
框架中的公共标头可能会错误地
#import
或#include
私有标头,这会导致分层违规和潜在的模块循环。有一个报告此类违规行为的新诊断程序。OFF
默认情况下,它clang
由-Wframework-include-private-from-public
标志控制。(38712182) -
在框架中使用
@import
标头可防止在没有模块的情况下使用标头。当您传递标志时,新的诊断会检测@import
框架头文件的使用。-fmodules
诊断OFF
默认情况下clang
使用-Watimport-in-framework-header
标志进行控制。(39192894) -
以前,在为框架声明模块时省略
framework
关键字不会影响编译,但会默默地做错事。一个新的诊断,-Wincomplete-framework-module-declaration
和一个新的修复——它建议添加适当的关键字。当您将-fmodules
标志传递给clang
. (39193062)
已解决的问题
-
静态分析器现在会在 C++ 对象在其内容被移动后被使用时发出警告,除非该对象在使用前被重置为已知状态。(41349073)
-
静态分析器现在检查是否违反了 IOKit 和 libkern 引用计数规则。这些违规行为可能导致泄漏和释放后使用问题。(46359592)
Clang 14.0.0 Release Notes
Clang 14.0.0 Release Notes — Clang 14.0.0 documentation
Clang 15.0.0git documentation
Clang 15.0.0git documentation
“libc++” C++ Standard Library
“libc++” C++ Standard Library — libc++ 15.0.0git documentation
Libc++ aims to support common compilers that implement the C++11 Standard. In order to strike a good balance between stability for users and maintenance cost, testing coverage and development velocity, libc++ drops support for older compilers as newer ones are released.
Compiler | Versions | Restrictions | Support policy |
---|---|---|---|
Clang | 13, 14 | latest two stable releases per LLVM’s release page | |
AppleClang | 13 | latest stable release per Xcode’s release page | |
Open XL | 17.1 (AIX) | latest stable release per Open XL’s documentation page | |
GCC | 11 | In C++11 or later only | latest stable release per GCC’s release page |
Libc++ also supports common platforms and architectures:
Target platform | Target architecture | Notes |
---|---|---|
macOS 10.9+ | i386, x86_64, arm64 | Building the shared library itself requires targetting macOS 10.11+ |
FreeBSD 10+ | i386, x86_64, arm | |
Linux | i386, x86_64, arm, arm64 | |
Windows | i386, x86_64 | Both MSVC and MinGW style environments |
AIX | powerpc, powerpc64 |
关于Clang
原文地址:https://blog.csdn.net/liang890319/article/details/124880339
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_44278.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!