ABI
এবিআই
Application Binary Interface — hardware-এ কম্পাইল-হওয়া কোড কীভাবে interact করবে তার নিয়ম: register ব্যবহার, calling convention, data layout। hardware-এনফোর্সড না, সফটওয়্যার-চুক্তি।
also: Application Binary Interface
ISA বলে দেয় hardware কী করতে পারে (কতগুলো register, কী কী instruction)। ABI বলে দেয় compiled code কীভাবে তা ব্যবহার করবে — সম্পূর্ণ ভিন্ন, পৃথক ডকুমেন্ট, hardware-vendor না, OS/compiler-লেখকদের মধ্যে সম্মত।
একই hardware, ভিন্ন ABI চলতে পারে — x86-64-এ System V
(Linux/macOS: প্রথম int arg rdi) আর Windows x64 (প্রথম int
arg rcx) দুটোই বৈধ, একে অপরের সাথে অসামঞ্জস্যপূর্ণ। এই কারণেই
cross-platform C library-তে প্রায়ই আলাদা calling-convention
attribute লাগে।
ABI-র আওতায় শুধু calling convention না — struct-এর byte layout
(padding, alignment), sizeof নির্দিষ্ট type-এর, name mangling
(C++), exception-handling metadata — সবকিছু। দুইটা .o ফাইল
ভিন্ন compiler দিয়ে কম্পাইল হয়েও লিংক করতে পারে শুধু যদি
দুটোই একই ABI মানে।
Source-compatible হওয়া ABI-compatible হওয়ার গ্যারান্টি না।
C++ ভাষায় এটা বিশেষভাবে সত্য — দুইটা compiler ভিন্ন version-এ
একই source code থেকে ABI-অসামঞ্জস্যপূর্ণ binary বানাতে পারে
(vtable layout, exception-handling ভিন্ন হতে পারে) — এই কারণেই
libstdc++/libc++-এর মতো library-তে “ABI stability”
আলাদাভাবে একটা explicit প্রতিশ্রুতি হিসেবে documented থাকে।
Hardware ABI ভঙ্গ করলে কোনো error দেয় না — শুধু ভুল register থেকে ভুল মান পড়া হয়, ফলাফল silent corruption অথবা crash, প্রায়ই মূল কারণ থেকে অনেক দূরে।