Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #65, АПРЕЛЬ 2006 г.

эволюция

КРИС КАСПЕРСКИ АКА МЫЩЪХ

Спецвыпуск: Хакер, номер #065, стр. 065-022-6


возможности метапрограммирования

в новом стандарте также усилены. Опять-таки, мы столкнулись с возвратом к древнему самомодифицирующемуся коду, только под новым углом. В отличие от функционального программирования, метапрограммирование ориентировано на создание программ, манипулирующих другими программами или самими собой, что на С++ реализуется опять же посредством шаблонов. В частности, пример метареализации факториала выглядит так:

template struct Factorial; template <> struct Factorial<1>;

Красиво, конечно, но, увы, неэффективно!

шаблоны

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

В стороне от шаблонов идет возня по стандартизации механизма обработки структурных исключений и «декорации» (decoration) имен (также называемое «мангляжом»). До тех пор пока это не будет сделано, объектные файлы, сгенерированные различными компиляторами, останутся несовместимыми между собой и будут препятствовать созданию «смешанных» проектов. Впрочем, уже сейчас существуют линкеры, поддерживающие несколько компиляторов, например, в Microsoft Visual C++ и Borland Builder.

остальные «инновации»

в новом стандарте носят сугубо «косметический» характер, к которому относится появление типа long long или возможность записи «list<vector<string>>» вместо «list<vector<string> >» (всегдя пользовался первым вариантом - cl не возражал - прим. AvaLANche).

Компилятор GCC начиная с версии 4.0.2 также поддерживает новый стандарт, однако не в полной мере. В архиве с исходными кодами находится директория gcc/testsuite/g++.dg/tc1 — здесь тестовые примеры и текущий статус. Проваленные тесты отмечаются ключевым словом «xfail» в комментариях, что означает «данный тест еще не реализован». Ко всем остальным прилагаются «дефектные рапорты» (defect report), по одному рапорту на файл.

Назад на стр. 065-022-5  Содержание  Вперед на стр. 065-022-7