wake-up-neo.com

Kompilierte und interpretierte Sprachen

Ich versuche, den Unterschied besser zu verstehen. Ich habe online viele Erklärungen gefunden, aber sie tendieren eher zu den abstrakten Unterschieden als zu den praktischen Implikationen.

Die meisten Programmiererfahrungen habe ich mit CPython (dynamisch, interpretiert) und Java (statisch, kompiliert) gemacht. Ich verstehe jedoch, dass es auch andere Arten von interpretierten und kompilierten Sprachen gibt Die Tatsache, dass ausführbare Dateien von Programmen verteilt werden können, die in kompilierten Sprachen geschrieben sind, hat jeder Typ Vor-/Nachteile. Oft wird argumentiert, dass interpretierte Sprachen interaktiv verwendet werden können, aber ich glaube, dass kompilierte Sprachen auch interaktiv implementiert werden können , richtig?

258
chimeracoder

Eine kompilierte Sprache ist eine Sprache, in der das einmal kompilierte Programm in den Anweisungen des Zielcomputers ausgedrückt wird. Beispielsweise könnte eine zusätzliche "+" - Operation in Ihrem Quellcode direkt in die Anweisung "ADD" im Maschinencode übersetzt werden.

Eine interpretierte Sprache ist eine Sprache, in der die Anweisungen nicht direkt vom Zielcomputer ausgeführt werden, sondern von einem anderen Programm gelesen und ausgeführt werden (das normalerweise geschrieben ist die Sprache der nativen Maschine). Zum Beispiel würde die gleiche "+" - Operation vom Interpreter zur Laufzeit erkannt, der dann seine eigene "add (a, b)" - Funktion mit den entsprechenden Argumenten aufruft, die dann den Maschinencode "ADD" - Befehl ausführt .

Sie können alles tun, was Sie in einer übersetzten Sprache in einer kompilierten Sprache tun können und umgekehrt - beide sind vollständig. Beide haben jedoch Vor- und Nachteile für die Implementierung und Verwendung.

Ich werde komplett verallgemeinern (Puristen verzeihen mir!), Aber hier sind grob die Vorteile kompilierter Sprachen:

  • Höhere Leistung durch direkte Verwendung des systemeigenen Codes des Zielcomputers
  • Möglichkeit, während der Kompilierungsphase sehr leistungsfähige Optimierungen vorzunehmen

Und hier sind die Vorteile von interpretierten Sprachen:

  • Einfacher zu implementieren (gute Compiler zu schreiben ist sehr schwer !!)
  • Keine Notwendigkeit, eine Kompilierungsphase auszuführen: Kann Code direkt "on the fly" ausführen
  • Kann für dynamische Sprachen praktischer sein

Beachten Sie, dass moderne Techniken wie die Bytecode-Kompilierung zusätzliche Komplexität verursachen. Der Compiler zielt auf eine "virtuelle Maschine" ab, die nicht mit der zugrunde liegenden Hardware identisch ist. Diese Anweisungen der virtuellen Maschine können dann zu einem späteren Zeitpunkt erneut kompiliert werden, um systemeigenen Code zu erhalten (z. B. wie vom JVM-JIT-Compiler Java ausgeführt).

430
mikera

Eine Sprache selbst wird weder kompiliert noch interpretiert, sondern nur eine bestimmte Implementierung einer Sprache. Java ist ein perfektes Beispiel. Es gibt eine Bytecode-basierte Plattform (die JVM), einen nativen Compiler (gcj) und einen Interpeter für eine Obermenge von Java= (bsh) Was ist nun also Java jetzt? Bytecode-kompiliert, nativ-kompiliert oder interpretiert?

Andere Sprachen, die kompiliert und interpretiert werden, sind Scala, Haskell oder Ocaml. Jede dieser Sprachen verfügt über einen interaktiven Interpreter sowie einen Compiler für Bytecode oder systemeigenen Maschinencode.

Eine allgemeine Kategorisierung von Sprachen nach "kompiliert" und "interpretiert" ist daher wenig sinnvoll.

94
lunaryorn

Beginnen Sie, in Begriffen von: Explosion von der Vergangenheit zu denken

