GCC 4.9: Farbenfrohe Fehlermeldungen
Diese Woche wurde die Version 4.9 der GNU Compiler Collection (GCC) freigegeben. Zu den Neuerungen gehört unter anderem die Option -fdiagnostics-color für farbige Fehlermeldungen. Dieses Feature ist zwar nicht weltbewegend, doch zumindest beachtenswert. Denn wie folgendes Listing veranschaulicht, helfen die Farben überraschend gut, auf die wesentlichen Informationen zu fokussieren, und damit das eigentliche Problem schneller zu identifizieren.
template <typename T>
T compute(T&);
int answer = compute(42); // error
$ g++-4.9 -Wall -fdiagnostics-color -c color.cpp
color.cpp:3:24: error: invalid initialization of non-const
reference of type ‘int&’ from an rvalue of type ‘int’
int answer = compute(42); // error
^
color.cpp:2:3: note: in passing argument 1 of
‘T compute(T&) [with T = int]’
T compute(T&);
^
Um die farbliche Ausgabe auch innerhalb von Entwicklungsumgebungen nutzen zu können, sind eventuell noch Anpassungen notwendig. Für Emacs erledigen das die folgenden Lisp-Ausdrücke, die man am Besten in die Datei .emacs packt. Unterstützung für andere Umgebungen findet man über die Suchmaschine der Wahl.
;; http://stackoverflow.com/a/20788581/1305501
(ignore-errors
(require 'ansi-color)
(defun my-colorize-compilation-buffer ()
(when (eq major-mode 'compilation-mode)
(ansi-color-apply-on-region compilation-filter-start (point-max))))
(add-hook 'compilation-filter-hook 'my-colorize-compilation-buffer))
Doch die Option -fdiagnostics-color ist keineswegs neu. Clang unterstützt sie bereits seit Längerem, und damit steht sie symbolisch für eine bemerkenswerte Entwicklung der letzten Jahre: Clang hat uns nicht nur einen alternativen und hochwertigen C++-Compiler beschert, sondern auch die Weiterentwicklung von GCC belebt. Die farblichen Fehlermeldungen sind dafür nur ein Beispiel. Auch andere Neuerungen von GCC 4.9 – wie beispielsweise die Unterstützung von C++1y und Laufzeit-Sanitizer – sind auf den Wettbewerb zwischen den beiden Tools zurückzuführen. Der große Gewinner dabei ist der Entwickler.