Select Page

clang als Compiler Alternative

by | Aug 1, 2013 | Development

gcc als Compiler ist eigentlich jedem ein Begriff, der schon mal Icinga selbst kompiliert hat. Respektive g++, sofern man sich mutig an Icinga 2 Builds heranwagt. Auf gängigen Systemen, wie etwa Debian, reicht ein

# apt-get install gcc
# apt-get install g++

um damit arbeiten zu können. Um das ganze zu beschleunigen, hat mein Kollege Gunnar schon auf ccache hingewiesen 😉
Man soll ja hin und wieder über den Tellerrand schauen, und als dann FreeBSD angekündigt hat, clang als default Compiler zu verwenden, bin ich hellhörig geworden. Aber wie es halt so ist, das übliche Zeitproblem schlägt immer wieder zu – bis der erste Icinga Bug mit clang Compiler Warnings aufgemacht wurde.
Die Installation von clang ist ähnlich trivial wie gcc. In Debian Testing (jessie) sollte man lediglich beachten, dass die Pakete nach Versionen getrennt sind. clang-3.2 oder ganz frisch clang-3.4.

# apt-get install clang

Um das ganze parallel zu gcc verwenden zu können, übergibt man die Variablen direkt an make.

$ make -j4 CC=clang
$ make -j4 CXX=clang++

“Am Objekt” sieht das ganze in Icinga 2 mit dem gerade in Entwicklung befindlichen IDO Backend dann so aus:
Ich habe absichtlich einen Fehler beim Host DB Object eingebaut, der einen falschen Typ an die Funktion übergibt, die sich ein Service Object erwartet, aber einen Host bekommt. Icinga 2 kennt lediglich Servicechecks und benötigt deswegen Serviceattribute auch beim Host.
clang_gcc_test_diff
Während gcc (mit ccache) den Fehler zwar ordentlich anmeckert, sieht mans eigentlich nicht sofort.
clang_gcc_test_make_gcc
clang hingegen illustriert das mit Farben und weist einen ebenso direkt auf den falschen String hin.
clang_gcc_test_make_clang
Fazit: Auch wenn wir weiterhin gcc/g++ als grundsolide Basis beim Entwickeln verwenden, clang ist mit Sicherheit eine interessante Alternative, die sich jedermann mal ansehen sollte.

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

More posts on the topic Development

Mein PHP-Trainingsprojekt

PHP Schulung Vor kurzem haben wir begonnen, eine neue Programmiersprache zu lernen – PHP. In der ersten Woche haben wir mit den Grundlagen wie Variablen, Arrays, Schleifen begonnen und uns schrittweise zu komplizierterer Syntax wie Funktionen, Objekten und Klassen...

check_prometheus ist jetzt öffentlich verfügbar!

Monitoring ist komplex, das wissen wir hier bei NETWAYS leider zu gut. Deswegen laufen in der Infrastruktur auch mal gerne mehrere Tools für die Überwachung. Zwei gern gesehene Kandidaten sind dabei Icinga und Prometheus. Icinga und Prometheus erfüllen...