GCC 4.8.1 released
GCC 4.8.1 released
Posted Jun 3, 2013 18:01 UTC (Mon) by rriggs (guest, #11598)In reply to: GCC 4.8.1 released by jwakely
Parent article: GCC 4.8.1 released
Posted Jun 3, 2013 18:23 UTC (Mon)
by jwakely (subscriber, #60262)
[Link] (22 responses)
AFAIK for the default configuration the only ABI changes in a point release have been to revert ABI breakage, i.e. bugfixes to make the ABI *more* stable. The change in GCC 4.8.1 is backwards compatible for the default configuration.
I have some more C++11 ABI changes I need to make, but they'll only be for GCC 4.9.0, not a point release.
Posted Jun 3, 2013 19:24 UTC (Mon)
by rriggs (guest, #11598)
[Link] (9 responses)
Does that imply that we are likely to see a feature-complete libstdc++ in that time frame? I'm less concerned about that since Boost provides the one major feature that is currently lacking -- <regex>.
Posted Jun 3, 2013 19:57 UTC (Mon)
by jwakely (subscriber, #60262)
[Link] (8 responses)
Posted Jun 3, 2013 23:17 UTC (Mon)
by jengelh (guest, #33263)
[Link] (7 responses)
Posted Jun 4, 2013 6:18 UTC (Tue)
by khim (subscriber, #9252)
[Link]
Posted Jun 4, 2013 11:04 UTC (Tue)
by jwakely (subscriber, #60262)
[Link] (5 responses)
Posted Jun 7, 2013 3:23 UTC (Fri)
by jzbiciak (guest, #5246)
[Link] (4 responses)
...yet.
Posted Jun 7, 2013 13:31 UTC (Fri)
by jwakely (subscriber, #60262)
[Link] (3 responses)
The Bristol meeting in April was the deadline for new features to be added to C++14.
Posted Jun 7, 2013 13:47 UTC (Fri)
by jzbiciak (guest, #5246)
[Link] (2 responses)
Please ignore my failed attempt at tongue in cheek humor.
Posted Jun 7, 2013 14:52 UTC (Fri)
by jwakely (subscriber, #60262)
[Link] (1 responses)
The larger changes (e.g. filesystem library, networking library, a trivial little thing called concepts) are being done as separate "Technical Specification" documents so they can happen on separate schedules that are independent of approving a new standard.
Posted Jun 7, 2013 16:54 UTC (Fri)
by jzbiciak (guest, #5246)
[Link]
These finer grain updates sound much less disruptive.
And reading up on that "trivial little thing called concepts": That looks very useful, but feels like the kind of feature that would ripple to all corners of the language, or at least all the corners of the standard library. Probably a good thing it is on a parallel track that won't hold up a specific refresh of the C++ standard.
Posted Jun 4, 2013 7:36 UTC (Tue)
by tbleher (guest, #48307)
[Link] (11 responses)
So how stable is the C++ ABI in general? There was recently a thread on the openal list where several participants claimed that compiling a C++ program and then replacing libstdc++ with a newer version was not guaranteed to work (see e.g. this message, start of thread). This would make distributing pre-compiled C++ programs very hard. What does GCC guarantee in this regard?
Posted Jun 4, 2013 10:51 UTC (Tue)
by jwakely (subscriber, #60262)
[Link] (4 responses)
Someone should correct him for being wrong. Almost entirely wrong.
> I think they like to preserve ABI compatibility between all same point versions (e.g. 4.2.x),
GCC 4.8's libstdc++ is backward-compatible all the way back to GCC 3.4 nine years ago, but why let a few facts get in the way when you can pontificate about a subject you once read something a long time ago and forgot the details.
> ABI compatibility between minor versions is desired but not required.
100% wrong.
> I think Sun Sparc broke in one of the minor 4.x bumps (4.0 or 4.1),
[Citation needed] (It might be true, but I'm not aware of it.)
> And I don't think they like to make any guarantees about the STL compatibility.
100% wrong.
> No, that is dependent on packaging managers/distros.
Wrong, symbol versioning is used in the default configuration on GNU/Linux and Solaris (at least.)
Posted Jun 5, 2013 19:51 UTC (Wed)
by nix (subscriber, #2304)
[Link]
Posted Jun 6, 2013 19:27 UTC (Thu)
by zlynx (guest, #2285)
[Link] (2 responses)
I don't have an example to point to right this instant but I have definitely hit serious C++ ABI bugs in the past while running Gentoo. I updated to GCC 4.something and older C++ programs started segfaulting.
Not to mention that on IA64 important things like exception handlers would just fail to catch exceptions every other GCC version.
This past experience is why the C++ library that I'm responsible for at work is built for each customer's particular Linux distribution rather than trying to build one binary that works for everybody. It's also why everything is hidden behind a private implementation pointer and there is NO USAGE of anything inline in the includes.
Posted Jun 7, 2013 17:46 UTC (Fri)
by khim (subscriber, #9252)
[Link]
True, but what does it change? You can say the same about Android, GLibC, Linux, Windows or any other project which is serious about ABI compatibility. It's your choice but it does not prove anything. Somehow others can build one binary and it works just fine. I've seen problems with many libraries but libstdc++ was never a problem. It's certainly possible to build libstdc++ in a fashion which will make it incompatible, but most major distributions carry LSB-compatible libstdc++ and work just fine with a single binary.
Posted Jun 7, 2013 19:45 UTC (Fri)
by jwakely (subscriber, #60262)
[Link]
And I cannot parse a sentence containing both "on IA64" and "important things" ;)
Posted Jun 4, 2013 11:20 UTC (Tue)
by jwakely (subscriber, #60262)
[Link] (5 responses)
If you use C++11 then in general you can combine C++11 code built with GCC 4.X and C++03 code built with any GCC, but there is not the same guarantee that you can combine with C++11 code built with GCC 4.Y or GCC 4.Z, because the C++11 features are not all stable yet (e.g. for GCC 4.9 I'm about to add a new virtual function to a base class in <future>.) This is why C++11 support is still labelled "experimental", because it would be worse to claim it's stable and then have to break the ABI.
Posted Jun 7, 2013 18:19 UTC (Fri)
by luto (guest, #39314)
[Link] (4 responses)
Also, what happens if/when C++ gets real empty member support (e.g. "T [[allow_empty]] allocator" or whatever other ideas might be floating around)? Can libstdc++ start using these in a way that won't change the ABI?
Posted Jun 7, 2013 19:36 UTC (Fri)
by jwakely (subscriber, #60262)
[Link] (3 responses)
I don't think libstdc++ has any need for empty member support, I'm not sure the language needs it either.
Posted Jun 7, 2013 21:24 UTC (Fri)
by luto (guest, #39314)
[Link] (2 responses)
Writing "Allocator [[allow_empty]] a;" would be prettier and a lot less verbose than using fancy empty-base-optimized tuples, not to mention easier to deal with in gdb.
Posted Jun 7, 2013 23:44 UTC (Fri)
by jwakely (subscriber, #60262)
[Link] (1 responses)
Posted Jun 8, 2013 0:46 UTC (Sat)
by luto (guest, #39314)
[Link]
GCC 4.8.1 released
GCC 4.8.1 released
GCC 4.8.1 released
GCC 4.8.1 released
True, but there are different levels of non-feature-completeness. <regex>, in particular, was standartized six years ago. It's one thing to not support something brand-spanking-new, it's another thing not to support something many years old.
GCC 4.8.1 released
GCC 4.8.1 released
GCC 4.8.1 released
there's nothing as complicated as <regex> or UTF8 code conversion facets in C++14.
GCC 4.8.1 released
GCC 4.8.1 released
GCC 4.8.1 released
GCC 4.8.1 released
ABI stability
AFAIK for the default configuration the only ABI changes in a point release have been to revert ABI breakage, i.e. bugfixes to make the ABI *more* stable. The change in GCC 4.8.1 is backwards compatible for the default configuration.
ABI stability
ABI stability
ABI stability
ABI stability
If GCC didn't break ABI compatibility there wouldn't be the need to fix it in GCC point releases.
This past experience is why the C++ library that I'm responsible for at work is built for each customer's particular Linux distribution rather than trying to build one binary that works for everybody.
ABI stability
ABI stability
ABI stability
ABI stability
ABI stability
I don't think libstdc++ has any need for empty member support, I'm not sure the language needs it either.
As far as I know, it's always possible to replace member variables with inheritance, but IMO it's somewhere between ugly and insanely ugly.
ABI stability
ABI stability