Es war einmal vor langer Zeit, als wir im Land der Computerinterpreten und -compiler lebten. Es kam zu allerlei Aufhebens um die Verdienste eines über das andere. Die allgemeine Meinung zu dieser Zeit war etwas in der Richtung von:

  • Dolmetscher: Schnell zu entwickeln (bearbeiten und ausführen). Langsam auszuführen, da jede Anweisung bei jeder Ausführung in Maschinencode interpretiert werden musste (denken Sie daran, was dies für eine Schleife bedeutete, die Tausende Male ausgeführt wurde).
  • Compiler: Langsam in der Entwicklung (Bearbeiten, Kompilieren, Verknüpfen und Ausführen. Die Kompilierungs-/Verknüpfungsschritte können einige Zeit in Anspruch nehmen). Schnell auszuführen. Das gesamte Programm befand sich bereits im nativen Maschinencode.

Zwischen einem interpretierten Programm und einem kompilierten Programm bestand ein Unterschied von einer oder zwei Größenordnungen in der Laufzeitleistung. Andere Unterscheidungsmerkmale, z. B. die Veränderbarkeit des Codes zur Laufzeit, waren ebenfalls von Interesse, aber der Hauptunterschied betraf die Leistungsprobleme zur Laufzeit.

Heute hat sich die Landschaft so weit entwickelt, dass die zusammengestellte/interpretierte Unterscheidung so gut wie keine Rolle spielt. Viele kompilierte Sprachen erfordern Laufzeitdienste, die nicht vollständig maschinencodebasiert sind. Außerdem werden die meisten interpretierten Sprachen vor der Ausführung in Bytecode "kompiliert". Byte-Code-Interpreter können sehr effizient sein und es unter dem Gesichtspunkt der Ausführungsgeschwindigkeit mit vom Compiler generiertem Code aufnehmen.

Der klassische Unterschied besteht darin, dass Compiler mithilfe eines Laufzeitsystems systemeigenen Maschinencode generieren, Quellcode lesen und Maschinencode im laufenden Betrieb generieren. Heutzutage gibt es nur noch sehr wenige klassische Interpreter - fast alle kompilieren in Bytecode (oder einem anderen halbkompilierten Zustand), der dann auf einer virtuellen "Maschine" ausgeführt wird.

50
NealB

Die extremen und einfachen Fälle:

  • Ein Compiler erstellt eine ausführbare Binärdatei im nativen ausführbaren Format des Zielcomputers. Diese Binärdatei enthält alle erforderlichen Ressourcen mit Ausnahme der Systembibliotheken. Es ist ohne weitere Vorbereitung und Verarbeitung einsatzbereit und funktioniert blitzschnell, da der Code der native Code für die CPU auf dem Zielcomputer ist.

  • Ein Interpreter präsentiert dem Benutzer eine Eingabeaufforderung in einer Schleife, in der er Anweisungen oder Code eingeben kann, und nach dem Drücken von RUN oder dem entsprechenden Befehl prüft der Interpreter jede Zeile, scannt sie, analysiert sie und führt sie interpretativ aus, bis das Programm ausgeführt wird ein Haltepunkt oder ein Fehler. Da jede Zeile für sich behandelt wird und der Interpreter nichts von der vorherigen Darstellung der Zeile "lernt", ist der Aufwand für die Konvertierung von lesbarer Sprache in Maschinenanweisungen jedes Mal für jede Zeile zu bemühen, sodass sie hundeschwach ist. Auf der anderen Seite kann der Benutzer sein Programm auf alle Arten untersuchen und auf andere Weise mit ihm interagieren: Variablen ändern, Code ändern, im Trace- oder Debug-Modus ausführen ... was auch immer.

Mit denen aus dem Weg, lassen Sie mich erklären, dass das Leben nicht mehr so ​​einfach ist. Zum Beispiel,

  • Viele Dolmetscher kompilieren den ihnen gegebenen Code vor, damit der Übersetzungsschritt nicht immer wieder wiederholt werden muss.
  • Einige Compiler kompilieren nicht nach CPU-spezifischen Maschinenanweisungen, sondern nach Bytecode, einer Art künstlichem Maschinencode für eine fiktive Maschine. Dies macht das kompilierte Programm etwas portabler, erfordert jedoch auf jedem Zielsystem einen Bytecode-Interpreter.
  • Die Bytecode-Interpreter (ich schaue hier auf Java)) neigen dazu, den Bytecode, den sie für die CPU des Zielabschnitts kurz vor der Ausführung (JIT genannt) erhalten, neu zu kompilieren. Dies erfolgt häufig nur für Code, der häufig ausgeführt wird (Hotspots).
  • Einige Systeme, die wie Interpreter aussehen und sich so verhalten (z. B. Clojure), kompilieren jeden Code, den sie erhalten, sofort, ermöglichen jedoch den interaktiven Zugriff auf die Programmumgebung. Das ist im Grunde der Komfort von Interpreten mit der Geschwindigkeit der binären Kompilierung.
  • Einige Compiler kompilieren nicht wirklich, sondern verarbeiten Code nur vorab und komprimieren ihn. Ich habe vor einiger Zeit gehört, dass Perl so funktioniert. Manchmal macht der Compiler nur einen kleinen Teil der Arbeit und das meiste davon ist immer noch Interpretation.

