Я ніколи чітко не розумів, що таке ІПС. Будь ласка, не вказуйте мені на статтю у Вікіпедії. Якби я міг це зрозуміти, я б тут не розміщував такого довгого повідомлення.
Це мій погляд на різні інтерфейси:
Телевізійний пульт - це інтерфейс між користувачем та телевізором. Це існуюча сутність, але марна (не забезпечує жодної функціональності) сама по собі. Вся функціональність для кожної з цих кнопок на пульті реалізована в телевізорі.
Інтерфейс: це шар "існуючої сутності" між функціоналом
functionality
таconsumer
цим функціонуванням. Інтерфейс сам по собі нічого не робить. Це просто викликає функціонал, що лежить позаду.Зараз залежно від того, хто користувач, є різні типи інтерфейсів.
Команди інтерфейсу командного рядка (CLI) - це існуючі об'єкти, споживач - користувач, а функціонал - позаду.
functionality:
моє програмне забезпечення, яке вирішує певну мету, яку ми описуємо в цьому інтерфейсі.
existing entities:
команди
consumer:
користувачВікно, кнопки тощо, графічний інтерфейс користувача (GUI) - це існуючі об'єкти, і знову споживач - це користувач, а функціональність - позаду.
functionality:
моє програмне забезпечення, яке вирішує певну проблему, до якої ми описуємо цей інтерфейс.
existing entities:
вікно, кнопки тощо.
consumer:
користувачФункції інтерфейсу прикладного програмування (API) (або, якщо бути більш правильним) інтерфейси (в програмі на основі взаємодії) - це існуючі об'єкти, споживачем тут є ще одна програма, а не користувач, і знову функціональність лежить за цим шаром.
functionality:
моє програмне забезпечення, яке вирішує певну проблему, до якої ми описуємо цей інтерфейс.
existing entities:
функції, інтерфейси (масив функцій).
consumer:
інша програма / додаток.Бінарний інтерфейс програми (ABI) Ось де починається моя проблема.
functionality:
???
existing entities:
???
consumer:
???
- Я писав програмне забезпечення різними мовами та надав різні види інтерфейсів (CLI, GUI та API), але я не впевнений, чи коли-небудь я надав будь-який ABI.
ABI охоплюють деталі, такі як
- тип, розмір та вирівнювання даних;
- конвенція виклику, яка контролює, як передаються аргументи функцій та повертаються отримані значення;
- номери системних викликів та те, як програма повинна здійснювати системні дзвінки до операційної системи;
Інші ABI стандартизують деталі, такі як
- ім'я C ++, що керується,
- поширення виключень та
- виклик умов між компіляторами на одній платформі, але не вимагає сумісності між платформами.
Кому потрібні ці деталі? Будь ласка, не кажіть ОС. Я знаю програму складання. Я знаю, як працює зв'язування та завантаження. Я точно знаю, що відбувається всередині.
Чому прийшло ім’я C ++ mangling? Я думав, що ми говоримо на бінарному рівні. Чому мови входять?
У будь-якому випадку я завантажив [PDF] System V Binary Interface Edition 4.1 (1997-03-18), щоб побачити, що саме він містить. Ну, більшість із цього не мала жодного сенсу.
Чому він містить дві глави (4 та 5) для опису формату файлу ELF ? Насправді це єдині дві значущі глави цієї специфікації. Решта розділів "специфічні для процесора". У всякому разі, я хоч, що це зовсім інша тема. Не кажіть, що специфікація формату файлів ELF - це ABI. Це не може бути інтерфейсом відповідно до визначення.
Я знаю, оскільки ми говоримо на такому низькому рівні, він повинен бути дуже специфічним. Але я не впевнений, як саме "архітектура наборів інструкцій (ISA)" специфічна?
Де я можу знайти ABI Microsoft Windows?
Отже, це основні запити, які мене клопочуть.