Clang ist nun der Standardcompiler unter FreeBSD 10-CURRENT

Yamagi

Possessed With Psi Powers
Teammitglied
Wie bereits vor einiger Zeit angekündigt, ist Clang seit gestern Abend der Standardcompiler unter FreeBSD 10-CURRENT. Dies betrifft erst einmal nur die FreeBSD/i386 und FreeBSD/amd64 Plattformen. Mit diesem Schritt werden vorerst auch die Ports global umgestellt, wobei die meisten nicht mit Clang bauenden Ports manuell auf GCC festgelegt sind. Später soll ein Mechanismus eingebaut werden, der er es erlaubt den Port-Compiler unabhängig des Basissystemcompilers zu setzen. Hier wird wahrscheinlich GCC 4.6 die Standardeinstellung sein.

GCC als Systemcompiler durch Clang zu ersetzen, ist notwendig geworden, da neuere GCC-Versionen unter der GPLv3 lizensiert sind und daher nicht in das Basissystem importiert werden können. Zudem bietet Clang einen modernen technischen Ansatz (wobei GCC hier stark am Aufholen ist) und erlaubt eine bessere Integration in eine alternative Toolchain.

Code:
Author: brooks
Date: Mon Nov  5 19:08:18 2012
New Revision: 242624
URL: http://svnweb.freebsd.org/changeset/base/242624

Log:
  After years of hard work by many FreeBSD and LLVM developers, make
  clang the default compiler on i386 and amd64 systems.
  
  Special thanks to:	dim, ed, rdivacky
 
Zudem bietet Clang einen modernen technischen Ansatz (wobei GCC hier stark am Aufholen ist) und erlaubt eine bessere Integration in eine alternative Toolchain.

Ein weiterer Vorteil ist, dass LLVM/Clang einen "In-Projekt" Windows Port bietet, der sich mit Visual Studio kompilieren lässt. Der ist zwar noch experimentell, aber das dürfte auf lange Sicht auch einen Vorteil bieten. Gerade dann, wenn man LLVM als Backend für iwas nutzt.

Aber ansonsten belebt Konkurrenz ja das Geschäft.

Und wenn man mal von den total realitätsfernen Phoronix "-O3 -march=native" Benchmarks absieht, fehlt Clang eigentlich nur noch OpenMP, aber ja aber demnächst Einzug hält.

Aber ich finde es mittlerweile gut, dass ich meine Projekte mit 2 unabhängigen Compilern testen kann. Denn perfekt ist keiner.
 
Es gab auf den verschiedenen Mailinglisten einige Benchmarks. Das Ergebnis war, dass Clang mal geringfügig schneller und mal geringfügig langsamer als der GCC 4.2 ist. Unter dem Strich wird es keine messbare Veränderung geben. Das System besteht halt hauptsächlich aus Wald- und Wiesencode, ohne viel Möglichkeiten Optimierungsmagie anzuwenden.
 
Zuletzt bearbeitet:
Ich hatte mir auch des oefteren viele Benchmarks angesehen, allerdings bezogen sich diese immer nur auf die Compile-time selber.

Gibt es denn Unterschiede bei der Performance des erzeugten Codes?
 
Hmm, ist eigentlich ein Entfernen des GCC-4.2 aus der Distribution geplant? (Langfristig sicher, aber schon für 10.0?)
 
So weit ich weiß, gibt es im Moment keinen konkreten Plan. Allerdings würde ein GPL-freies FreeBSD 10 ein Entfernen des GCC verlangen. Sofern man es denn wirklich realisieren wird, was ich ehrlich gesagt bezweifele. Auch wenn man recht nah dran ist, kann es gut sein, dass man den Preis für zu hoch hält und sich erst einmal auf "das Basissystem kann ohne GPL-Code gebaut werden" beschränkt. Hinzu kommt, dass Clang im Moment auf mehreren von FreeBSD unterstützten Plattformen unbrauchbar ist. Gerade IA64 und SPARC64 sind da die Sorgenkinder, denn beide liegen weit außerhalb des Fokus der Clang-Entwickler.
Auf der anderen Seite soll wohl bald der "external Toolchain"-Support kommen. Damit würde es möglich werden, das Basissystem mit einer aus den Ports gebauten Toolchain zu übersetzen. Damit könnte man GCC sehr wohl entfernen, allerdings zu dem Preis, dass einige Plattformen nicht mehr selbsthostend wären. FreeBSD könnte sich auf diesen ohne Zusatzsoftware nicht mehr bauen. Und ob man das wirklich will, ist eine interessante Frage. Dinge wie "make universe" würden erschwert werden, dass Risiko eines schnellen Qualitätsverlust des Codes steigt deutlich an... FreeBSD/alpha haben neben dem Ende der CPU-Produktion genau diese Dinge das Genick gebrochen.
 
Inwieweit ist denn Clang ein Community Projekt?
Apple wird sicher die Richtung vorgeben, damit deren Hardware brauchbar läuft, allen voran Sprach- & OS-Features.
Und GCC hat gerade recht viel Momentum und eine brauchbare OpenMP Implementierung(:p).
 