Letztendlich ist das Dolmetschen und Kompilieren heutzutage ein Kompromiss, wobei die (einmalige) Kompilierung häufig durch eine bessere Laufzeitleistung belohnt wird, während eine interpretative Umgebung mehr Möglichkeiten zur Interaktion bietet. Kompilieren oder Dolmetschen ist meistens eine Frage der Aufteilung des Programms in verschiedene Prozesse, und die Darstellung ist heutzutage etwas verschwommen, da Sprachen und Produkte versuchen, das Beste aus beiden Welten zu bieten.

24
Carl Smotricz

From http://www.quora.com/Was-ist-der-Differenz-zwischen-kompilierten-und-interpretierten-Programmiersprachen

Es gibt keinen Unterschied, da "kompilierte Programmiersprache" und "interpretierte Programmiersprache" keine aussagekräftigen Konzepte sind. Jede Programmiersprache, und ich meine wirklich jede, kann interpretiert oder kompiliert werden. Interpretation und Kompilierung sind also Implementierungstechniken, keine Attribute von Sprachen.

Interpretation ist eine Technik, bei der ein anderes Programm, der Interpreter, Operationen für das zu interpretierende Programm ausführt, um es auszuführen. Wenn Sie sich vorstellen können, ein Programm zu lesen und Schritt für Schritt das zu tun, was es verspricht, sagen wir auf einem Blatt Papier, dann ist es genau das, was ein Dolmetscher auch tut. Ein häufiger Grund für die Interpretation eines Programms ist, dass Dolmetscher relativ einfach zu schreiben sind. Ein weiterer Grund ist, dass ein Interpreter überwachen kann, was ein Programm versucht, während es ausgeführt wird, um beispielsweise aus Sicherheitsgründen eine Richtlinie durchzusetzen.

Die Kompilierung ist eine Technik, bei der ein Programm, das in einer Sprache (der „Ausgangssprache“) geschrieben wurde, in ein Programm in einer anderen Sprache (der „Objektsprache“) übersetzt wird, was hoffentlich dasselbe wie das ursprüngliche Programm bedeutet. Während der Übersetzung versucht der Compiler häufig, das Programm so zu transformieren, dass das Objektprogramm schneller wird (ohne seine Bedeutung zu ändern!). Ein häufiger Grund für das Kompilieren eines Programms ist, dass es eine gute Möglichkeit gibt, Programme in der Objektsprache schnell und ohne zusätzlichen Aufwand für die Interpretation der Quellsprache auszuführen.

Möglicherweise haben Sie anhand der obigen Definitionen vermutet, dass sich diese beiden Implementierungstechniken nicht gegenseitig ausschließen und sogar ergänzen. Herkömmlicherweise war die Objektsprache eines Compilers Maschinencode oder ähnliches, was sich auf eine beliebige Anzahl von Programmiersprachen bezieht, die von bestimmten Computer-CPUs verstanden werden. Der Maschinencode würde dann "auf dem Metall" laufen (obwohl man vielleicht sieht, wenn man genau hinschaut, dass das "Metall" viel wie ein Dolmetscher funktioniert). Heutzutage ist es jedoch sehr verbreitet, einen Compiler zu verwenden, um Objektcode zu generieren, der interpretiert werden soll - so funktioniert beispielsweise Java) Compiler, die andere Sprachen in JavaScript übersetzen, das dann häufig in einem Webbrowser ausgeführt wird, um JavaScript zu interpretieren, oder um eine virtuelle Maschine oder einen systemeigenen Code zu kompilieren Sie können auch einen Compiler verwenden, um den Objektcode zu generieren, der dann der Quellcode für einen anderen Compiler ist, der möglicherweise sogar den Code im Speicher kompiliert, der gerade noch ausgeführt werden muss Idee: Es gibt viele Möglichkeiten, diese Konzepte zu kombinieren.

