Versionamento de API e estabilidade de ABI
Planeie o versionamento semântico e proteja a estabilidade da ABI entre lançamentos
Versionamento de API e estabilidade de ABI é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Duas compatibilidades diferentes
Há duas preocupações relacionadas à compatibilidade:
- Compatibilidade da API — o código-fonte que compila com a versão N também compila com a N+1
- Compatibilidade da ABI — os binários compilados com a versão N funcionam com a N+1 sem recompilação
Por que a ABI é importante
A compatibilidade da ABI permite atualizar bibliotecas compartilhadas sem recompilar os dependentes. Isso é essencial para distribuições, plug-ins e aplicações de longa duração.
O que rompe a ABI
Muitas alterações que parecem inofensivas rompem a ABI:
- Adicionar, remover ou reordenar membros de dados
- Adicionar ou remover funções virtuais
- Alterar a herança
- Alterar os parâmetros dos modelos
- Alterar funções inline (às vezes)
Versionamento semântico (SemVer)
Comunique a compatibilidade por meio dos números de versão MAJOR.MINOR.PATCH:
- MAJOR — alterações incompatíveis
- MINOR — novos recursos, compatíveis com versões anteriores
- PATCH — correções
Versionamento nos cabeçalhos
Forneça macros de versão nos seus cabeçalhos.
#define MYLIB_VERSION_MAJOR 2
#define MYLIB_VERSION_MINOR 1
#define MYLIB_VERSION_PATCH 3SONAME para bibliotecas compartilhadas
No Linux, as bibliotecas compartilhadas têm um SONAME que codifica a versão principal. Os vinculadores e o carregador usam esse valor para encontrar versões compatíveis.
# libmylib.so.2 -> libmylib.so.2.1.3
# SONAME = libmylib.so.2Ocultação dos detalhes da implementação
ABIs estáveis exigem manter a implementação fora dos cabeçalhos. Use PIMPL (na próxima lição) para adicionar ou remover membros privados sem afetar os consumidores.
ABI do compilador
A ABI do C++ varia entre compiladores (GCC e MSVC usam decoração de nomes e layouts de classes diferentes). Distribua binários compilados com compiladores específicos ou mantenha-se em interfaces extern "C".
ABI da biblioteca padrão
A biblioteca padrão também pode romper a ABI — embora libstdc++ e libc++ tenham políticas próprias. Evite tipos da biblioteca padrão na sua API pública estável se precisar de compatibilidade entre versões.
Adição compatível de recursos
Adições seguras:
- Novas funções livres
- Novas classes
- Novas funções-membro não virtuais (com cuidado)
Inseguro: alterar classes que os consumidores mantêm na pilha ou compilam diretamente.
Ferramentas para verificar a ABI
Ferramentas que comparam duas compilações:
- abidiff — compara a ABI
- abicompliance-checker — gera relatórios
Estratégia de longo prazo
Projete pensando na estabilidade desde o início: API pública pequena, tipos opacos e uso cuidadoso de modelos e herança. Depois que a biblioteca é distribuída, romper a ABI é caro — restrinja os aumentos da versão principal e comunique-se com clareza.
Verificação rápida
Qual alteração em uma classe C++ tem maior probabilidade de romper a ABI?
Recapitulação
Compatibilidade da API significa compatibilidade do código-fonte; compatibilidade da ABI significa compatibilidade binária. A ABI é frágil — adicionar membros ou funções virtuais, ou alterar a herança, pode rompê-la. Use SemVer, oculte a implementação com PIMPL, distribua várias versões principais lado a lado e execute verificadores de ABI.
Perguntas Frequentes
A aula “Versionamento de API e estabilidade de ABI” é grátis?
Sim — o texto completo de “Versionamento de API e estabilidade de ABI” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Versionamento de API e estabilidade de ABI”?
Planeie o versionamento semântico e proteja a estabilidade da ABI entre lançamentos Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Versionamento de API e estabilidade de ABI”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Bibliotecas apenas de cabeçalho versus compiladas
- Versionamento de API e estabilidade de ABI
- Ocultar a implementação com PIMPL
- Escrever uma biblioteca utilitária moderna apenas de cabeçalho