Man sollte einfach alle exotischen Architekturen über Board werfen und sich auf amd64, i386, mips und arm konzentrieren.

Wer benutzt denn FreeBSD auf ia64, pc98, sparc64 (hier sind die anderen BSDs viel weiter vorn) noch? pc98 war ja mal in Japan sehr populär, aber die Zeiten sind AFAIK auch vorbei.
 
darktrym schrieb:
Inwieweit ist denn Clang ein Community Projekt?
Gute Frage. An LLVM / Clang sind natürlich diverse Firmen beteiligt. Apple wird immer gern genannt, da sie die erste treibende Kraft waren, aber inzwischen sind viel mehr dazugekommen. ARM, AMD, Nvidia, Cray, wohl auch Google... Dort sammelt sich alles, was seine Probleme mit der GPL hat. Allerdings heißt das nicht, dass diese Firmen den Kurs diktieren. LLVM ist ein offenes Projekt, an dem sich jeder beteiligen und seine Meinung einbringen kann. Um das zu erhalten, soll LLVM auf neue Beine gestellt werden: http://www.golem.de/news/entwickler-tools-llvm-moechte-gemeinnuetzig-werden-1209-94689.html

Clang war zwar angetreten, einen besseren C7C++/ObjC-Compiler als GCC zu implementieren und in gewisser Weise mag das auch gelungen sein. Aber sie haben damit den GCC aus seinem jahrelangen, monopolbedingten Schlaf gerissen. Die Jungs dort sind mit vielen interessanten Ideen aufgewacht und hauen nun richtig rein. Dazu kommt, dass GCC nach oben Frontends für viel mehr Sprachen als Clang hat und nach unten deutlich mehr Plattformen unterstützt. GCC wird durch Clang nicht verdrängt werden, aber umgekehrt wird GCC auch Clang nicht mehr loswerden. Die Folge ist dann ein gesunder Wettbewerb. :)

Es ist wohl auch naiv anzunehmen, dass FreeBSD eine Clang-Monokultur wird. Die Ports werden wohl auf Jahre hinweg mehrgleisig fahren. Einfach, da es eben doch Unterschiede zwischen Clang und GCC gibt, die sich dann in eher fischig implementierten Anwendungen rächen.

laemodost schrieb:
Man sollte einfach alle exotischen Architekturen über Board werfen und sich auf amd64, i386, mips und arm konzentrieren.
Damit hast du wahrscheinlich recht. IA64 ist tot, nur HP ist dort aktiv und wer eine der teuren Kisten kauft, wird kaum FreeBSD drauf laufen lassen. Das Gleiche gilt für SPARC. Sie sind zwar nicht ganz so tot, aber auch eher ein Paket aus Hardware und Software. PC98 war ein x86-Prozessor auf einer nicht-PC-kompatiblen Plattform, das letzte Modell basierte auf dem Pentium 3. Die Dinger sind nach heutigem Maßstäben einfach völlig überholt. Bleiben also amd64, ARM, MIPS, PowerPC und x86. Alles Plattformen, die eine realistische Chance haben Tier-1-Plattformen zu werden, gute Tool-Unterstützung haben und so weiter.

Kamikaze schrieb:
Mit meinem eigenen C++ Code trifft das nicht zu. Der machte in meinem letzten Test mit clang 87% mehr Durchsatz als mit gcc 4.2 und immer noch 15% mehr als mit dem gcc 4.6 aus den Ports.
Das ist dann einer der Ausschläge nach oben :) Wie du schon mal sagtest, Clang scheint gerade bei io-lastigem Code schneller zu sein. Aber wenn ich mich recht erinnere, bekommt man ab 9.1 auf einem mit Clang gebautem Basissystem automatisch libc++ anstelle der alten libstdc++. Das könnte ein wenig verzerren.
 
War das Zufall oder hast du den gezielt für clang optimiert?
Ich habe den Code geschrieben und dann ausprobiert. Was den Code in einem Compiler schneller macht hilft auch in dem Anderen.

Das ist dann einer der Ausschläge nach oben :) Wie du schon mal sagtest, Clang scheint gerade bei io-lastigem Code schneller zu sein. Aber wenn ich mich recht erinnere, bekommt man ab 9.1 auf einem mit Clang gebautem Basissystem automatisch libc++ anstelle der alten libstdc++. Das könnte ein wenig verzerren.
Ich verwende keinen Library code. Das spielt also keine Rolle.
 
Clang-Compiler unterstützt C++11 komplett

Die Entwickler des in der Low Level Virtual Machine (LLVM) verwendeten C/C++-Compiler-Frontends Clang haben gemeldet, dass nun sämtliche Features der C++11-Sprachversion implementiert seien. Als letzte Funktionen des im Sommer 2011 freigegebenen ISO-Standards sind die Unterstützung für vererbte Konstruktoren und thread_local-Variablen hinzugekommen.

http://www.heise.de/newsticker/meldung/Clang-Compiler-unterstuetzt-C-11-komplett-1846766.html
 
Zurück
Oben