Non ho mai capito chiaramente cosa sia un ABI. Per favore, non indicarmi un articolo di Wikipedia. Se potessi capirlo, non sarei qui a pubblicare un post così lungo.
Questa è la mia mentalità su diverse interfacce:
Un telecomando TV è un'interfaccia tra l'utente e la TV. È un'entità esistente, ma inutile (non fornisce alcuna funzionalità) da sola. Tutte le funzionalità per ciascuno di quei pulsanti sul telecomando sono implementate nel televisore.
Interfaccia: è un livello di "entità esistente" tra la
functionality
econsumer
quella funzionalità. Un'interfaccia da sola non fa nulla. Invoca semplicemente la funzionalità che sta dietro.Ora, a seconda di chi è l'utente, esistono diversi tipi di interfacce.
I comandi CLI (Command Line Interface) sono le entità esistenti, l'utente è l'utente e la funzionalità sta dietro.
functionality:
la mia funzionalità software che risolve alcuni scopi ai quali stiamo descrivendo questa interfaccia.
existing entities:
comandi
consumer:
utenteLa finestra, i pulsanti, ecc. Della Graphical User Interface (GUI) sono le entità esistenti, e di nuovo il consumatore è l'utente e la funzionalità sta dietro.
functionality:
la mia funzionalità software che risolve alcuni problemi ai quali stiamo descrivendo questa interfaccia.
existing entities:
finestra, pulsanti ecc.
consumer:
utenteLe funzioni API (Application Programming Interface) (o per essere più corrette) (nella programmazione basata su interfacce) sono le entità esistenti, il consumatore qui è un altro programma non un utente, e di nuovo la funzionalità sta dietro questo livello.
functionality:
la mia funzionalità software che risolve alcuni problemi ai quali stiamo descrivendo questa interfaccia.
existing entities:
funzioni, interfacce (matrice di funzioni).
consumer:
un altro programma / applicazione.Application Binary Interface (ABI) Qui è dove inizia il mio problema.
functionality:
???
existing entities:
???
consumer:
???
- Ho scritto software in diverse lingue e fornito diversi tipi di interfacce (CLI, GUI e API), ma non sono sicuro di aver mai fornito alcuna ABI.
ABI coprono dettagli come
- tipo di dati, dimensioni e allineamento;
- la convenzione di chiamata, che controlla come vengono passati gli argomenti delle funzioni e restituiti i valori;
- i numeri di chiamata del sistema e come un'applicazione deve effettuare chiamate di sistema al sistema operativo;
Altri ABI standardizzano dettagli come
- la menzione del nome C ++,
- propagazione delle eccezioni e
- convenzione di chiamata tra compilatori sulla stessa piattaforma, ma non richiede compatibilità multipiattaforma.
Chi ha bisogno di questi dettagli? Per favore, non dire il sistema operativo. Conosco la programmazione degli assiemi. So come funzionano i collegamenti e il caricamento. So esattamente cosa succede dentro.
Perché è arrivata la modifica del nome C ++? Pensavo che stessimo parlando a livello binario. Perché arrivano le lingue?
Ad ogni modo, ho scaricato [PDF] System V Application Binary Interface Edition 4.1 (1997-03-18) per vedere cosa contiene esattamente. Bene, la maggior parte non aveva alcun senso.
Perché contiene due capitoli (4 ° e 5 °) per descrivere il formato di file ELF ? In effetti, questi sono gli unici due capitoli significativi di tale specifica. Il resto dei capitoli sono "specifici del processore". Comunque, ho pensato che fosse un argomento completamente diverso. Si prega di non dire che le specifiche del formato di file ELF sono l'ABI. Non si qualifica come interfaccia secondo la definizione.
Lo so, poiché stiamo parlando a un livello così basso, deve essere molto specifico. Ma non sono sicuro di come sia specifico "istruzione set architecture (ISA)"?
Dove posso trovare l'ABI di Microsoft Windows?
Quindi, queste sono le principali domande che mi infastidiscono.