• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

LLVM vs. normaler GCC - Was ist vorzuziehen?

naich

Pomme d'or
Registriert
22.11.08
Beiträge
3.082
Hallo,

Ich hatte in letzter Zeit das Gefühl, dass das Kompilieren von Programmen unter Mac OS tendentiell irgendwie immer länger gedauert hat als unter anderen Plattformen. Daher komme ich gerade zu folgendem Thema:

Soweit ich weiß, liefert Apple ja mit seinen Tools den LLVM Compiler mit aus.
Gerade frage ich mich, was denn da besser ist, llvm oder "normaler" gcc. Wikipedia erzählt mir, dass llvm quasi auch nen JIT-Compiler ist - was mich stark an (langsameres) Java erinnert, statt an eine Performance-Verbesserung.

Weiß da jemand genaueres darüber? Inwieweit ist der LLVM-Compiler besser und vorzuziehen? Oder sollte man doch lieber beim guten alten GCC bleiben?

Welcher der beiden kompiliert schneller?

Mich würde eure Meinung dazu interessieren.
 
Also Clang (LLVM) kompiliert schneller als GCC und die Produkte sind eventuell durch bessere Optimierung seitens LLVM schneller. Jedoch welche Programmiersprache setzt du ein?

Man muss dazu sagen, dass GCC kompatibler und einfach kompletter ist, was wohl der Verbreitung und der jahrelangen Pflege zuzuschreiben ist.
 
Ich denke da im Moment vor allem an C und C++...
 
Die neuste Version ist gerade erst voll kompatibel zum ISO C++ Standard 2003 geworden, aber ich hatte (zumindest mit der Vorgängerversion) Probleme mit einem Schablonenmechanismus im Zusammenspiel eines operator<<, habe es noch nicht ausprobiert, ob es jetzt mit der neuen Version klappt. Zu C99 ist er wohl schon länger voll kompatibel.

Clang ist ein erwachsener Compiler und eine ernst zu nehmende Konkurrenz zu GCC! Sind deine Fragen geklärt?

Ich hatte in letzter Zeit das Gefühl, dass das Kompilieren von Programmen unter Mac OS tendentiell irgendwie immer länger gedauert hat als unter anderen Plattformen.

Das hätte ich gerne nachgewiesen.
 
Wikipedia erzählt mir, dass llvm quasi auch nen JIT-Compiler ist - was mich stark an (langsameres) Java erinnert, statt an eine Performance-Verbesserung.
Da stimmt Deine Einschätzung einfach nicht. Und mit Java hat das echt nichts gemein.

P.S. Per Default bei Xcode die Settings für LLVM auf AoT gesetzt.

Weiß da jemand genaueres darüber? Inwieweit ist der LLVM-Compiler besser und vorzuziehen? Oder sollte man doch lieber beim guten alten GCC bleiben?
Apple verwendet LLVM. Ich verwende LLVM.
Probier es einfach aus, ob es für Dich passt.

Welcher der beiden kompiliert schneller?
LLVM

Inwieweit ist der LLVM-Compiler besser und vorzuziehen?
Benutze Google.

Oder sollte man doch lieber beim guten alten GCC bleiben?
Sollten irgendwelche Probleme auftreten, kannst Du einfach wieder den GCC verwenden.

P.S. Zumindest solange es noch geht.
 
Zuletzt bearbeitet:
a) Den Compiler, den du in Xcode verwendest, ist Clang und nicht LLVM.

b) Clang kann "Pseudocode" für den LLVM erzeugen, der dann JIT von LLVM in Maschinencode übersetzt wird.

c) Wie der Begriff JIT schon sagt, wirst du das beim Compilieren in Xcode gar nicht bemerken, weil der LLVM nicht in Xcode verwendet wird, sondern Clang. Würde er in Xcode verwendet, wäre es ja nicht mehr JIT.

d) Wieso interessiert dich eine Meinung zu einer Frage, wenn du bisher keine Probleme hattest?

Um die Frage abschließend zu beantworten, muss man mutmaßlich 234628374687 berücksichtigen. Ich verwende bisher gcc. Clang (LLVM) steht aber im Ruf, besseren Code zu erzeugen und vor allem bessere Fehlermeldungen zu liefern. (Was angesicht der Meldungen von gcc nicht schwierig sein dürfte.) Ob das stimmt, weiß ich nicht und wäre dann wohl auch eher nach eingehender Prüfung zu beantworten.
 
Die Xcode Settings nennen das clang-LLVM-Gespannt halt einfach nur "LLVM compiler".
Daher sagt halt jeder bloß noch LLVM, auch wenn natürlich clang-LLVM gemeint ist.

Edit: Weiss jetzt gerade nicht, ob die Bezeichnung in der Developer Preview geändert wurde.
 
Die Xcode Settings nennen das clang-LLVM-Gespannt halt einfach nur "LLVM compiler".
Daher sagt halt jeder bloß noch LLVM, auch wenn natürlich clang-LLVM gemeint ist.
Ja, das sollte einem aber nicht davon abhalten, es selbst richtig zu machen. Man sieht hier ja, wohin die ungenaue Bezeichnung führt.

Edit: Weiss jetzt gerade nicht, ob die Bezeichnung in der Developer Preview geändert wurde.

Gut wäre es …
 
Es gibt die Wahl zwischen
  • GCC 4.2
  • LLVM GCC 4.2
  • LLVM compiler 2.0
in Xcode 4.0 Build 4A153.
 
Wobei der "LLVM GCC" meines Wissens nur ein gcc ist, der LLVM-Code erzeugen kann. Es bleibt also in der Sache ein gcc.