c++ xcode clang clang++ abi

c++ - ¿Apple clang compilador versioning schema?



xcode clang++ (1)

Hace algún tiempo, los compiladores GCC> = 5 y Clang> = 4 cambiaron la semántica de sus números de versión, por lo que el número de versión principal aumentará en cualquier versión sin corrección de errores.

¿Apple sigue algún esquema de versiones con compilador de Clang en términos de compatibilidad ABI o cualquier otro ámbito? Me gustaría saber si apple-clang 9.0 es compatible con ABI con 9.1 y así sucesivamente.


Apple incluye su número de versión del compilador con cada lanzamiento de Xcode, por lo que el lugar adecuado para buscar cambios ABI son las notas de lanzamiento de Xcode . El cambio ABI más reciente que pude encontrar fue Xcode 6:

Los encabezados de libc ++ en Xcode 6 incluyen un cambio para hacer que std :: pair tenga un constructor trivial. Esta solución es importante para el rendimiento y el cumplimiento con el estándar C ++, pero cambia el código ABI para C ++ usando std :: pair.

Esto implica que no hubo cambios ABI desde 2014.

Edición : el mapeo entre clang y apple-clang parece ser (tomado de here y agregado la última línea por prueba de características):

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

Así que supongo que Apple golpea la versión secundaria de Apple-Clang cuando integran los cambios del mainline Clang entre las principales versiones de Xcode.

Pero para la pregunta original, esto no importa: la compatibilidad ABI del lenguaje no cambiará hasta que lo digan, lo cual es posible para la biblioteca estándar (pero rara vez ocurre) y es casi impensable para el lenguaje central. Para GCC, Apple incluso garantizó no hacer lo último , pero probablemente se olvidó de actualizar el documento cuando cambió a clang:

Debido a que GCC 4.0 se ajusta a la ABI de Itanium C ++, los objetos de C ++ son compatibles con los objetos creados por otros compiladores OS X que cumplen con esta especificación. Apple garantiza que las futuras versiones de GCC para OS X también se ajustarán al Itanium C ++ ABI. Esto significa que los desarrolladores pueden enviar con seguridad bibliotecas compartidas dinámicas cuyas interfaces involucren clases de C ++, aunque con algunas advertencias:

  • Apple garantiza la estabilidad ABI solo para las funciones básicas del lenguaje. No garantiza la estabilidad para las clases de biblioteca, incluyendo std :: string, std :: map y std :: ostream entre otros.

Pero como el comando gcc vincula a Apple-Clang con cualquier instalación reciente de Xcode, esta garantía también debería ser válida para este último.