Tôi chưa bao giờ hiểu rõ ABI là gì. Xin đừng chỉ cho tôi một bài viết trên Wikipedia. Nếu tôi có thể hiểu nó, tôi sẽ không ở đây để đăng một bài viết dài như vậy.
Đây là suy nghĩ của tôi về các giao diện khác nhau:
Điều khiển TV là giao diện giữa người dùng và TV. Nó là một thực thể hiện có, nhưng vô dụng (không cung cấp bất kỳ chức năng nào). Tất cả các chức năng cho từng nút trên điều khiển từ xa được triển khai trong TV.
Giao diện: Đây là một "thực thể hiện" lớp giữa
functionality
vàconsumer
các chức năng đó. Một giao diện tự nó không làm gì cả. Nó chỉ gọi các chức năng nằm phía sau.Bây giờ tùy thuộc vào người dùng là ai, có nhiều loại giao diện khác nhau.
Các lệnh Giao diện dòng lệnh (CLI) là các thực thể hiện có, người tiêu dùng là người dùng và chức năng nằm phía sau.
functionality:
chức năng phần mềm của tôi giải quyết một số mục đích mà chúng tôi đang mô tả giao diện này.
existing entities:
lệnh
consumer:
người dùngCửa sổ Giao diện người dùng đồ họa (GUI) , các nút, v.v. là các thực thể hiện có và một lần nữa người tiêu dùng là người dùng và chức năng nằm phía sau.
functionality:
chức năng phần mềm của tôi giải quyết một số vấn đề mà chúng tôi đang mô tả giao diện này.
existing entities:
cửa sổ, nút vv.
consumer:
người dùngCác chức năng Giao diện lập trình ứng dụng (API) (hoặc chính xác hơn) các giao diện (trong lập trình dựa trên giao diện) là các thực thể hiện có, người tiêu dùng ở đây là một chương trình khác không phải là người dùng và chức năng lại nằm sau lớp này.
functionality:
chức năng phần mềm của tôi giải quyết một số vấn đề mà chúng tôi đang mô tả giao diện này.
existing entities:
chức năng, Giao diện (mảng chức năng).
consumer:
chương trình / ứng dụng khác.Giao diện nhị phân ứng dụng (ABI) Đây là nơi vấn đề của tôi bắt đầu.
functionality:
???
existing entities:
???
consumer:
???
- Tôi đã viết phần mềm bằng các ngôn ngữ khác nhau và cung cấp các loại giao diện khác nhau (CLI, GUI và API), nhưng tôi không chắc mình đã từng cung cấp bất kỳ ABI nào chưa.
ABI bao gồm các chi tiết như
- kiểu dữ liệu, kích thước và căn chỉnh;
- quy ước gọi, điều khiển cách các đối số của hàm được truyền và trả về các giá trị;
- các số gọi hệ thống và cách ứng dụng thực hiện các cuộc gọi hệ thống đến hệ điều hành;
Các ABI khác chuẩn hóa các chi tiết như
- xáo trộn tên C ++,
- tuyên truyền ngoại lệ, và
- quy ước gọi giữa các trình biên dịch trên cùng một nền tảng, nhưng không yêu cầu khả năng tương thích đa nền tảng.
Ai cần những chi tiết này? Xin đừng nói HĐH. Tôi biết lập trình lắp ráp. Tôi biết làm thế nào liên kết và tải hoạt động. Tôi biết chính xác những gì xảy ra bên trong.
Tại sao tên C ++ mangling đi vào? Tôi nghĩ rằng chúng ta đang nói chuyện ở cấp độ nhị phân. Tại sao ngôn ngữ đi vào?
Dù sao, tôi đã tải xuống [PDF] Phiên bản giao diện nhị phân ứng dụng System V 4.1 (1997-03-18) để xem chính xác nó chứa gì. Chà, hầu hết nó chẳng có ý nghĩa gì cả.
Tại sao nó chứa hai chương (thứ 4 & 5) để mô tả định dạng tệp ELF ? Trong thực tế, đây là hai chương quan trọng duy nhất của đặc điểm kỹ thuật đó. Phần còn lại của các chương là "bộ xử lý cụ thể". Dù sao, tôi mặc dù đó là một chủ đề hoàn toàn khác. Xin đừng nói rằng các đặc tả định dạng tệp ELF là ABI. Nó không đủ điều kiện để trở thành một giao diện theo định nghĩa.
Tôi biết, vì chúng ta đang nói ở mức độ thấp như vậy nên nó phải rất cụ thể. Nhưng tôi không chắc nó "kiến trúc tập lệnh (ISA)" cụ thể như thế nào?
Tôi có thể tìm ABI của Microsoft Windows ở đâu?
Vì vậy, đây là những truy vấn chính đang làm phiền tôi.