Apple увеличивает номер версии своего компилятора с каждым выпуском Xcode, поэтому подходящим местом для поиска изменений ABI является Примечания к выпуску Xcode. Последнее изменение ABI, которое я смог найти, - это Xcode 6:
Заголовки libc ++ в Xcode 6 включают изменение, чтобы std :: pair имел тривиальный конструктор. Это исправление важно для производительности и соответствия стандарту C ++, но оно изменяет ABI для кода C ++ с помощью std :: pair.
Это означает, что с 2014 года не было изменений ABI.
Изменить: соответствие между clang и apple-clang похоже (взято из здесь и сам добавил последнюю строчку путем тестирования функций):
5.1 -> 3.4
6.0 -> 3.5
7.0 -> 3.7
7.3 -> 3.8
8.0 -> 3.9
9.0 -> 4.0
9.1 -> 5.0
Итак, я предполагаю, что Apple удаляет второстепенную версию apple-clang всякий раз, когда они интегрируют изменения из mainline clang между основными выпусками Xcode.
Но для исходного вопроса это не имеет значения: ABI-совместимость языка не изменится, пока они не скажут об этом, что возможно для стандартной библиотеки (но редко бывает) и почти немыслимо для основного языка. Для GCC Apple даже гарантированно не сделает последнее, но, вероятно, забыл обновить документ, когда переключился на clang:
Поскольку GCC 4.0 соответствует Itanium C ++ ABI, объекты C ++ совместимы по ссылкам с объектами, созданными другими компиляторами OS X, которые соответствуют этой спецификации. Apple гарантирует, что будущие выпуски GCC для OS X также будут соответствовать Itanium C ++ ABI. Это означает, что разработчики могут безопасно поставлять динамические разделяемые библиотеки, интерфейсы которых включают классы C ++, хотя и с некоторыми оговорками:
- Apple гарантирует стабильность ABI только для основных языковых функций. Это не гарантирует стабильности для библиотечных классов, включая std :: string, std :: map и std :: ostream среди других.
Но поскольку команда gcc
ссылается на apple-clang с любой недавней установкой Xcode, эта гарантия должна действовать и для последней.
person
Tobi
schedule
05.04.2018