On Wed, Dec 2, 2020 at 8:50 AM Andrey Semashev via Boost < boost@lists.boost.org> wrote:
On 12/2/20 6:42 PM, Jeff Garland via Boost wrote:
On Wed, Dec 2, 2020 at 3:12 AM Andrey Semashev via Boost < boost@lists.boost.org> wrote:
You have to give credit to libstdc++ developers at the very least. It maintains backward ABI compatibility across all C++ standard versions and across libstdc++ releases for many years. I think, libc++ also does the same, although I'm not following its development.
Well 'the credit' is that anything that changes the std:: ABI is a fight in the committee -- there's even a special working group - so real tough to get an ABI change into the standard. To me it makes sense that boost should break ABI like mad and the standard should strive for more stability with occasional ABI breaks.
Although the committee does monitor changes that may affect ABI in real implementations, the standard does not define the ABI. It is implementors burden to maintain a stable ABI.
It doesn't need to define ABI for it to be real -- the library implementers are very aggressive in limiting ABI breaks. The former LEWG chair (Titus) was quite vocal in wanting to remove this constraint leading to vigorous debates and a vote which basically affirmed that the committee was very split on the matter, but preferred stability. As an example of this, libstdc++ had to switch their basic_string to a
non-reference counted implementation when they added support for C++11, and they had to maintain both versions ever since. The standard, obviously, only defines one basic_string.
And that was the last ABI break that made it thru the committee -- so a good decade ago.