LLVM 10.0
lists.llvm.org
lists.llvm.org
I just published a blog post[2] about this. You can use `zig cc` in the place of `clang`, and it'll unlock cross compilation.
[1]: https://ziglang.org/download/
[2]: https://andrewkelley.me/post/zig-cc-powerful-drop-in-replace...
`zig cc` in some ways is now a better C compiler than clang/gcc. To me that's even crazier than everything else that is happening in the world right now.
Is it just me? Why do compiler version numbers increase so faster now?
(I read these release notes, it seems quite nice but is it a major version?)
http://blog.llvm.org/2016/12/llvms-new-versioning-scheme.htm...
I feel they are changing the version too quickly (I usually keep an eye out for the major version bumps, and with LLVM I just ignore them now)
Personally, though I agree the version number is going up too quickly, I appreciate that it at least aligns with their policy on breaking changes (which is to provide no hard guarantees on backwards compatibility).
4.0.0-4.9.4 (last) was Apr 2005 - Dec 2016. Almost 12 years. Starting in 5.x they dropped the 3rd release digit and started bumping the major version more frequently. Between Apr 2015 and the present, GCC has put out 5.x, 6.x, 7.x, 8.x, and 9.x.
If anything, as another user mentioned, this version scheme is probably more honest to the way LLVM actually works anyway, because in practice every release has major breaking changes, and this scheme (in theory) better reflects that. At least with Firefox, most versions N and N+1 don't just visibly break tons of functionality for a user, so you could argue the increase is too rapid for what are (mostly) incremental changes. But LLVM's client base is much more vulnerable to major change and in practice it does break tons of APIs and make tons of changes release-to-release.
So there is no notion of big or small releases. Hence the seemingly fast increase of version numbers.
Although I would argue that it should change by 0.5 per feature or something like that, so that if it has 10 new features the version number will be 5 higher, but only 2 new features will be 1 higher. Because Java has changed very little from 8 to 12, whereas Firefox's last 4 changes were altogether bigger.
3.x - 4 years
4.x - 10 years
Honestly, if nothing else, I hated seeing all the
#if defined __GNUC__ &&
(__GNUC__ > 4 ||
__GNUC__ == 4 && __GNUC_MINOR__ >= 2)For example, overly eager diagnostic warnings have come at the cost of an increased need to disable diagnostics--perfectly standard-compliant code, not to mention widely supported extensions, will often trigger diagnostics with -Wall. You can disable those inline (and I try, because good luck trying to figure out what's the equivalent of CFLAGS in the build pipeline du jour, or simply expecting the user to figure it out), but they often have different names in different compilers and sometimes you have to resort to version guards to maintain a diagnostic-free build out-of-the-box.
Also, the default compiler on RHEL7 is GCC 4.8, which lacks __has_attribute and friends, among other things. EOL for RHEL7 is 2024! And __has_builtin didn't even come around until GCC 10, and didn't work reliably prior to clang 11.
The 4.3.0 release was significant for at least two reasons:
1. True C99 "inline" support
2. Switch to the GPL3Semi-annual releases are nice, features ship when they are ready, and releases aren't delayed because that feature that's taking just a tiny bit longer than expected, well, it'll be fully baked by next year's release.
Oh man, I've seen that check somewhere..
namely, I've had to port the init-array-or-ctors decision code from clang to LDC, because LDC was just using LLVM defaults, and LLVM defaulted to ctors on FreeBSD/AArch64, which doesn't support ctors, but that was only noticeable with the LLD linker, because bfd and gold were quietly (!) converting ctors to init_array (!!) as a performance optimization (!!!)
ref: https://github.com/ldc-developers/druntime/pull/146#issuecom...
Edit: couldn't find how to use a raw * next to text without it changing the formatting in HN.