20
Bhavin Shah

Der größte Vorteil von interpretiertem Quellcode gegenüber kompiliertem Quellcode ist PORTABILITÄT .

Wenn Ihr Quellcode kompiliert wurde, müssen Sie für jeden Prozessortyp und/oder jede Plattform, auf der Ihr Programm ausgeführt werden soll, eine andere ausführbare Datei kompilieren (z. B. eine für Windows x86, eine für Windows x64, eine für Linux x64 usw.) auf). Sofern Ihr Code nicht vollständig standardkonform ist und keine plattformspezifischen Funktionen/Bibliotheken verwendet, müssen Sie tatsächlich mehrere Codebasen schreiben und verwalten!

Wenn Ihr Quellcode interpretiert wird, müssen Sie ihn nur einmal schreiben und er kann von einem geeigneten Interpreter auf jeder Plattform interpretiert und ausgeführt werden! Es ist portabel! Beachten Sie, dass ein Interpreter selbst ein ausführbares Programm ist, das is für eine bestimmte Plattform geschrieben und kompiliert wurde.

Ein Vorteil von kompiliertem Code ist, dass er dem Endbenutzer verbirgt den Quellcode vorenthält (was geistiges Eigentum sein kann), da Sie nicht den ursprünglichen, von Menschen lesbaren Quellcode bereitstellen müssen Stellen Sie eine obskure ausführbare Binärdatei bereit.

10
Niko Bellic

Ein Compiler und ein Interpreter erledigen dieselbe Aufgabe: Übersetzen einer Programmiersprache in eine andere Programmiersprache, normalerweise näher an der Hardware, häufig direkt ausführbarer Maschinencode.

Traditionell bedeutet "kompiliert", dass diese Übersetzung in einem Durchgang erfolgt, von einem Entwickler durchgeführt wird und die resultierende ausführbare Datei an die Benutzer verteilt wird. Reines Beispiel: C++. Die Kompilierung dauert in der Regel ziemlich lange und versucht, viele kostspielige Optimierungen vorzunehmen, damit die resultierende ausführbare Datei schneller ausgeführt wird. Endbenutzer verfügen nicht über die Tools und das Wissen, um Inhalte selbst zu kompilieren, und die ausführbare Datei muss häufig auf einer Vielzahl von Hardware ausgeführt werden, sodass Sie nicht viele hardwarespezifische Optimierungen vornehmen können. Während der Entwicklung bedeutet der separate Kompilierungsschritt einen längeren Rückkopplungszyklus.

Traditionell bedeutet "interpretiert", dass die Übersetzung "on the fly" erfolgt, wenn der Benutzer das Programm ausführen möchte. Ein reines Beispiel: Vanilla PHP. Ein naiver Interpreter muss bei jeder Ausführung jeden Code analysieren und übersetzen, was ihn sehr langsam macht. Komplexe und kostspielige Optimierungen können nicht durchgeführt werden, da sie länger dauern als die bei der Ausführung eingesparten Zeit. Es kann jedoch die Funktionen der Hardware, auf der es ausgeführt wird, vollständig nutzen. Das Fehlen eines separaten Kompilierungsschritts verringert die Rückmeldungszeit während der Entwicklung.

Aber heutzutage ist "kompiliert vs. interpretiert" kein Schwarz-Weiß-Problem, es gibt Zwischentöne. Naive, einfache Dolmetscher sind so gut wie ausgestorben. Viele Sprachen verwenden einen zweistufigen Prozess, bei dem der Code auf hoher Ebene in einen plattformunabhängigen Bytecode übersetzt wird (der viel schneller zu interpretieren ist). Dann haben Sie "Just-in-Time-Compiler", die Code höchstens einmal pro Programmlauf kompilieren, manchmal Ergebnisse zwischenspeichern und sogar intelligent entscheiden, selten ausgeführten Code zu interpretieren und leistungsstarke Optimierungen für Code vorzunehmen, der häufig ausgeführt wird. Während der Entwicklung können Debugger selbst für traditionell kompilierte Sprachen Code innerhalb eines laufenden Programms wechseln.

7

Zunächst eine Klarstellung: Java ist nicht vollständig statisch kompiliert und in der Art von C++ verknüpft. Es wird in Bytecode kompiliert, der dann von einer JVM interpretiert wird. Die JVM kann In-Time-Kompilierung in die Maschinensprache, muss dies aber nicht tun.

