LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

Если же интерфейс написан на c++ и из него торчит STL, то код, собранный с другими -std даже если и соберётся, то модет не слинковаться.

STL имеет стабильный ABI. (и MS STL, и libc++ и libstdc++)

Так что можно линковаться не просто код с разными стандартами одного компилятора, а с разными стандартами разных версий одного компилятора.

поэтому появляются такие заметки,

https://ztdidk.readthedocs.io/en/latest/benchmarks/bit.html#details

https://cor3ntin.github.io/posts/abi/

и всякие майданутые от этого горят: https://twitter.com/vzverovich/status/1487080205399302152

Но ABI замораживается не сразу. В Visual C++ если ты собираешь код с флагами с конкретными числами: /std:c++14, /std:c++17, /std:c++20, то тогда ты используешь то что уже стабилизированно. /std:c++latest - это самые новые возможности, но у разработчиков ещё есть право что-то поменять и поломать ABI.

В gcc примерно также, там в заметках о выпуске пишут какой стандарт поддерживается экспериментально, а какой стабильно. Если экспериментальная поддержка, то ABI могут поменять.

Вот разработчик gcc это подтверждает: https://www.reddit.com/r/cpp/comments/ubs8fc/comment/i6b3u88/?utm_source=share&utm_medium=web2x&context=1

Наверное поэтому ты думал, что у стандартной библиотеки С++ нестабильный ABI.

Исходная версия fsb4000, :

Если же интерфейс написан на c++ и из него торчит STL, то код, собранный с другими -std даже если и соберётся, то модет не слинковаться.

STL имеет стабильный ABI. (и MS STL, и libc++ и libstdc++)

Так что можно линковаться не просто код с разными стандартами одного компилятора, а с разными стандартами разных версий одного компилятора.

поэтому появляются такие заметки,

https://ztdidk.readthedocs.io/en/latest/benchmarks/bit.html#details

https://cor3ntin.github.io/posts/abi/

и всякие майданутые от этого горят: https://twitter.com/vzverovich/status/1487080205399302152

Но ABI замораживается не сразу. В Visual C++ если ты собираешь код с флагами с конкретными числами: /std:c++14, /std:c++17, /std:c++20, то тогда ты используешь то что уже стабилизированно. /std:c++latest - это самые новые возможности, но у разработчиков ещё есть право что-то поменять и поломать ABI.

В gcc примерно также, там в заметках о выпуске пишут какой стандарт поддерживается экспериментально, а какой стабильно. Если экспериментальная поддержка, то ABI могут поменять.

Вот разработчик gcc это подтверждает: https://www.reddit.com/r/cpp/comments/ubs8fc/comment/i6b3u88/?utm_source=share&utm_medium=web2x&context=3

Наверное поэтому ты думал, что у стандартной библиотеки С++ нестабильный ABI.