API-versiebeheer en ABI-stabiliteit
Plan semantische versiebeheer en bescherm ABI-stabiliteit tussen releases
API-versiebeheer en ABI-stabiliteit is een gratis C++ Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C++ Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C++ Academy bevat in totaal 4 lessen.
Twee verschillende vormen van compatibiliteit
Twee compatibiliteitsaspecten:
- API-compatibiliteit — broncode die met versie N compileert, compileert ook met N+1
- ABI-compatibiliteit — binaire bestanden die met versie N zijn gecompileerd, werken met N+1 zonder opnieuw te compileren
Waarom ABI belangrijk is
Dankzij ABI-compatibiliteit kunnen gedeelde bibliotheken worden bijgewerkt zonder afhankelijke programma's opnieuw te compileren. Dit is essentieel voor distributies, plug-ins en toepassingen die lang blijven draaien.
Wat de ABI breekt
Veel ogenschijnlijk onschuldige wijzigingen breken de ABI:
- Gegevensleden toevoegen, verwijderen of herschikken
- Virtuele functies toevoegen of verwijderen
- Overerving wijzigen
- Templateparameters wijzigen
- Wijzigingen in inline-functies (soms)
Semantisch versiebeheer (SemVer)
Communiceer compatibiliteit via versienummers MAJOR.MINOR.PATCH:
- MAJOR — wijzigingen die compatibiliteit verbreken
- MINOR — nieuwe functies, achterwaarts compatibel
- PATCH — oplossingen
Versiebeheer in headerbestanden
Neem versiemacro's op in je headerbestanden.
#define MYLIB_VERSION_MAJOR 2
#define MYLIB_VERSION_MINOR 1
#define MYLIB_VERSION_PATCH 3SONAME voor gedeelde bibliotheken
Op Linux hebben gedeelde bibliotheken een SONAME waarin de hoofdversie is vastgelegd. Linkers en de lader gebruiken deze om compatibele versies te vinden.
# libmylib.so.2 -> libmylib.so.2.1.3
# SONAME = libmylib.so.2Implementatiedetails verbergen
Voor stabiele ABI's moet je de implementatie uit headerbestanden houden. Gebruik PIMPL (in de volgende les) om privéleden toe te voegen of te verwijderen zonder gebruikers te beïnvloeden.
ABI van de compiler
De C++-ABI verschilt per compiler (GCC en MSVC gebruiken verschillende naamvervorming en klasse-indelingen). Distribueer binaire bestanden die met specifieke compilers zijn gebouwd, of houd je aan interfaces met extern "C".
ABI van de standaardbibliotheek
De standaardbibliotheek kan ook de ABI breken — hoewel libstdc++ en libc++ hun eigen beleid hebben. Vermijd std-typen in je stabiele openbare API als je compatibiliteit tussen versies nodig hebt.
Functies compatibel toevoegen
Veilige toevoegingen:
- Nieuwe vrije functies
- Nieuwe klassen
- Nieuwe niet-virtuele lidfuncties (voorzichtig)
Onveilig: klassen wijzigen die gebruikers op de stack hebben of die al in hun code zijn gecompileerd.
Hulpmiddelen voor ABI-controle
Hulpmiddelen die twee builds vergelijken:
- abidiff — vergelijkt de ABI
- abicompliance-checker — genereert rapporten
Strategie voor de lange termijn
Ontwerp vanaf het begin op stabiliteit: een kleine openbare API, ondoorzichtige typen en zorgvuldig gebruik van templates en overerving. Zodra je software uitbrengt, is ABI breken duur — plan verhogingen van de hoofdversie en communiceer duidelijk.
Korte controle
Welke wijziging aan een C++-klasse zal de ABI waarschijnlijk breken?
Samenvatting
API-compatibiliteit betekent broncompatibiliteit; ABI-compatibiliteit betekent binaire compatibiliteit. De ABI is kwetsbaar — leden toevoegen, virtuele functies toevoegen of overerving wijzigen breekt deze. Gebruik SemVer, verberg de implementatie met PIMPL, lever meerdere hoofdversies naast elkaar uit en voer ABI-controles uit.
Leer C++ met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 51
- Lessen
- 203
Veelgestelde vragen
Is de les “API-versiebeheer en ABI-stabiliteit” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad C++ Academy, waaronder “API-versiebeheer en ABI-stabiliteit”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus C++ Academy bevat in totaal 4 lessen.
Wat leer ik in “API-versiebeheer en ABI-stabiliteit”?
Plan semantische versiebeheer en bescherm ABI-stabiliteit tussen releases Je oefent met C++ Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met C++ Academy te beginnen?
Ervaring vooraf is niet nodig. C++ Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “API-versiebeheer en ABI-stabiliteit”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over C++ Academy?
Ja. Elke les over C++ Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Header-only versus gecompileerde bibliotheken
- API-versiebeheer en ABI-stabiliteit
- Implementatie verbergen met PIMPL
- Een moderne header-only-hulpprogrammabibliotheek schrijven