Um es auf den Punkt zu bringen: Ich denke, Interaktivität ist der wichtigste praktische Unterschied. Da alles interpretiert wird, können Sie einen kleinen Auszug aus dem Code entnehmen, ihn analysieren und auf den aktuellen Zustand der Umgebung abstimmen. Wenn Sie also bereits Code ausgeführt hätten, der eine Variable initialisiert, hätten Sie Zugriff auf diese Variable usw. Sie bietet sich wirklich für Dinge wie den funktionalen Stil an.

Die Interpretation kostet jedoch viel, insbesondere wenn Sie ein großes System mit vielen Referenzen und Kontexten haben. Per Definition ist dies verschwenderisch, da identischer Code möglicherweise zweimal interpretiert und optimiert werden muss (obwohl die meisten Laufzeiten dafür einige Caching- und Optimierungsschritte aufweisen). Trotzdem zahlen Sie Laufzeitkosten und benötigen häufig eine Laufzeitumgebung. Es ist auch weniger wahrscheinlich, dass komplexe interprocedurale Optimierungen auftreten, da ihre Leistung derzeit nicht interaktiv genug ist.

Daher ist es für große Systeme, die sich kaum ändern werden, und für bestimmte Sprachen sinnvoller, alles vorzukompilieren und vorab zu verknüpfen, und alle Optimierungen vorzunehmen, die Sie durchführen können. Dies führt zu einer sehr schlanken Laufzeit, die bereits für die Zielmaschine optimiert ist.

Was das Generieren von Executbles angeht, hat das wenig damit zu tun, IMHO. Sie können häufig eine ausführbare Datei aus einer kompilierten Sprache erstellen. Sie können aber auch eine ausführbare Datei aus einer interpretierten Sprache erstellen, mit der Ausnahme, dass der Interpreter und die Laufzeit bereits in der ausführbaren Datei enthalten und vor Ihnen verborgen sind. Das bedeutet, dass Sie im Allgemeinen immer noch die Laufzeitkosten bezahlen (obwohl ich mir sicher bin, dass es für einige Sprachen Möglichkeiten gibt, alles in eine ausführbare Baumdatei zu übersetzen).

Ich bin nicht einverstanden, dass alle Sprachen interaktiv gemacht werden könnten. Bestimmte Sprachen wie C sind so stark an die Maschine und die gesamte Linkstruktur gebunden, dass ich nicht sicher bin, ob Sie eine aussagekräftige, vollwertige interaktive Version erstellen können

4
Uri

Das Python Buch © 2015 Imagine Publishing Ltd, unterscheidet den Unterschied einfach durch den folgenden auf Seite 10 erwähnten Hinweis:

Bei einer interpretierten Sprache wie Python wird der Quellcode in Maschinencode konvertiert und bei jeder Programmausführung ausgeführt. Dies unterscheidet sich von einer kompilierten Sprache wie C, in der der Quellcode ausgeführt wird wird nur einmal in Maschinencode konvertiert - der resultierende Maschinencode wird dann jedes Mal ausgeführt, wenn das Programm ausgeführt wird.

2

Es ist ziemlich schwierig, eine praktische Antwort zu geben, da der Unterschied in der Sprachdefinition selbst liegt. Es ist möglich, einen Interpreter für jede kompilierte Sprache zu erstellen, aber es ist nicht möglich, einen Compiler für jede interpretierte Sprache zu erstellen. Es geht sehr viel um die formale Definition einer Sprache. Das theoretische Informatik-Zeug, das Noboby an der Universität mag.

2
Steven Mohr

Kompilieren ist das Erstellen eines ausführbaren Programms aus Code, der in einer kompilierten Programmiersprache geschrieben ist. Durch das Kompilieren kann der Computer das Programm ausführen und verstehen, ohne dass die zur Erstellung verwendete Programmiersoftware erforderlich ist. Wenn ein Programm kompiliert wird, wird es häufig für eine bestimmte Plattform (z. B. IBM-Plattform) kompiliert, die mit IBM-kompatiblen Computern funktioniert, jedoch nicht für andere Plattformen (z. B. Apple Plattform). Der erste Compiler wurde von entwickelt Grace Hopper während der Arbeit am Harvard Mark I. Heutzutage enthalten die meisten Hochsprachen einen eigenen Compiler oder Toolkits, mit denen das Programm kompiliert werden kann. Ein gutes Beispiel für einen Compiler, der mit Java ist Eclipse und ein Beispiel für einen mit C und C++ verwendeten Compiler ist der Befehl gcc. Je nachdem, wie groß das Programm ist, sollte die Kompilierung einige Sekunden oder Minuten dauern, und wenn beim Kompilieren einer ausführbaren Datei keine Fehler auftreten Datei erstellt. Überprüfen Sie diese Informationen

