Assembler, Compiler, Interpreter Vor-/Nachteile?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Die Antworten zum Compiler und Interpreter von den anderen sind ziemlich gut, aber ich möchte nochmal auf einen Pseudo-Vorteil bzw. gravierenden Nachteil von Assembler hinweisen:

Auf aktuellen Desktop Systemen (x86, x64 und teilweise auch ARM) sollte rein theoretisch ein Stück Code, geschrieben in Assembler, am schnellsten laufen, aaaaber moderne CPUs sind ultra-komplexe Dinger, es gibt unzählige (Hardware- und / oder Microcode-) Bugs, man muss hunderte (!) Seiten von Errata lesen und ständig das Pipelining im Hinterkopf behalten, um WIRKLICH effizienten Code schreiben zu können.

Keine Frage, das ist möglich, aber der Aufwand übersteigt fast immer bei weitem den Nutzen, im Sinne von Entwicklungszeit.

Früher in den 90ern war allen Entwicklern bekannt, dass "inc ax" langsamer ist als "add ax, 1", und deshalb wurde die zweite Methode eingesetzt, auch wenn das den Code etwas mehr aufbläht.

Heutzutage gibt es ähnliche Dinge zu beachten, nur hundert mal komplexer und auch quantitativ (fast) unüberschaubar.

Deshalb eignet sich Assembler heutzutage meistens nur noch dazu, fertigen Code zu analysieren / reversen, in einer kompilierten Sprache Inline-Assembler mit nur einer Hand voll spezieller Instruktionen zu nutzen, oder auf einem Mikrocontroller zu entwickeln, wo die Zahl der möglichen Instruktionen und die Gesamtkomplexität noch recht einfach überschaubar ist.

Nichtsdestortrotz macht Assembler großen Spaß und man kann damit wirklich überdurchschnittlich kleine und flinke Programme schreiben, aaaaber das frisst wie gesagt a) verdammt viel Zeit und b) muss man sich da gerade bei modernen CPUs wirklich richtig gut auskennen, um eine Konkurrenz zu akutellen Compilern sein zu können.

Woher ich das weiß:Berufserfahrung

Eigentlich stimmt nichts davon.

Erstmal Compiler, Interpreter und Assembler sind keine Sprachen(Ansichtssache bei Assembler), sondern Übersetzungsprogramme.

Es ist keine Frage davon, wie viele Zeilen sie übersetzen, sondern wann sie übersetzen. Compiler übersetzen zeitlich getrennt von der Ausführung, Interpreter übersetzen unmittelbar vor oder währen der Ausführung.

Fehlersuche ist eher Frage von Syntax und Semantik als von Wahl des Übersetzungsprogramms, wobei einige Compiler bessere Fehlermeldungen geben als andere.

Compiler, Interpreter 

Sind keine Sprachen es sind "Arten" wie der code zum übersetzt wird in Maschienensprache. C++, C#, Java das sind Programmiersprachen.

c++-> Compiler

c#,Java -> Interpreter

Schau mal da steht alles wichtige drin:

https://www.c64-wiki.de/wiki/Unterschiede_zwischen_Assembler,_Interpreter_und_Compiler

PerfectMuffin  25.10.2018, 15:59

Wobei das streng genommen nur der Standard ist. Man kann C++ interpretieren, man kann C# kompilieren.

Ob Java kompiliert ist, ist Ansichtssache und es gibt Programme die Java mitsamt JVM komplett kompilieren.

1
ohwehohach  25.10.2018, 22:25

Das ist falsch! C# und Java sind keine Interpreter! Es sind Compiler, die jedoch nicht direkt in Maschinencode übersetzen, sondern in IL, respektive Java Bytecode.

Diese werden dann von der Runtime per JIT Compiler in den tatsächlichen maschinencode übersetzt und ausgeführt.

0

Das sind nicht drei Programmiersprachen, sondern Programme, welche Programmcode in Maschinencode übersetzen.

Den von Dir genannten Vorteil des Interpreters verstehe ich nicht. Die syntaktische Fehlersuche beim Interpreter wäre viel aufwändiger, wenn immer nur eine Zeile übersetzt würde. Außerdem arbeitet quasi kein Interpreter heute mehr so, dass er zeilenweise übersetzt.

Der Compiler übersetzt das Programm ebenfalls in einem Rutsch. Das macht aber die Fehlersuche nicht schwieriger.

Wenn Du Vor- und Nachteile von Assembler, Compiler und Interpreter gegenüberstellen möchtest, dann nimm doch lieber sowas (nicht vollständig):

Assembler Vorteile: Programme sehr schnell, da auf einen speziellen Prozessor optimierbar.

Assembler Nachteile: Ausführbares Programm nur auf eine Architektur optimiert, Schwer lesbar, geschweige denn zu verstehen, Fehlersuche schwierig.

Interpreter Vorteile: Programme sind flexibel auf jeder Plattform ausführbar, sofern der Interpreter hierfür verfügbar ist.

Interpreter Nachteile: Häufig langsam, da bei jedem Programmstart das Programm erst übersetzt werden muss.

Compiler Vorteile: Programme ähnlich schnell wie bei Assembler, ausführbares Programm kann weitergegeben werden, Interpreter nicht nötig.

Compiler Nachteile: Programm ist auf eine Architektur festgelegt, außer, es wird für andere Plattformen ebenfalls compiliert.