Michael Schröpl: Was genau bedeutet "compilieren"?

Beitrag lesen

Hi zusammen,

Ich verstand das so: die VM interpretiert den ByteCode zur Laufzeit

Ja.

und gibt dabei Maschinencode aus.

Nein. Wohin denn?

Wenn die virtuelle _Maschine_ ihren eigenen Bytecode interpretiert,
ist das dann kein Maschinencode?
Was meinst Du mit "eigenen Bytecode"?

Denjenigen, den sie selbst verarbeitet.

Auch eine "reale CPU" ist letzten Endes nichts anderes als eine "Virtuelle Maschine", die in Microcode programmiert ist; ein Addierwerk ist ein Interpreter für Eingabesignale usw.

Nichts spricht gegen einen in Hardware implementierten Interpreter.
Was ist dann deiner Meinung nach der unterschied zwischen "einem in
Hardware implementierten Interpreter" und einer normalen CPU, die
Maschinencode ausführt (wie zb. x86)?
Die Anzahl der Indirektionen bzw. die "Position" in der Kaskade.

Ja. Aber das ist kein qualitativer Unterschied, nur ein quantitativer.

Der qualitative Unterschied wäre für mich, ob ein Automat, der als Eingabe ein Programm erhält, als Ausgabe ein anderes Programm liefert oder aber die Ergebnisse des Eingabeprogramms.
Ersteres wäre für mich ein Compiler, letzteres ein Interpreter.
Die Zahl der Umwandlungsschritte halte ich für irrelevant in diesem Kontext, weil sie vom verwendeten Axiomensystem abhängt, d. h. davon, was Du als "elementaren Interpreter" ansiehst. Und das ist ggf. Ansichtssache, weil der Begriff "Eingabe" irgendwo im elektrischen Bereich unscharf zu werden beginnt.

VM: Quellcode -> Bytecode -> VM -> Machinencode -> Prozessor -> Microcode -> Recheneinheiten
Liege ich da jetzt falsch?

Die VM _ist_ der Maschinencode, der vom Prozessor verarbeitet wird.
Würde sie solchen aus Bytecode erzeugen, also ein Programm ausgeben, dann würde ich sie selbst als Compiler bezeichnen ... da sie es nicht tut, stelle ich sie einer CPU gleich und nenne beide Interpreter.

Viele Grüße
      Michael