Frage

Was sind die Unterschiede zwischen einem LLVM und einem regulären Compiler?
Ist es dynamischer und somit kann verwendet werden, normalerweise sehr dynamische Sprachen zu erstellen (das heißt Javascript) in statische Binärcode? Was sind die Prinzipien, die hinter einem zu schaffen?
Ich kenne den Drachen Buch für Compiler, aber ist es so etwas für einen LLVM?

EDIT: Ich habe gefunden, dieses interessantes Projekt.

War es hilfreich?

Lösung

Es gibt ein paar Unterschiede zwischen LLVM und „einem regulären Compiler“, die ich übernehmen werde „gcc“ bedeuten:

  • wird LLVM für Ganzprogrammanalyse (aka Link Zeitanalyse) ausgebildet ist, so kann es Code optional kompilieren zu „Bitcode“, ein Format, das es später erneut zu analysieren.
  • bietet LLVM eine Just-in-Time-Compiler (JIT), so dass es Programme analysieren wieder können, während sie laufen, genau wie die JVM der Fall ist.
  • LLVM ist sehr gut gestaltet:
    • seine Komponenten sind modular aufgebaut und gut getrennt,
    • es hat 3-Formate für die Zwischendarstellung (textliche, Binär- und eine speicher Darstellung), die äquivalent sind,
    • seine Zwischendarstellung verwendet SSA Form,
    • seine Zwischen represenation hat ein Typ-System.

Wie für Javascript und andere dynamische Sprachen, sind wir eine Menge interessanter in LLVM aus der dynamischen Sprachgemeinschaft zu sehen, mit Python und Ruby-Implementierungen, es auszuprobieren. Allerdings versuchen, diese sind nicht statisch Compiler zu sein. Sie werden über die Verwendung der JIT fokussiert. Insbesondere die optimieren langen Lauf ausführbare Dateien ein „Mixed-Mode-Interpreter“ können, wo sie zunächst die Programme interpretiert und dann kompiliert sie LLVM mit zur Laufzeit. Ich habe kein Javascript-Engine LLVM gesehen, aber es ist wahrscheinlich ein. Es wird nur nicht statisch ausführbare Dateien erstellen, außer in ungewöhnlichen Umständen oder für abgeholzt Versionen von Javascript.

Als Grund für die Schaffung von LLVM, begann es im Rahmen der Vikram Adve 's Arbeit der Forschungsgruppe auf Leben lang Kompilation (was bedeutet, JITs und Link-Zeitoptimierung). Nach seiner Promotion wechselte Chris Lattner zu Apple, die das Projekt voran stark bewegt (wahrscheinlich, weil es lizenziert BSD, die sie in der Vergangenheit Probleme mit gcc verursacht hat, das ist GPL).

Andere Tipps

Im Moment ist es ein regulärer Compiler. Sein Hauptgrund für die Schöpfung war eine Plattform für Compiler Forschung zu schaffen. Daher ist es entworfen, sehr modular aufgebaut, so dass Sie auf diesem Teil des Compilers arbeiten können, die mit Ihrer Forschung beschäftigt und sich keine Gedanken über andere Teile des Compilers zu kümmern. Es gibt keine Drachen Compiler so wie es ist kein LLVM Buch (jede Theorie Sie in dem Drachen Buch lesen oder anderes Compiler Buch sollte direkt anwendbar sein). In der Tat, während ausgesehen habe in ich nicht auf LLVM in einer Weile ihre Dokumentation ziemlich schlecht war.

Ich Développer bin gar nicht, aber: selbst wenn gpl NeXt gezwungen, seine ObjC Laufzeit in den 80er Jahren zu veröffentlichen, der Hauptgrund für Apple einen anderen Compiler (GPL oder nicht) zu finanzieren ist, ihren Willen mit dem IDE zu integrieren. GCC erwies sich als zu viel Trägheit in diesem Bereich haben, und GCC ist nicht modular genug Wiederverwendung von Code-Teile zu ermöglichen (Xcode „fix it“ -Funktion). Das ist, was ich von meinen Lesungen verstanden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top