2008-10-05 11 views
45

Hat jemand Erfahrung mit LLVM, llvm-gcc oder Clang?Was sind die größten Vorteile von LLVM?

Die ganze Idee hinter llvm scheint mir sehr faszinierend und ich bin daran interessiert zu sehen, wie es funktioniert. Ich möchte einfach nicht viel Zeit darauf verwenden, die Werkzeuge auszuprobieren, wenn die Werkzeuge nicht für die Produktion bereit sind.

Wenn Sie Erfahrung mit den Werkzeugen haben, was denken Sie über sie? Auf welche wichtigen Einschränkungen haben Sie gestoßen? Was sind die größten Vorteile?

Vielen Dank!

+1

Ich habe das folgende Dokument geschrieben, das die Vorteile von LLVM diskutiert. http://llvm4eclipsecdt.googlecode.com/files/Benefits%20of%20the%20LLVM%20compiler%20infrastructure.pdf –

Antwort

21

Ich hatte ein erstes Spiel mit LLVM und durch this tutorial arbeiten ließ mich sehr aufgeregt über sein Potenzial; Die Idee, dass ich damit relativ leicht ein JIT in eine App einbauen kann, hat mich begeistert.

Ich bin nicht tief genug gegangen, um eine brauchbare Meinung über seine Grenzen, Stabilität, Leistung und dergleichen zu geben. Ich verstehe, dass es in jeder Hinsicht gut ist, aber das ist nur Hörensagen.

39

Ich kann nicht genug gute Dinge über LLVM sagen. Es ist so einfach zu arbeiten im Vergleich zu anderen Compiler-Projekten, die ich angeschaut habe. Ich bin kein Compiler-Typ, aber wenn ich mit einigen Einschränkungen von LLVM oder Klängen frustriert bin, ist es normalerweise ziemlich einfach darin einzutauchen und es zu ändern.

Wir (Nate Begeman, ich selbst und ein paar andere) haben das PPC-Backend ohne echte Erfahrung im Compilerdesign geschrieben, aber es sah einfach genug aus, dass Nicht-Experten es erreichen konnten. Wir waren ziemlich vertraut mit der PPC-Assemblierung, aber es war immer noch unglaublich, dass wir es geschafft haben, dass LLVM-gcc in einigen Wochen unserer Freizeit PPC-Code ausgibt. Definitiv eine der befriedigendsten Hello Worlds, die ich jemals zusammengestellt habe.

25

Ich habe seit vielen Monaten mit LLVM ein- und ausgeschaltet. Ich schrieb zwei OCaml Journal Artikel über die Verwendung von LLVM aus der OCaml Programmiersprache. Das ist besonders interessant, weil die OCaml-Sprache ideal zum Schreiben von Compilern ist und eine Fülle von leistungsfähigen und ausgereiften Werkzeugen und Bibliotheken zum Parsen usw. aufweist.

Insgesamt war meine Erfahrung äußerst positiv. LLVM macht was es verspricht und ist sehr einfach zu bedienen. Die Leistung des generierten Codes ist hervorragend. Eines der Programme, das ich geschrieben habe, war ein einfacher kleiner Brainf * ck-Compiler, der einige der schnellsten ausführbaren Dateien eines Compilers erzeugt, den ich getestet habe (einschließlich GCC).

Ich habe nur zwei Klagen mit LLVM. Erstens verwendet es abort() immer dann, wenn etwas schief geht, anstatt eine Ausnahme auszulösen. Dies war eine bewusste Designentscheidung der Autoren, die alle Ausnahmen von LLVM entfernen möchten, aber es unmöglich machen, OCAML zurückzuverfolgen, wenn man einen Compiler mit LLVM debuggt: Ihr Programm stirbt einfach mit einer textlichen Erklärung von LLVM aber keine Ahnung, wo der Fehler in Ihrer Quelle aufgetreten ist. Zweitens ist die kompilierte Bibliothek von LLVM monströs groß (20 MB). Ich nehme an, dies liegt an dem Aufblähen von C++, aber es macht die Kompilierung schmerzhaft langsam.

EDIT: Meine Arbeit an LLVM gipfelte in der Erstellung einer High-Performance High-Level-Garbage-Collected Virtual Machine. Kostenloser Download here und überprüfen Sie die entsprechenden benchmarks (wow!). @Alex: Ich werde den BF-Compiler so schnell wie möglich für dich holen.

+2

Können Sie den BF-Compiler veröffentlichen? Ich habe einen BF-> C-Übersetzer geschrieben, der meiner Meinung nach ungefähr so ​​gut ist, wie man in einem einzigen Durchgang bekommen kann, und llvm-gcc fällt in wirklich großen Programmen ziemlich schlecht aus. Sie sind jedoch ein bisschen unfair. –

2

Sie haben nach Tools gefragt und ich möchte erwähnen, dass es LLVM Plugin für Eclipse CDT (für Windows, Linux und Mac) gibt. Es integriert LLVM gut in IDE und der Benutzer muss nichts über LLVM wissen.Das Drücken der Build-Schaltfläche reicht aus, um .bc- und ausführbare Dateien (und Zwischendateien auf dem Hintergrund, die für den Benutzer nicht sichtbar sind) zu erzeugen.

Die neueste Version ist über offizielle Eclipse-Update-Website zur Verfügung: http://download.eclipse.org/releases/mars

Es ist unter Programmiersprachen und den Namen "C/C++ LLVM-Compiler Familie baut Support".