18 Stimmen

Was ist der Grund für die Entwicklung von LLVM?

Was sind die Unterschiede zwischen einem LLVM und einem normalen Compiler?
Ist es dynamischer und kann daher verwendet werden, um normalerweise sehr dynamische Sprachen (z. B. Javascript) in statischen Binärcode zu kompilieren? Was sind die Grundsätze für die Erstellung eines solchen Programms?
Ich kenne das Dragon Book für Compiler, aber gibt es so etwas für einen LLVM?

EDIT: Ich habe gefunden este interessantes Projekt.

26voto

Paul Biggar Punkte 25771

Es gibt eine Reihe von Unterschieden zwischen LLVM und "einem normalen Compiler", die ich annehmen, um "gcc" bedeuten:

  • LLVM ist für die Analyse ganzer Programme (auch Link-Time-Analyse genannt) konzipiert und kann daher optional Code in "Bitcode" kompilieren, ein Format, das später erneut analysiert werden kann.
  • LLVM bietet einen Just-in-Time-Compiler (JIT), so dass er Programme während ihrer Ausführung neu analysieren kann, genau wie die JVM.
  • LLVM ist sehr gut konzipiert:
    • seine Komponenten sind modular und gut voneinander getrennt,
    • es hat 3 Formate für seine Zwischendarstellung (textuell, binär und eine Darstellung im Speicher), die gleichwertig sind,
    • seine Zwischendarstellung verwendet die SSA-Form,
    • seine Zwischenrepräsentation hat ein Typsystem.

Was Javascript und andere dynamische Sprachen betrifft, so sehen wir ein großes Interesse an LLVM in der Gemeinschaft der dynamischen Sprachen, mit Python- und Ruby-Implementierungen, die es ausprobieren. Allerdings sind diese nicht versuchen, statische Compiler werden. Sie konzentrieren sich auf die Verwendung des JIT. Insbesondere optimieren sie lang laufende ausführbare Dateien mit einem "Mixed-Mode-Interpreter", bei dem sie die Programme zunächst interpretieren und dann zur Laufzeit mit LLVM kompilieren. Ich habe noch keine Javascript-Engine gesehen, die LLVM verwendet, aber wahrscheinlich gibt es eine. Es wird nur nicht erstellen statische ausführbare Dateien, außer unter ungewöhnlichen Umständen, oder für reduzierte Versionen von Javascript.

Was den Grund für die Schaffung von LLVM angeht, so begann sie als Teil von Vikram Adve die Arbeit der Forschungsgruppe über lebenslange Zusammenstellung (d.h. JITs und Link-Time-Optimierung). Nach seiner Promotion wechselte Chris Lattner zu Apple, die das Projekt stark vorantreiben (wahrscheinlich weil es unter BSD-Lizenz steht, was ihnen in der Vergangenheit Probleme mit dem Gcc bereitet hat, der unter der GPL steht).

5voto

stonemetal Punkte 6058

Nichts, es ist ein normaler Compiler. Der Hauptgrund für seine Entwicklung war die Schaffung einer Plattform für die Compilerforschung. Daher ist er sehr modular aufgebaut, so dass Sie an dem Teil des Compilers arbeiten können, der sich mit Ihrer Forschung beschäftigt und sich nicht um andere Teile des Compilers kümmern müssen. Es gibt keinen Dragon-Compiler, genauso wie es kein LLVM-Buch gibt (jede Theorie, die Sie im Dragon-Buch oder einem anderen Compiler-Buch lesen, sollte direkt anwendbar sein). In der Tat, während ich nicht in auf LLVM in eine Weile ihre Dokumentation war ziemlich schlecht angesehen.

2voto

tetatoto Punkte 21

Ich bin kein Entwickler, aber: selbst wenn GPL NeXt in den 80er Jahren gezwungen hat, seine ObjC-Laufzeitumgebung zu veröffentlichen, ist der Hauptgrund für Apple, einen anderen Compiler (GPL oder nicht) zu finanzieren, der Wille zur Integration mit der IDE. GCC hat sich in diesem Bereich als zu träge erwiesen, und GCC ist nicht modular genug, um die Wiederverwendung von Codeteilen zu ermöglichen (xcode "fix it" feature). Das ist es, was ich aus meiner Lektüre verstanden habe

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X