среда, 20 октября 2010 г.

сравнение clang и g++

наслушавшись рассказов о том, что новый clang, намного круче g++ недавно собрал проект над которым работаю этим самым новым компилятором.


из плюсов:
- нашел несколько ошибок, пропущенных gcc
- намного приятнее сообщения об ошибках - особенно для шаблонов

минусы:
- упал пару раз. стабильно падает при сборке одного теста (с участием boost::test)
- при линковке ошибся связав деструкторы разных классов с одинаковым именем - в итоге runtime падения
- обещанного повышения скорости компиляции нет :(
для debug сборки (-g2 -O0):

gcc 4.4.4:
real    3m38.647s
user    13m12.810s
sys     0m53.407s

clang:
real    3m42.877s
user    14m3.109s
sys     0m58.220s

качество оптимизации не проверял.
p.s.
а вот и тесты сравнения производительности:
http://www.phoronix.com/scan.php?page=article&item=llvm_gcc_dragonegg28&num=1

воскресенье, 17 октября 2010 г.

Впечатления о книге C++ Template Metaprogramming

После ознакомления с Beyond the C++ Standart Library сразу начал читать C++ Template Metaprogramming. Что хочу сказать: эта книга must read для любого уважающего себя программиста на С++ (жаль что мне она попалась так поздно).

Теперь подробности. В отличии от Beyond the C++ Standart Library книга написана намного более интересным и сложным английским языком. Это естественно можно рассматривать как плюс или минус в зависимости от уровня знания языка :).

Книга описывает метапрограммирование начиная с самых основ (что такое шаблонный метод, шаблонная функция и т.п.) и заканчивая созданием своего собственного DESL  по поддержки state machine в коде C++.

Книга наполнена массой упражнений и существует сайт где можно найти ответы и обсуждения решений большинства упражнений. Сам я во время работы старался по началу делать большинство упражнений - нечего и говорить что первые главы шли очень не просто. Но польза от упражнений несомненна и я не капельки не жалеют о потраченном времени.

Есть очень полезное приложение о программирование препроцессора - есть надежда что большая часть этой черной магии будет не нужна при появлении C++0x.

Метапрограммирование является альфой и омегой библиотеки boost, а mpl - его основной библиотекой, на которой построены многие другие. Может быть mpl и не понадобится сразу в каждодневном программировании (мой случай), но знать как это все устроено и при необходимости уметь применять - просто необходимо, я считаю.