Nunca entendí claramente qué es un ABI. Por favor, no me señales un artículo de Wikipedia. Si pudiera entenderlo, no estaría aquí publicando una publicación tan larga.
Esta es mi mentalidad sobre las diferentes interfaces:
Un control remoto de TV es una interfaz entre el usuario y el TV. Es una entidad existente, pero inútil (no proporciona ninguna funcionalidad) por sí misma. Toda la funcionalidad para cada uno de esos botones en el control remoto se implementa en el televisor.
Interfaz: es una capa de "entidad existente" entre
functionality
yconsumer
de esa funcionalidad. Una interfaz por sí sola no hace nada. Simplemente invoca la funcionalidad subyacente.Ahora, dependiendo de quién sea el usuario, hay diferentes tipos de interfaces.
Los comandos de la interfaz de línea de comandos (CLI) son las entidades existentes, el consumidor es el usuario y la funcionalidad se encuentra detrás.
functionality:
mi funcionalidad de software que resuelve algún propósito para el cual estamos describiendo esta interfaz.
existing entities:
comandos
consumer:
usuarioLa ventana, los botones, etc. de la interfaz gráfica de usuario (GUI) son las entidades existentes, y nuevamente el consumidor es el usuario y la funcionalidad se encuentra detrás.
functionality:
mi funcionalidad de software que resuelve algún problema al que estamos describiendo esta interfaz.
existing entities:
ventana, botones etc.
consumer:
usuarioLas funciones de la interfaz de programación de aplicaciones (API) (o para ser más correctos) (en la programación basada en interfaz) son las entidades existentes, el consumidor aquí es otro programa, no un usuario, y nuevamente la funcionalidad se encuentra detrás de esta capa.
functionality:
mi funcionalidad de software que resuelve algún problema al que estamos describiendo esta interfaz.
existing entities:
funciones, Interfaces (conjunto de funciones).
consumer:
otro programa / aplicación.Interfaz binaria de aplicación (ABI) Aquí es donde comienza mi problema.
functionality:
???
existing entities:
???
consumer:
???
- Escribí software en diferentes idiomas y proporcioné diferentes tipos de interfaces (CLI, GUI y API), pero no estoy seguro de si alguna vez proporcioné alguna ABI.
Los ABI cubren detalles como
- tipo de datos, tamaño y alineación;
- la convención de llamada, que controla cómo se pasan los argumentos de las funciones y se recuperan los valores devueltos;
- los números de llamada del sistema y cómo una aplicación debe hacer llamadas del sistema al sistema operativo;
Otros ABI estandarizan detalles como
- el cambio de nombre de C ++,
- propagación de excepciones, y
- llamada de convención entre compiladores en la misma plataforma, pero no requiere compatibilidad multiplataforma.
¿Quién necesita estos detalles? Por favor no digas el sistema operativo. Sé programación de ensamblaje. Sé cómo funciona la vinculación y carga. Sé exactamente lo que pasa adentro.
¿Por qué entró el cambio de nombre en C ++? Pensé que estamos hablando a nivel binario. ¿Por qué entran los idiomas?
De todos modos, descargué la [ 4.1 ] Interfaz binaria de la aplicación System V Edición 4.1 (1997-03-18) para ver qué contiene exactamente. Bueno, la mayor parte no tenía ningún sentido.
¿Por qué contiene dos capítulos (4to y 5to) para describir el formato de archivo ELF ? De hecho, estos son los únicos dos capítulos significativos de esa especificación. El resto de los capítulos son "específicos del procesador". De todos modos, pensé que es un tema completamente diferente. No diga que las especificaciones de formato de archivo ELF son ABI. No califica para ser una interfaz de acuerdo con la definición.
Lo sé, ya que estamos hablando a un nivel tan bajo que debe ser muy específico. Pero no estoy seguro de cómo es específica la "arquitectura de conjunto de instrucciones (ISA)".
¿Dónde puedo encontrar el ABI de Microsoft Windows?
Entonces, estas son las principales consultas que me están molestando.