Was für ein Bytecode verarbeitet der LLVM Compiler?



  • Und ist der nicht etwas unflexibel?

    Immerhin wird von einer normalen Hochsprache (java, C++, Ada, whaterver) in diesen LLVM Bytecode compiliert, damit LLVM dann Maschinencode draus macht, aber dadurch gehen doch die ganzen Sahnehäubchen der jeweiligen Hochsprachen verloren.
    So flexibel kann der LLVM Bytecode doch gar nicht sein, oder etwa doch?



  • Ich kenn mich mit LLVM jetzt nicht aus. Aber der Trick ist normalerweise, dass man die Highlevel-Optimierung natürlich vorher macht.



  • Alle Sprachen können letztlich nur das, was mit Maschinensprache möglich ist. Die Highlevel-Features verdampfen während der Compilierung, mehr in den vorderen Phasen (wie die Typsicherheit) oder mehr hinten (arithmetische Überlaufchecks). Die Frage ist jetzt, wie weit hinten der LLVM-Bytecode angesiedelt ist. Ist das nur eine dünne Abstraktion über einer Registermaschine, oder hat der noch Highlevel-Features drin?





  • LLVM schrieb:

    [...] aber dadurch gehen doch die ganzen Sahnehäubchen der jeweiligen Hochsprachen verloren.

    Nicht unbedingt. Einige/Viele (?) Compiler nutzen eine "intermediate representation", auch der GCC zum Beispiel. Das Compiler-Framework LLVM hebt das nur besonders hervor und definiert ein binäres Format zum Abspeichern des LLVM-Codes.

    LLVM schrieb:

    So flexibel kann der LLVM Bytecode doch gar nicht sein, oder etwa doch?

    Er ist anscheinend flexibel genug. So kompliziert muss das auch gar nicht sein -- es handelt sich ja um low level byte code. So etwas wie "class" oder "virtuelle Funktionen" findet sich da wahrscheinlich nicht -- genausowenig wie die Deine CPU davon weiß.

    Ich habe LLVM auch noch nie ausprobiert. Aber es klingt von der Idee her eigentlich gut.


Anmelden zum Antworten