История изменений
Исправление 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.