[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] ABI vs. API



On Sunday 08 February 2004 19:12, Monique Y. Herman wrote:
> On 2004-02-04, Colin Watson penned:

> > An ABI is the interface to a library as seen by compiled code. To
> > figure out the ABI for the above, you need to know things like which
> > way round the bytes in an int go, how long a pointer is, and where the
> > arguments go on the stack when you're calling a function. More
> > complicated and library-specific ABIs include things like the way
> > elements in a struct are laid out.
>
> [snip]
>
> Let me reword this to make sure I "get" it.
>
> An API is a contract that the author of a set of methods (I'd call them
> libraries, but this seems to be an overloaded term) provides to the user
> of these methods.  The contract defines the legal method signatures.
>
> An ABI could be the compiled implementation of an API.  Even if the API
> doesn't change, the ABI will change if the author changes the
> implementation of a method.
>

The way you express that is wrong - but that might because you don't quite 
understand what you have said.

An API is defined in terms of a High Level Language (eg C or C++, although it 
could be any formal computer language)

An "implementation" of a set of methods is defined by convention to mean how 
the author choses to achieve the contract he has made at the interface, not a 
definition of the converted API into binary form. So this might be the 
algorithm used to perform the function the interface defines and there may be 
several ways of doing this without changing the interface.  The particular 
one chosen by the author is his implementation.

Presuming one understands that any high level language (eg C or C++) which is 
used to define the API may also be used to make the "implementation".  A 
compiler takes that language used in the implementation and turns it into 
binary.  Similarly the user of an API also takes his high level code and 
turns it into binary.  Where therefore have a binary version of the interface 
(or contract) between the two parts.  This is the ABI

It is important, because to actually work on a computer the binary has to be 
right.  It is possible that different compilers take the same language and 
turn it into different binary forms.  This could lead to problems.  On the 
other hand, it is also possible for two  different languages to be used to 
write the implementation and the using code such that the two compilers 
produce a compatible interface.


-- 
Alan Chandler
alan@chandlerfamily.org.uk



Reply to: