|
|
|
|
|
by Rusky
2332 days ago
|
|
The ABI discussed here is a bit higher level than that. Even with a fixed ABI for vtables, calling conventions, etc. you still have to care about what happens when you change a "vocabulary type" in the standard library- some changes are source-compatible but binary-breaking. For example, C++11 broke ABI at this level by changing the representation of std::string. |
|
That said in general ABI compatibility is expected of all changes, without very good reasons - security seems like a good one, performance alas not - I assume std::string got the small string optimization because they were already going to break ABI for the threading issues.
Of course it doesn’t help that c++ is still C like so implementations/use of data layout gets compiled directly into the client application :-/