Eu nunca entendi claramente o que é uma ABI. Por favor, não me aponte para um artigo da Wikipedia. Se eu pudesse entender, não estaria aqui postando uma postagem tão longa.
Esta é a minha mentalidade sobre diferentes interfaces:
Um controle remoto da TV é uma interface entre o usuário e a TV. É uma entidade existente, mas inútil (não fornece nenhuma funcionalidade) por si só. Toda a funcionalidade de cada um desses botões no controle remoto é implementada no aparelho de televisão.
Interface: é uma camada de "entidade existente" entre
functionality
econsumer
dessa funcionalidade. Uma interface por si só não faz nada. Apenas invoca a funcionalidade por trás.Agora, dependendo de quem é o usuário, existem diferentes tipos de interfaces.
Os comandos da CLI (Command Line Interface) são as entidades existentes, o consumidor é o usuário e a funcionalidade está por trás.
functionality:
minha funcionalidade de software que resolve algum objetivo para o qual estamos descrevendo essa interface.
existing entities:
comandos
consumer:
do utilizadorJanela da interface gráfica do usuário (GUI) , botões, etc. são as entidades existentes e, novamente, o consumidor é o usuário e a funcionalidade está por trás.
functionality:
minha funcionalidade de software que resolve algum problema para o qual estamos descrevendo essa interface.
existing entities:
janela, botões etc.
consumer:
do utilizadorAs funções da Interface de programação de aplicativos (API) (ou, para ser mais correto), interfaces (na programação baseada em interface) são as entidades existentes, o consumidor aqui é outro programa que não é usuário e, novamente, a funcionalidade está por trás dessa camada.
functionality:
minha funcionalidade de software que resolve algum problema para o qual estamos descrevendo essa interface.
existing entities:
funções, interfaces (matriz de funções).
consumer:
outro programa / aplicativo.Interface Binária de Aplicativo (ABI) Aqui é onde meu problema começa.
functionality:
???
existing entities:
???
consumer:
???
- Escrevi software em idiomas diferentes e forneci diferentes tipos de interfaces (CLI, GUI e API), mas não tenho certeza se já forneci alguma ABI.
As ABIs abrangem detalhes como
- tipo de dados, tamanho e alinhamento;
- a convenção de chamada, que controla como os argumentos das funções são passados e retornam os valores recuperados;
- os números de chamada do sistema e como um aplicativo deve fazer chamadas do sistema para o sistema operacional;
Outras ABIs padronizam detalhes como
- o nome C ++ desconfigurado,
- propagação de exceção e
- convenção de chamada entre compiladores na mesma plataforma, mas não requer compatibilidade entre plataformas.
Quem precisa desses detalhes? Por favor, não diga o sistema operacional. Eu sei programação de montagem. Eu sei como funciona o link e o carregamento. Eu sei exatamente o que acontece por dentro.
Por que o nome C ++ mutilado apareceu? Eu pensei que estávamos conversando no nível binário. Por que os idiomas entram?
De qualquer forma, baixei o [PDF] System V Application Binary Interface Edition 4.1 (18-03-2007) para ver exatamente o que ele contém. Bem, a maior parte não fazia sentido.
Por que contém dois capítulos (4 e 5) para descrever o formato de arquivo ELF ? De fato, esses são os únicos dois capítulos significativos dessa especificação. O restante dos capítulos é "específico do processador". Enfim, eu acho que é um tópico completamente diferente. Por favor, não diga que as especificações de formato de arquivo ELF são a ABI. Não se qualifica para ser uma interface de acordo com a definição.
Eu sei, já que estamos falando em um nível tão baixo, deve ser muito específico. Mas não tenho certeza de como é específica a "arquitetura do conjunto de instruções (ISA)"?
Onde posso encontrar a ABI do Microsoft Windows?
Então, essas são as principais consultas que estão me incomodando.