1 Nun wollen uns näher damit beschäftigen, wie man von einer Programmiersprache zu einem lauffähigen Programm kommt. Hierzu ist es notwendig folgende Begriffe zu definieren: • Interpreter • Compiler 2 Ein Compiler wird auch Übersetzer genannt. Er dient dazu aus einer höheren Programmiersprache ausführbaren Binärcode zu erzeugen, der von einer CPU ausgeführt werden kann. 3 In dieser Abbildung sehen Sie ein typisches Beispiel für einen C-Compiler. Wie man sehen kann, besteht ein C-Compiler aus verschiedenen TeilWerkzeugen. Prä-Prozessor Der Prä-Prozessor löst alle Zeilen auf, die mit einem #-Zeichen anfangen. Er nimmt reine textuelle Ersetzungen vor. Compiler Der Compiler übersetzt den C-Quellcode meist in eine plattformspezifische Assemblersprache. Assembler Der Assembler arbeitet wie ein Compiler und übersetzt die Assemblersprache in ein Binärformat. Linker Ein Linker bindet die Binärdatei mit den Bibliotheken (ebenfalls Binärdateien) 4 des Betriebssystems. 4 Ziel von Java ist es ,einen plattformunabhängigen Bytecode zur Verfügung zu stellen. Ein Java-Compiler übersetzt daher die Java-Quelldateien in sogenannte ClassFiles. Die Class-Files sind unabhängig von der Hardware-Architektur der CPU, auf denen die Anwendung ausgeführt werden soll. Um dies zu ermöglichen, werden die Class-Files nicht von der CPU direkt ausgeführt, sondern von einer Java-Virtuellen Maschine. Dies wird auch kurz als JVM bezeichnet. Hinweis: Die Class-Files sind somit auch unabhängig davon, ob sie später auf einer 32-Bit Plattform oder einer 64 Bit Plattform ausgeführt werden. 5 Im Gegensatz zu Java steht bei dem .NET Framework die ProgrammiersprachenUnabhängigkeit im Vordergrund. So können aus verschiedenen Programmiersprachen die MIL Dateien erzeugt werden. Somit besteht die Möglichkeit innerhalb eines Softwareproduktes unterschiedliche Programmiersprachen einzusetzen. Dies bedeutet man kann aus Java aus auch C# Klassen aufrufen. 6 Ein Interpreter verarbeitet den Quellecode Anweisung für Anweisung. Hierbei wird eine Anweisung übersetzt und sofort ausgeführt. Vorteil: Man kann das Ergebnis einer Anweisung sofort sehen. Nachteil: Das ständige erneute Interpretieren von Anweisungen, die oft verwendet werden, müssen jeweils neu interpretiert werden. 7 Hier sehen Sie ein typisches Beispiel für eine Python Interpreter. Der Quelletext von Python-Script wird in Dateien mit dem Suffix „*.py“ abgelegt. Der Python Interpreter interpretiert und übersetzt den Quellcode in „*.py* Dateien in sogenannte „*pc“ Dateien. Hierbei handelt es sich um sogenannte Python-Compiler Dateien. Diese werden dann sofort ausgeführt. Wird nun die gleiche Python-Script Datei mehrmals aufgerufen, prüft der PythonInterpreter ob sich das py-File , welches zu dem pc-File passt geändert hat. Hat sich nichts geändert, wird sofort die „pc“-Datei ausgeführt. Sollte sich was geändert haben, dass wird die „pc“-Datei neu erzeugt. 8 9 10