1
salehvm

Unterschiede

Dolmetscher:

1) Prozess: Ein Interpreter erzeugt ein Ergebnis aus einem Programm. (Konvertiert das Programm in Maschinencode, wenn das Programm ausgeführt wird.) In einem interpretierten Programm ist der Quellcode normalerweise das Programm. Programme dieses Typs (häufig als Skripte bezeichnet) erfordern einen Interpreter, der die Befehle im Programm analysiert und dann ausführt. Einige Interpreter, z. B. die Unix-Shells (sh, csh, ksh usw.), lesen jeden Befehl und führen ihn sofort aus, während andere, z. B. Perl, das gesamte Skript analysieren, bevor sie die entsprechenden Anweisungen für die Maschinensprache senden. Andere Beispiele für interpretierte Sprachen sind JavaScript und Python.

2) Schnell zu entwickeln (bearbeiten und ausführen).

3) Langsame Ausführung, da jede Anweisung bei jeder Ausführung in Maschinencode interpretiert werden musste (denken Sie daran, was dies für eine Schleife bedeutete, die Tausende Male ausgeführt wurde).

4) Wenn Ihr Quellcode interpretiert wird, müssen Sie ihn nur einmal schreiben und er kann von einem geeigneten Interpreter auf jeder Plattform interpretiert und ausgeführt werden!

5) Ein Nachteil des Interpreters ist, dass er den Quellcode nicht vor dem Endbenutzer verbirgt

6) Übersetzt das Programm so lange, bis der erste Fehler auftritt. In diesem Fall stoppt das Programm. Daher ist das Debuggen einfach.

Compiler:

1) Prozess: (Konvertiert das Programm in Maschinencode, bevor das Programm ausgeführt wird), während ein Compiler ein in Assembler geschriebenes Programm erstellt. Der Assembler der Architektur wandelt dann das resultierende Programm in Binärcode um. Die Assemblersprache ist je nach Architektur für jeden einzelnen Computer unterschiedlich. Folglich können kompilierte Programme nur auf Computern ausgeführt werden, die dieselbe Architektur aufweisen wie der Computer, auf dem sie kompiliert wurden. Ein kompiliertes Programm ist nicht für Menschen lesbar, sondern in einer architekturspezifischen Maschinensprache. Das Erstellen eines kompilierten Programms erfordert mehrere Schritte. Zunächst schreibt der Programmierer mit einem Entwicklungswerkzeug oder sogar einem einfachen Texteditor den Quellcode in einer ausgewählten Computersprache. Wenn das Programm komplex ist, können Teile davon auf mehrere Dateien verteilt sein. Der Programmierer kompiliert dann das Programm, sortiert und verknüpft die Module und übersetzt alles in Maschinencode, den der Computer versteht. Da verschiedene Arten von Computern nicht die Maschinensprachen des anderen sprechen, funktioniert ein kompiliertes Programm nur auf der Plattform, für die es entwickelt wurde. Beispielsweise funktioniert ein für HP-UX geschriebenes Programm normalerweise nicht auf einem Mac OS-Computer oder einem Computer, auf dem Solaris ausgeführt wird.

2) Langsame Entwicklung (Bearbeiten, Kompilieren, Verknüpfen und Ausführen. Die Kompilierungs-/Verknüpfungsschritte können einige Zeit in Anspruch nehmen.).

3) Schnell auszuführen. Das gesamte Programm befand sich bereits im nativen Maschinencode.

4) Das kompilierte Programm funktioniert nur auf der Plattform, für die es entwickelt wurde. Es ist nicht tragbar

5) Ein Vorteil des kompilierten Codes besteht darin, dass er den Quellcode vor dem Endbenutzer verbirgt (was geistiges Eigentum sein kann), da Sie anstelle des ursprünglichen, von Menschen lesbaren Quellcodes eine undurchsichtige ausführbare Binärdatei bereitstellen. 6) Die Fehlermeldung wird erst generiert, nachdem das gesamte Programm gescannt wurde. Daher ist das Debuggen vergleichsweise schwierig.

Quellen: * https://kb.iu.edu/d/agsz * Unterschiedliche Antworten in diesem Beitrag

0
abc123