Guten Morgen.
Hallo!
Ich lese andauernd was von "compilieren", "compilierte Version"... Meist in Zusammenhang mit C#. Was bedeutet das genau?
Ich weiß, sehr dummer Frage, finde aber irgendwie keine Antwort!
Wieso dumm? Das ist wahrscheinlich sogar eine philosphische Frage.
"Compiler" kommt vermutlich aus dem Englischen (die Lateiner werden sicherlich Einspruch erheben - ich habe aber ausdrücklich nicht "ursprünglich aus dem ... " gesagt), was soviel bedeutet wie "Zusammenstellen" oder "Zusammentragen". Historisch ist die sinngemäße Erklärung "einen Quellcode einer Programmiersprache in eine maschinenelesbare Form übertragen" vermutlich absolut korrekt. Heutzutage würde ich aber etwas vorsichtiger formulieren. Ganz abstrakt handelt es sich meiner Meinung nach um nichts Weiteres als eine Tranformation, eine Überführung von einer "Sprache" (=Informationseinheit) in eine andere*.
Warum?
Wegen der Fakten. Niemand würde ernsthaft behaupten wollen, dass es sich bei Java's Bytecode oder Microsofts .NET-IDL bereits um Maschinencode handelt. Trotzdem wird die Übersetzung der entsprechenden Quelltexte in die zuvor erwähnten Formen als "Kompilierung" bezeichnet (was nicht bedeutet, dass dies formal korrekt ist).
Ich würde sagen, "Kompilierung" heißt entweder, direkte Transformation in Maschinencode, oder Überführung in eine Sprache, die von geeigneten "Interpretern" eingelesen, validiert (= auf syntaktische Korrektheit überprüft), und dann zur Laufzeit in Maschinencode übersetzt wird.
Wird also JavaScript kompiliert? Nein - es wird ohne Zwischenschritt interpretiert.
Wird also C oder C++ kompiliert? Ha! - kompiliert wird es immer, die Frage ist jetzt nur, in was. Maschinenencode oder eine Zwischenstufe? Beides ist möglich. Während die Übersetzng in Maschinencode allseits bekannt ist, wirft die zukünftige Möglichkeit einer "Compilation" in IDL-Code der .NET-Plattform eine theoretisch interessante Frage auf. Ist es auf dieser Plattform überhaupt noch entscheidend, in welcher Sprache man programmiert? Soweit mein Verständnis reicht: Nein! U.U. "enden" Quellcodes, die in VisualBasic, C++ oder JScript geschrieben wurden, alle im selben IDL-Code. Das klingt sehr verlockend, ob ein Projektleiter darüber glücklich ist, steht aber auf einem anderen Blatte ... (ganz abgesehen davon, dass _mir_ MS-Initiativen zur Beglückung von Entwicklern und Benutzern höchst suspekt sind).
Warum gibt es dann bei manchen Programmiersprachen diesen Zwischenschritt?
Ich denke, die zugrundeliegende Absicht war/ist die Entkopplung der konkreten Implementierung von der Zielplattform. Die Abbildung des kompilierten "Zwischencodes" auf die konkrete Plattform ist allein Sache des Interpreters. Das hat viele Vorteile (Konzentration auf die "wesentlichen" Programmbestandteile, "Write once, run everywhere" ist kein bloßes Marketing mehr), aber auch Nachteile (Perfomanz, Realisierung plattformspezifischer Features etc.). Die "Compiler" können den Quellcode aber je nach ihrer Implementierung bereits "vor"-optimieren, so dass die Ausführgeschwindigkeit durch den Interpreter minimiert wird. Da es in dieser Hinsicht noch Reserven gibt, und die Prozessorperformance nicht geringer werden dürfte (dafür die Heizungskosten geringer werden), liegt in den interpretierten Sprachen m.E. die Zukunft.
Viele Grüße,
Martin