Versionado de API y estabilidad de ABI
Planifique el versionado semántico y proteja la estabilidad de la ABI entre versiones.
Versionado de API y estabilidad de ABI es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
Dos tipos de compatibilidad
Hay dos aspectos de la compatibilidad:
- Compatibilidad de la API: el código fuente que compila con la versión N también compila con la N+1
- Compatibilidad de la ABI: los binarios compilados con la versión N funcionan con la N+1 sin recompilar
Por qué importa la ABI
La compatibilidad de la ABI permite actualizar las bibliotecas compartidas sin recompilar las aplicaciones que dependen de ellas. Es fundamental para las distribuciones, los plugins y las aplicaciones de larga duración.
Qué rompe la ABI
Muchos cambios que parecen inocentes rompen la ABI:
- Añadir, eliminar o reordenar miembros de datos
- Añadir o eliminar funciones virtuales
- Cambiar la herencia
- Cambiar los parámetros de las plantillas
- Cambiar funciones inline (a veces)
Versionado semántico (SemVer)
Comunique la compatibilidad mediante los números de versión MAJOR.MINOR.PATCH:
- MAJOR: cambios incompatibles
- MINOR: nuevas funcionalidades compatibles con versiones anteriores
- PATCH: correcciones
Versionado en las cabeceras
Proporcione macros de versión en sus cabeceras.
#define MYLIB_VERSION_MAJOR 2
#define MYLIB_VERSION_MINOR 1
#define MYLIB_VERSION_PATCH 3SONAME para bibliotecas compartidas
En Linux, las bibliotecas compartidas tienen un SONAME que codifica la versión principal. Los enlazadores y el cargador lo utilizan para encontrar versiones compatibles.
# libmylib.so.2 -> libmylib.so.2.1.3
# SONAME = libmylib.so.2Ocultar los detalles de implementación
Las ABI estables requieren mantener la implementación fuera de las cabeceras. Use PIMPL (en la siguiente lección) para añadir o eliminar miembros privados sin afectar a los consumidores.
ABI del compilador
La ABI de C++ varía entre compiladores (GCC y MSVC utilizan una modificación de nombres y disposiciones de clases diferentes). Distribuya binarios compilados con compiladores específicos o limítese a interfaces extern "C".
ABI de la biblioteca estándar
La biblioteca estándar también puede romper la ABI, aunque libstdc++ y libc++ tienen sus propias políticas. Evite los tipos de la biblioteca estándar en su API pública estable si necesita compatibilidad entre versiones.
Añadir funcionalidades de forma compatible
Adiciones seguras:
- Nuevas funciones libres
- Nuevas clases
- Nuevas funciones miembro no virtuales (con cuidado)
No es seguro cambiar clases que los consumidores tengan en la pila o hayan compilado dentro de sus binarios.
Herramientas para comprobar la ABI
Herramientas que comparan dos compilaciones:
- abidiff: compara la ABI
- abicompliance-checker: genera informes
Estrategia a largo plazo
Diseñe pensando en la estabilidad desde el principio: una API pública pequeña, tipos opacos y un uso cuidadoso de las plantillas y la herencia. Una vez distribuida la biblioteca, romper la ABI resulta costoso: limite los cambios de la versión principal y comuníquelos con claridad.
Comprobación rápida
¿Qué cambio en una clase de C++ tiene más probabilidades de romper la ABI?
Resumen
La compatibilidad de la API significa compatibilidad del código fuente; la compatibilidad de la ABI significa compatibilidad de los binarios. La ABI es frágil: añadir miembros o funciones virtuales, o cambiar la herencia, la rompe. Use SemVer, oculte la implementación con PIMPL, distribuya varias versiones principales en paralelo y ejecute comprobadores de ABI.
Preguntas frecuentes
¿La lección «Versionado de API y estabilidad de ABI» es gratis?
Sí — el texto completo de «Versionado de API y estabilidad de ABI» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Versionado de API y estabilidad de ABI»?
Planifique el versionado semántico y proteja la estabilidad de la ABI entre versiones. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Versionado de API y estabilidad de ABI»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Bibliotecas solo de cabecera frente a compiladas
- Versionado de API y estabilidad de ABI
- Ocultación de la implementación con PIMPL
- Escritura de una biblioteca de utilidades moderna solo de cabecera