API-Versionierung und ABI-Stabilität
Planen Sie semantische Versionierung und schützen Sie die ABI-Stabilität über mehrere Releases hinweg.
API-Versionierung und ABI-Stabilität ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Zwei verschiedene Kompatibilitäten
Zwei wichtige Aspekte der Kompatibilität:
- API-Kompatibilität — Quellcode, der gegen Version N kompiliert, kompiliert auch gegen N+1
- ABI-Kompatibilität — Binärdateien, die gegen Version N kompiliert wurden, funktionieren mit N+1 ohne erneute Kompilierung
Warum ABI wichtig ist
ABI-Kompatibilität ermöglicht die Aktualisierung gemeinsam genutzter Bibliotheken, ohne abhängige Komponenten neu zu kompilieren. Das ist entscheidend für Distributionen, Plugins und langlebige Anwendungen.
Was die ABI zerstört
Viele harmlos wirkende Änderungen zerstören die ABI:
- Datenmember hinzufügen, entfernen oder umordnen
- Virtuelle Funktionen hinzufügen oder entfernen
- Vererbung ändern
- Template-Parameter ändern
- Änderungen an Inline-Funktionen (manchmal)
Semantische Versionierung (SemVer)
Kommunizieren Sie Kompatibilität über Versionsnummern nach dem Schema MAJOR.MINOR.PATCH:
- MAJOR — inkompatible Änderungen
- MINOR — neue Funktionen, abwärtskompatibel
- PATCH — Fehlerbehebungen
Versionierung in Headern
Stellen Sie Versionsmakros in Ihren Headern bereit.
#define MYLIB_VERSION_MAJOR 2
#define MYLIB_VERSION_MINOR 1
#define MYLIB_VERSION_PATCH 3SONAME für gemeinsam genutzte Bibliotheken
Unter Linux besitzen gemeinsam genutzte Bibliotheken einen SONAME, der die Hauptversion codiert. Linker und Loader verwenden ihn, um kompatible Versionen zu finden.
# libmylib.so.2 -> libmylib.so.2.1.3
# SONAME = libmylib.so.2Implementierungsdetails verbergen
Stabile ABIs erfordern, dass die Implementierung aus den Headern herausgehalten wird. Verwenden Sie PIMPL (in der nächsten Lektion), um private Member hinzuzufügen oder zu entfernen, ohne Consumer zu beeinträchtigen.
Compiler-ABI
Die C++-ABI unterscheidet sich zwischen Compilern (GCC und MSVC verwenden unterschiedliches Name Mangling und unterschiedliche Klassenlayouts). Verteilen Sie Binärdateien, die mit bestimmten Compilern erstellt wurden, oder beschränken Sie sich auf Schnittstellen mit extern "C".
ABI der Standardbibliothek
Funktionen kompatibel hinzufügen
Sichere Ergänzungen:
- Neue freie Funktionen
- Neue Klassen
- Neue nicht virtuelle Memberfunktionen (mit Bedacht)
Unsicher: Klassen ändern, die Consumer auf dem Stack haben oder einkompiliert wurden.
Tools zur ABI-Prüfung
Tools zum Vergleichen zweier Builds:
- abidiff — vergleicht die ABI
- abicompliance-checker — erstellt Berichte
Langfristige Strategie
Entwerfen Sie von Anfang an auf Stabilität hin: kleine öffentliche API, opake Typen und ein überlegter Einsatz von Templates und Vererbung. Nach der Veröffentlichung ist ein ABI-Bruch teuer — planen Sie Erhöhungen der Hauptversion sorgfältig und kommunizieren Sie Änderungen klar.
Kurzer Test
Welche Änderung an einer C++-Klasse wird die ABI am wahrscheinlichsten brechen?
Zusammenfassung
API-Kompatibilität bedeutet Quellkompatibilität, ABI-Kompatibilität bedeutet Binärkompatibilität. Die ABI ist fragil — das Hinzufügen von Membern oder virtuellen Funktionen sowie Änderungen an der Vererbung brechen sie. Verwenden Sie SemVer, verbergen Sie die Implementierung mit PIMPL, liefern Sie mehrere Hauptversionen parallel aus und führen Sie ABI-Prüfungen durch.
Häufig gestellte Fragen
Ist die Lektion „API-Versionierung und ABI-Stabilität“ kostenlos?
Ja — der vollständige Text von „API-Versionierung und ABI-Stabilität“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „API-Versionierung und ABI-Stabilität“?
Planen Sie semantische Versionierung und schützen Sie die ABI-Stabilität über mehrere Releases hinweg. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „API-Versionierung und ABI-Stabilität“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Header-only- vs. kompilierte Bibliotheken
- API-Versionierung und ABI-Stabilität
- Implementierung mit PIMPL verbergen
- Eine moderne Header-only-Utility-Bibliothek schreiben