On 2004-02-08, Alan Chandler penned: > 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.
Hrm. > > 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. This is exactly why I said "could be" as opposed to "is." > 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 I don't think my above statements contradict this. I didn't define the ABI above; I did give an example of its potential use. > 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. Yes, although the latter would probably be non-trivial. -- monique -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

