www.vorkurse.de
Ein Projekt von vorhilfe.de
Die Online-Kurse der Vorhilfe

E-Learning leicht gemacht.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Teams · Forum · Wissen · Kurse · Impressum
Forenbaum
^ Forenbaum
Status Mathe-Vorkurse
  Status Organisatorisches
  Status Schule
    Status Wiederholung Algebra
    Status Einführung Analysis
    Status Einführung Analytisc
    Status VK 21: Mathematik 6.
    Status VK 37: Kurvendiskussionen
    Status VK Abivorbereitungen
  Status Universität
    Status Lerngruppe LinAlg
    Status VK 13 Analysis I FH
    Status Algebra 2006
    Status VK 22: Algebra 2007
    Status GruMiHH 06
    Status VK 58: Algebra 1
    Status VK 59: Lineare Algebra
    Status VK 60: Analysis
    Status Wahrscheinlichkeitst

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Softwaretechnik und Programmierung" - api <-> abi
api <-> abi < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

api <-> abi: Frage (beantwortet)
Status: (Frage) beantwortet Status 
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

        
Bezug
api <-> abi: Antwort
Status: (Antwort) fertig Status 
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

Bezug
                
Bezug
api <-> abi: Frage (überfällig)
Status: (Frage) überfällig Status 
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?

Bezug
                        
Bezug
api <-> abi: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:20 So 25.10.2009
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
        
Bezug
api <-> abi: Source/binary
Status: (Antwort) fertig Status 
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 :-)

Bezug
                
Bezug
api <-> abi: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 12:37 So 18.10.2009
Autor: rainerS

Hallo!

> 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 :-)

Im Zweifelsfall kann man sich immer streiten. ;-)

Der Begriff API wird auch für hochsprachenunabhängige Beschreibungen benutzt. Allerdings braucht man dazu natürlich immer noch die Abbildung der sprachenunabhängigen API auf die sprachspezifischen Konstrukte.

Viele Grüße
   Rainer

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorkurse.de
[ Startseite | Mitglieder | Teams | Forum | Wissen | Kurse | Impressum ]