Verwendet jede API eine API die schlussendlich in Assemblercode geschrieben wurde?
Ich programmier jetzt schon eine Weile und weiss das man für bestimmte Funktionen wie z.B.: eine Datei lesen, Grafikoperationen usw. bestimmte Bibliotheken braucht die dir eine API in Form von sagen wir mal Methoden und Klassen bereitstellt. Diese APIs sind doch auch wieder in einer Programmiersprache geschrieben wie z.B.: die Programmiersprache die man selber nutzt oder anderen. Aber diese APIs brauchen doch auch wieder APIs um bestimtme Funktionen zu definieren. Geht das so lange zurück bis die API in Assemblercode geschrieben wurde? So wie ich mir das vorstelle kann man mit einer höheren Programmiersprache wie C# z.B. nur die Logik, Algorithmen und Berechnungen erstellen und die APIs geben dir die grundlegenen Funktionen um eine bestimmte Aufgaben zu erledigen. Kann auch sein das ich da komplett falsch liege. Wäre nett wenn mir das mal jemand genauer erklären könnte.
5 Antworten
Ich empfehle Dir mal den Artikel auf Wikipedia anzuschauen. Gleich ganz oben ist ein Bild, das den Unterschied zwischen API und ABI aufzeigt.
Die API ist eine Schnittstellenbeschreibung auf Ebene der jeweiligen Hochsprache und entsprechend abstrahiert. Natürlich endet eine Bibliothek, die in C geschrieben wurde als Maschinencode, ebenso wie ein Binary, das diese nutzt. Die Details der Interaktion auf der Maschinenebene inklusive Calling Convention fallen eben der ABI zu.
Nein.
Meist wird es erst zu assembly Code(meist LLVM IR, aber kommt drauf an welcher Compiler), und dann zu machine Code(je nach Platform). Low level assembly sprachen, wie x86 assembly, wird meist übersprungen und direkt zu machine Code.
Außerdem, mit einem API hat das nichts zu tun. API ist eine Schnittstelle mit der eine Software auf einen andere software zugreift.
Du meinst wohl eher Kompilierung oder ähnliches.
Nein. Assembler wird eigentlich kaum noch verwendet. Komplette Betriebssysteme werden in Kompilierten Hochsprachen wie C oder C++ geschrieben und unter dem Kernel etc des Betriebssystems ist eigentlich keine API mehr sondern direkt die Hardware.
Wenn du nun dein Programm schreibst dann ruft es die API des Betriebssystems auf und diese ist eben dann sehr wahrscheinlich in C oder C++ geschrieben.
Denkbar sind da aber alle Kompilierten Hochsprachen oder auch theoretisch Assembler, wobei der bis auf wenige Ausnahmen, wie gesagt, kaum noch verwendet wird.
Man könnte hier natürlich noch sagen, dass das OS selbst den Microcode im Prozessor als eine Art weitere schicht hat, aber das hat nicht mehr wirklich etwas mit einer API zu tun.
Naja, nicht unbedingt "APIs die APIs verwenden die APIs verwenden", aber im Prinzip hast du schon recht.
Der Prozessor kann nur Maschinencode ausführen. Auf unterster Ebene werden dann irgendwann halt nicht mehr "APIs" benutzt, sondern irgendwann landest du halt bei einzelnen Befehlen und Anweisungen (in einer Methode z.B.). Diese werden dann vom Compiler in Maschinencode übersetzt und werden dann vom Prozessor ausgeführt.
Oder die Befehle und Anweisungen werden von einem (Bytecode-)Interpreter ausgeführt. Beim Interpreter geht das Spiel dann halt weiter: der ist wieder mittels Klassen und Methoden implementiert, die irgendwann halt auch einzelne Anweidungen und Befehle verwenden - die wieder in Maschinencode implementiert sind.
Da CPUs und das "Drumherum" ausschließlich Maschinencode "verstehen", ein solcher Binärcode aber für uns absolut unübersichtlich ist, "landet" letztlich natürlich jede Hochsprache als Maschinencode im Rechner. Völlig egal, ob API oder sonstwas.
Lax formuliert kann man sagen, Maschinencode ist die unterste, direkte Ebene, Assembler "gleich darüber", die Hochsprachen wiederum darüber. Maschinencode und Assembler "wissen" nicht, wie das was sie tun sollen in der jeweiligen Hochsprache, wie sie dort definiert, klassifiziert sind.
Also wenn man eine hohe API benutzt landet man Ende immer bei einer API die schlussendlich direkt mit Maschinencode oder Assemlbercode geschrieben wurde und z.B.: kein kompilierte Code einer hohen Sprache ist?