Compiler

Ein Zielprogramm eines Computers besteht nur aus zwei unterschiedlichen Zeichen – der 0 und der 1 – deshalb nennt man es auch Binärprogramm. Ein Compiler ist ein Programm, das den in einer höheren Programmiersprache geschriebenen Quellcode in die maschinenlesbare, binäre Sprache übersetzt. Das Ergebnis ist „ausführbarer Code“, der auch als Objektcode oder Zielsprache bezeichnet wird. In manchen Fällen erfolgt die Übersetzung auch per Zwischenschritt mit einer Assemblersprache, so dass anschließend ein Assembler zur Erzeugung des Maschinencodes benötigt wird.

Compiler Prinzip Bildquelle: https://www.codecademy.com/articles/cpp-compile-execute-locally

Aufgaben des Compilers

Ein Compiler ist aber mehr als nur ein „Übersetzer“, denn im Zuge des Kompilierens fallen weitere Aufgaben an:

Das Finden von Programmfehlern ist also eine wesentliche Aufgabe des Compilers. Findet ein Compiler einen Fehler, wird eine Fehlermeldung mit Zeilennummer ausgegeben, so dass die Navigation des Entwicklers zum Fehler sehr leicht fällt.

Nicht bei allen Programmiersprachen ist ein Compiler notwendig. Java bspw. als objektorientierte Programmiersprache wird durch den Java-Just-in-Time-Compiler, einem Bestandteil der Java-Entwicklungsumgebung, in Java-Bytecode kompiliert. Java-Bytecode ist eine sogenannte Hybridsprache, also ein Kompromiss zwischen vollständig kompiliertem Binärcode und interpretierbaren Quellcode. Auch C#, VB.NET und Python sind Hybridsprachen. Typische Programmiersprachen mit Compiler sind C, C++. Pascal, Modula, COBOL und Fortran. Viele integrierten Entwicklungsumgebungen haben einen Compiler im Programm integriert und erleichtern und beschleunigen so die Entwicklung.

https://t2informatik.de/wissen-kompakt/compiler/

Wie funktioniert ein Compiler?

https://www.youtube.com/watch?v=Uuyf3wrGOYM&ab_channel=CodeConstruct

Der Unterschied von Compiler und Interpreter

Programmiersprachen sind so aufgebaut, dass Menschen sie relativ mühelos lesen und anwenden können. Damit ein Prozessor die einzelnen Anweisungen eines Programms verstehen kann, muss der Quellcode jedoch erst in eine für die Maschine verständliche Form gebracht werden. Je nach Programmiersprache passiert das zum Beispiel mittels Compiler oder Interpreter.

Interpreter

Ein Interpreter verarbeitet den Quellcode eines Projekts zur Laufzeit. Dazu geht der Interpreter Zeile für Zeile vor: Eine Anweisung wird eingelesen, analysiert und sofort ausgeführt. Dann geht es mit der nächsten Anweisung weiter, bis schließlich das Ende des Programms erreicht ist; oder bis ein Fehler auftritt – der Interpreter stoppt seine Arbeit, sobald etwas nicht stimmt. Dadurch weiß man als Entwickler normalerweise sofort, an welcher Stelle sich der Fehler befindet, und kann das Problem so schneller beheben.

Ein Interpreter erzeugt keine Datei, die man mehrmals ausführen könnte. Er fertigt auch keine Übersetzung des Quellcodes in Maschinensprache um, sondern fungiert als eine Zwischenschicht zwischen Programmiersprache und Maschine. Der Interpreter analysiert zur Laufzeit jede einzelne Anweisung eines Programms und ruft die entsprechende Routine aus seinen internen Bibliotheken auf, die wiederum die gewünschte Aktion auf dem Prozessor des Zielsystems ausführt.

Weil also quasi live gearbeitet wird und jedes Statement einzeln verarbeitet werden muss, sind interpretierte Programme in der Regel langsamer als Kompilate. Sie führen beispielsweise auch wiederkehrende Anweisungen jeweils neu aus, wenn sie an der Reihe sind.

Python, PHP Perl oder BASIC sind Beispiele für Sprachen, die einen Interpreter verwenden.


Compiler

Ein Compiler wandelt Quellcode in Maschinensprache um, übersetzt also das gesamte Programm von einer Programmiersprache in Maschinencode. Der Code wird vollständig übersetzt, bevor das Programm ausgeführt wird. Häufig passiert noch ein Zwischenschritt, bevor das Programm in Maschinensprache übersetzt wird: Der Quellcode wird zunächst in einen Zwischencode umgewandelt, zum Beispiel Objektcode.

Der Compiler stößt also mehrere Schritte an, um aus dem vorliegenden Quellcode ein lauffähiges Programm zu erstellen. Dafür benötigt er vergleichsweise mehr Zeit und Ressourcen. Sobald das fertige Programm läuft, ist es jedoch effizienter als interpretierte Software, da alle Anweisungen bereits vollständig in Maschinencode übersetzt wurden.

Reine Compiler-Sprachen sind zum Beispiel C / C++ und Pascal.


Just-in-time-Compiler: die Hybridlösung

Es gibt auch Ansätze, die Compiler und Interpreter vereinen und so die Schwächen der jeweiligen Systeme ausgleichen. Der Compreter oder Just-in-time-Compiler übersetzt das Programm erst zur Laufzeit in Maschinencode. Einerseits bietet die Hybridlösung gute Performance kompilierter Programme, andererseits ermöglicht sie die komfortable Fehlersuche interpretierter Programme. JIT-Compiler kommen vor allem beim Erstellen plattformunabhängiger und portabler Software zum Einsatz.

Beispiele für Programmiersprachen mit JIT-Compiler sind Java, Visual Basic, C# und auch C++.NET.

https://www.dev-insider.de/der-unterschied-von-compiler-und-interpreter-a-742282/

Quellen


Informationen

Autor Nils Kruthoff
Erstellt 02.05.2021
Zuletzt Beabeitet 14.08.2021 18:00
Tags IT