Versionamento delle API e stabilità dell'ABI
Pianifichi il versionamento semantico e protegga la stabilità dell'ABI tra le release
Versionamento delle API e stabilità dell'ABI è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Due tipi di compatibilità
Esistono due aspetti della compatibilità:
- Compatibilità API — il codice sorgente che compila con la versione N compila anche con la versione N+1
- Compatibilità ABI — i binari compilati con la versione N funzionano con la versione N+1 senza essere ricompilati
Perché l'ABI è importante
La compatibilità ABI consente di aggiornare le librerie condivise senza ricompilare i dipendenti. È fondamentale per le distribuzioni, i plugin e le applicazioni longeve.
Cosa rompe l'ABI
Molte modifiche apparentemente innocue rompono l'ABI:
- Aggiungere, rimuovere o riordinare membri dati
- Aggiungere o rimuovere funzioni virtuali
- Modificare l'ereditarietà
- Modificare i parametri dei template
- Modificare funzioni inline (in alcuni casi)
Versionamento semantico (SemVer)
Comunichi la compatibilità tramite i numeri di versione MAJOR.MINOR.PATCH:
- MAJOR — modifiche incompatibili
- MINOR — nuove funzionalità compatibili con le versioni precedenti
- PATCH — correzioni
Versionamento negli header
Fornisca macro di versione nei propri header.
#define MYLIB_VERSION_MAJOR 2
#define MYLIB_VERSION_MINOR 1
#define MYLIB_VERSION_PATCH 3SONAME per le librerie condivise
Su Linux, le librerie condivise hanno un SONAME che codifica la versione major. Linker e loader lo utilizzano per trovare versioni compatibili.
# libmylib.so.2 -> libmylib.so.2.1.3
# SONAME = libmylib.so.2Nascondere i dettagli dell'implementazione
Per ottenere ABI stabili, mantenga l'implementazione fuori dagli header. Utilizzi PIMPL (nella prossima lezione) per aggiungere o rimuovere membri privati senza influire sui consumer.
ABI del compilatore
L'ABI C++ varia tra i compilatori (GCC e MSVC utilizzano name mangling e layout delle classi diversi). Distribuisca binari compilati con compilatori specifici oppure si attenga alle interfacce extern "C".
ABI della libreria standard
Anche la libreria standard può rompere l'ABI, sebbene libstdc++ e libc++ adottino proprie politiche. Eviti i tipi della libreria standard nell'API pubblica stabile se serve compatibilità tra versioni diverse.
Aggiungere funzionalità senza rompere la compatibilità
Aggiunte sicure:
- Nuove funzioni libere
- Nuove classi
- Nuove funzioni membro non virtuali (con cautela)
Non sicuro: modificare classi che i consumer hanno sullo stack o hanno già compilato.
Strumenti per il controllo dell'ABI
Strumenti che confrontano due build:
- abidiff — confronta l'ABI
- abicompliance-checker — genera report
Strategia a lungo termine
Progetti fin dall'inizio pensando alla stabilità: API pubblica ridotta, tipi opachi e uso attento di template ed ereditarietà. Dopo la distribuzione, rompere l'ABI è costoso: pianifichi gli incrementi della versione major e comunichi in modo chiaro.
Verifica rapida
Quale modifica a una classe C++ ha maggiori probabilità di rompere l'ABI?
Riepilogo
La compatibilità API indica la compatibilità del sorgente; la compatibilità ABI indica quella dei binari. L'ABI è fragile: aggiungere membri o funzioni virtuali oppure modificare l'ereditarietà la rompe. Utilizzi SemVer, nasconda l'implementazione con PIMPL, distribuisca più versioni major affiancate ed esegua strumenti di controllo dell'ABI.
Domande Frequenti
La lezione «Versionamento delle API e stabilità dell'ABI» è gratuita?
Sì — il testo completo di «Versionamento delle API e stabilità dell'ABI» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «Versionamento delle API e stabilità dell'ABI»?
Pianifichi il versionamento semantico e protegga la stabilità dell'ABI tra le release Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Versionamento delle API e stabilità dell'ABI»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Librerie header-only e compilate a confronto
- Versionamento delle API e stabilità dell'ABI
- Nascondere l'implementazione con PIMPL
- Scrivere una moderna libreria di utilità header-only