5 ms·
Overview of C++ language support in Apple Clang
- rgovostes 3y agoWhen did they start calling it Apple Clang? It was Apple LLVM Compiler for the longest time.
- todd8 3y agoAs far back as 2007 it was called clang. I'm not sure if it was called clang internally before that. See the seventh slide in the linked presentation. https://web.archive.org/web/20190403123249/http://llvm.org/devmtg/2007-05/09-Naroff-CFE.pdf https://web.archive.org/web/20190403123249/http://llvm.org/d...
- rgovostes 3y agoApple has publicly referred to the compiler that they ship with Xcode as the "Apple LLVM Compiler", even though the command line tool was still "clang". E.g., `clang --version` might have reported "Apple LLVM version 7.0.0 (clang-700.1.76)" instead of what it says now, "Apple clang version 14.0.3" on my system. MacPorts suggests that the --version string changed in Xcode 11 with macOS 10.14 Mojave, but I don't know if the Clang name was reflected in the Xcode GUI at that point. https://trac.macports.org/wiki/XcodeVersionInfo https://trac.macports.org/wiki/XcodeVersionInfo
- abhibeckert 3y agoThey're not the same thing. Clang is a compiler for C and C++ and Objective-C and Objective-C++. LLVM is the underlying technology which is used by clang, but it's also used by other compilers (e.g. Swift uses LLVM, and some major JavaScript compilers as well). Neither is owned by Apple - they're open source projects with contributors from Microsoft, Google, ARM, Intel, AMD and many others.
- rgovostes 3y agoApple has publicly referred to the C/C++/Objective-C compiler that ships with Xcode as the "Apple LLVM Compiler", apparently a marketing name for their variant of Clang. I was commenting on the fact that the linked article refers to "Apple Clang" which is a deviation from a long-standing practice. I understand the difference between Clang and LLVM; I've committed to both.
- sanjeetsuhag 3y agoNo std::format? Or am I just not searching for the right thing?
- meragrin_ 3y agoNo clue what it will appear as once it is there, but I'm not seeing it listed as Apple supported in the cppreference table either. It is listed as "Text Formatting" there. https://en.cppreference.com/w/cpp/compiler_support https://en.cppreference.com/w/cpp/compiler_support
- gumby 3y agoThis just lists what they do support, not what they leave out compared to the free alternatives. Here's a better chart -- look at all that red in the Apple clang column: https://en.cppreference.com/w/cpp/compiler_support https://en.cppreference.com/w/cpp/compiler_support I don't understand why they deviate so much from mainstream clang. I think they'd be better off being closer to the trunk. TBH I don't really understand why they have their own tree at all.
- saurik 3y agoFWIW, I don't know how much they actually "deviate" (and in fact I do think they have a bunch of likely-needless changes) but they definitely lag a bit what they ship, so the core issue is just that they are behind a version or two, so the differences are almost entirely just "the stuff introduced in clang/libc++ 15/16+" with maybe one or two backports. If it makes you feel any better, the Android NDK copy of clang isn't far off of upstream clang and yet they also often are shipping a slightly older version... it just doesn't warrant its own column as they expose the underlying clang version number, while Apple does this really really annoying thing where the version number of clang is hacked to report a version number based on the Xcode release cycle (so the moral equivalent would be if Android NDK r25c modified clang 16 to report version 25... they don't do that, so they don't really need to be treated as their own compiler ever.)
- pjmlp 3y agoUnless it changed, tracking down what Android NDK ships is even worse, tracking down git hash codes to guess which clang was imported into NDK rXX.
- pjmlp 3y agoUpdate to myself, not only it hasn't had a release since July 2022, we are suppose to track down which LLVM 14 release, the hash clang-r450784d actually maps to, like always. https://developer.android.com/ndk/downloads https://developer.android.com/ndk/downloads
- 3y ago
- saagarjha 3y agoNeat! I kept pestering them about how to figure this stuff out and hopefully they got enough people doing it that they finally made a page for it.
- cozzyd 3y agoThe parallel versioning scheme of apple clang is truly annoying, as it often interferes with feature detection macros
- theirixhn 3y agoFinally, it's great that Apple added library support for ranges and PMR (memory resource) support. Currently, with a stable Xcode, you are living with clang 14. Link [1] is helpful for matching clang versions and placing preprocessor guards. Many new features (like pmr) were available in 'experimental' headers but not implemented in libc++ or any experimental library that lies nearby 'libc++'. Usually, I expect an experimental library like libstdc++fs that contains the implementation of experimental features. Starting with Xcode 15, I have seen a 'libc++experimental.a' library in a package. Could someone confirm the existence of this library in a beta installation? [1] https://en.wikipedia.org/wiki/Xcode#Xcode_11.0_-_14.x_(since_SwiftUI_framework)_2 https://en.wikipedia.org/wiki/Xcode#Xcode_11.0_-_14.x_(since...
- jcelerier 3y ago> and PMR (memory resource) support. note that this sadly will require your users to use a macOS version that isn't even released yet (or rebuild your own libc++) as Apple ties libc++ to the OS releases. when I see the amount of people around me still on 10.x...
- theirixhn 3y agoThank you, good point. It is a small note "Minimum deployment target" at the original article. Seems like features tied to target OS are: PMR, filesystem, to_chars/from_chars and newest atomic-based synchronisation primitives.
- jcelerier 3y agostd::variant and std::optional also don't work below 10.14
- Athas 3y agoDoes anyone know why the clang that comes with macOS does not support OpenMP, even though upstream clang does? I use OpenMP to teach basic parallel programming, and it is really annoying that the macOS users have to install another compiler to get it working. (The problem is exacerbated by the ridiculous fact that macOS includes a 'gcc' alias that is not in fact GCC, and which risks shadowing a proper GCC that the students install themselves.)
- typesanitizer 3y agoI don't know the answer to your original question, but based on this StackOverflow answer (https://stackoverflow.com/a/60564952/2682729 https://stackoverflow.com/a/60564952/2682729), it seems like a small compiler wrapper should do the trick to get the same experience across platforms without having to install another compiler. Depending on the platforms you need to support, a more heavyweight but more reproducible solution would be to use a fixed LLVM toolchain, say using Bazel.
- cpgxiii 3y agoWhen Apple initially moved to clang instead of GCC, clang did not support OpenMP. Apple chose vendor lock-in with Grand Central Dispatch (in the same way they would chose vendor lock-in with Metal years later) rather than invest the time in the existing work on a competitive clang OpenMP implementation. I think the track record of Apple on supporting anything standardized speaks for itself (see OpenGL, OpenCL, OpenMP, C & C++ features, etc) - Apple gives as few fucks about cross-platform development as possible. Apple sees its platform being so valuable that developers will jump through whatever hoops Apple puts in their way, and largely their developers put up with this.
- trelane 3y ago> Apple chose vendor lock-in with Grand Central Dispatch I will note here that this vendor lock-in is one of the (if not the) main reasons Apple et al. moved away from the GPLed GCC. The ability to lock in users is the central difference between open source and Free Software. As such, this is WAI from the Open Source perspective.
- ERUIONKP 3y ago[flagged]
- classified 3y ago> De-deprecating volatile compound operations. Thank goodness. Those deprecatios are a pain in the butt.
- leni536 3y agoI kind of understand that for embedded. Where do you need to use it when targeting MacOS?
- cryptonector 3y agoTIL about P2327R1 (De-deprecating volatile compound operations) [0] and the earlier (P1152) deprecation of volatile compound expressions due to those giving the incorrect appearance of atomicity. I'm shaking my head. The `volatile` keyword has a very specific and useful meaning, and P1152 should never have happened. [0] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2327r1.pdf https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p23...