api <-> abi < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 17:50 Sa 17.10.2009 | Autor: | AriR |
guten tag,
ich habe einige probleme mit den begriffen ABI und API und hoffe ihr könnt mir da weiterhelfen.
liegt zB eien programmiersprache wie java vor und stellt funktionalitäten aus librarys bereit, welche selber in java code implementiert sind, nennt man dies doch eine API oder?
was ist dann eine ABI? funktionalitäten, die java zB zur verfügung stellt, die jedoch schon in maschinencode vorliegen und vom compiler nicht mehr erstellet werden müssen und "blind" in den code gepack werden?
also bsp API:
angenommen "public int addiere(int a, int b)" ist eine funktion aus der java api zur addition von 2 integer zahlen mit:
public int addiere(int a, int b){
return a+b;
}
dann wäre "addiere" doch teil der API oder?
als abi müsste das ganze dann so aussehen
MOV AX,EBP+4
MOV BX,EPB+8
ADD AX,BX
oder wie hat man sich das ganze vorzustellen?
die begriffe API und ABI sind auch nicht exklusiv oder? das heißt etwas kann sehr wohl ne API und eine ABI sein oder? Beispielsweise eine schnittstelle für den maschinencode (welches auch sozusagen quellcode eine sehr niedrigen programmiersprache ist). diese schittstelle stellt ja sozusagen ebenfalls eine programmierschnittstelle dar (auf niedriger ebene) und implementiert ist die schnittstelle in maschinencode und müsste somit ne API und eine ABI sein, wenn ich das richtig verstehe
schönes wochenende wünsche ich allen
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 18:37 Sa 17.10.2009 | Autor: | rainerS |
Hallo!
> guten tag,
>
> ich habe einige probleme mit den begriffen ABI und API und
> hoffe ihr könnt mir da weiterhelfen.
>
> liegt zB eien programmiersprache wie java vor und stellt
> funktionalitäten aus librarys bereit, welche selber in
> java code implementiert sind, nennt man dies doch eine API
> oder?
>
> was ist dann eine ABI? funktionalitäten, die java zB zur
> verfügung stellt, die jedoch schon in maschinencode
> vorliegen und vom compiler nicht mehr erstellet werden
> müssen und "blind" in den code gepack werden?
Der Unterschied ist etwas der zwischen Hochsprache und Maschinensprache.
>
> also bsp API:
>
> angenommen "public int addiere(int a, int b)" ist eine
> funktion aus der java api zur addition von 2 integer zahlen
> mit:
>
> public int addiere(int a, int b){
> return a+b;
> }
>
> dann wäre "addiere" doch teil der API oder?
Korrekt. Aber nur der Teil "public int addiere(int a, int b)" und die Aussage, dass der Rückgabewert die Summe der Zahlen a und b sein soll, denn die Implementation "a+b" ist nicht Teil der API.
> als abi müsste das ganze dann so aussehen
>
> MOV AX,EBP+4
> MOV BX,EPB+8
> ADD AX,BX
>
>
> oder wie hat man sich das ganze vorzustellen?
Nein, das wäre ein konkretes Programm. Als ABI würde man zum Beispiel angeben, wieviele Bytes der Datentyp int hat und wie diese Bytes im Speicher liegen, zum Beispiel dass die Adresse durch 4 teilbar sein muss, oder dass die Zahlen a und b auf dem Stack liegen (oder auch nicht).
Mit der API werden die Aufrufkonventionen auf der Ebene der Programmiersprache festgelegt, mit der ABI die Konventionen für komilierte Programme. Wie das im Einzelnen aussieht, hängt auch davon ab, welche Programmiersprache man hat.
Java ist insofern kein so gutes Beispiel, weil die Implementationen sich so wenig unterscheiden.
Bei C sieht man das besser: ein int kann (theoretisch) alle möglichen Größen haben, 2,4 oder 8 Bytes für ein int sind alle möglich. Die API ist immer dieselbe: eine Funktion addiere mit zwei Parametern vom Typ int und einem Rückgabewert vom Typ int. Aber bei komplierten Programmen (und dabei auf der Ebene des ABI) macht das natürlich einen großen Unterschied, wieviele Bytes für ein int nötig sind.
> die begriffe API und ABI sind auch nicht exklusiv oder? das
> heißt etwas kann sehr wohl ne API und eine ABI sein oder?
> Beispielsweise eine schnittstelle für den maschinencode
> (welches auch sozusagen quellcode eine sehr niedrigen
> programmiersprache ist). diese schittstelle stellt ja
> sozusagen ebenfalls eine programmierschnittstelle dar (auf
> niedriger ebene) und implementiert ist die schnittstelle in
> maschinencode und müsste somit ne API und eine ABI sein,
> wenn ich das richtig verstehe
Ich würde die Begriffe schon auseinanderhalten, wie ich das am Beispiel der Sprache C gemacht habe.
Suche mal in der englischen Wikipedia nach den Begriffen Application programming interface und Application binary interface; die Erklärung ist ausführlicher als in der deutschen.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 19:28 Sa 17.10.2009 | Autor: | AriR |
das hat schon viel weitergeholfen danke :)
was ich nicht verstehe ist folgendes:
wo genau ist die grenze zwischen api und abi? legen wir zb als programmiersprache eine assemblersprache zugrunde die auch eine bibliothek zur verfügung stellt. ist die schnittstelle der bibliothek dann auch eine api? wenn eine funktion (mit parameter, rückgabewert) der bibliothek aufgerufen wird, geht das (aufgrund der niedrigen stufe) müsste das auch über register, stack etc gehen und wäre somit auch eine abi
oder?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:20 So 25.10.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 11:45 So 18.10.2009 | Autor: | CSSX |
So wie ich das gelernt habe ist eine API sprachspezifisch (also definiert fuer Java, C++, Haskell) und eine ABI ist sprachunabhaengig. Also die ABI beschreibt wie zwei Programme binaer zu interagieren haben.
Wenn du ein Programm in Assembly schreibst ist das nicht eine ABI, weil dein Programm beschreibt ja nicht wie z.B. ein int auf dem Stack ausgerichtet werden muss oder welche Register caller/callee safe sind. Kann aber auch sein, dass man sich darum streiten kann
|
|
|
|