эволюция КРИС КАСПЕРСКИ АКА МЫЩЪХ Спецвыпуск: Хакер, номер #065, стр. 065-022-2 Решение проблемы в общем виде практически всегда проигрывает частному случаю. Это инженерный закон. Нестандартные языковые средства ускоряют процесс разработки в несколько раз, поэтому только глупые и невежественные откажутся от них там, где переносимость не требуется. Подавляющее большинство программистов руководствуется совсем не стандартом (о существовании которого многие из них даже и не догадываются), а документацией на конкретный компилятор или даже популярными книжками из серии «Microsoft Visual C++ для полных дебилов», что, в общем, правильно. вопреки распространенному заблуждению cтандарт пишется не для программистов, а для разработчиков компиляторов. Изучать С по стандарту ни в коем случае нельзя, и не потому, что он написан заумным языком, в котором путаются даже профессионалы. Даже не из-за обилия фраз «неопределенно, зависит от конкретной реализации». Камень преткновения в том, что ни один из компиляторов не поддерживает стандарт на 100%! Реально можно использовать только базовые языковые средства, составляющие ядро С++, а все остальное — это сплошное «шаг влево, и компилятор разваливает программу без предупреждения». Проходит много лет, прежде чем возможности, принятые новой версией стандарта, приобретают реальную поддержку среди компиляторов. Трансляция программы — очень сложная, можно сказать, магическая штука, намного более сложная, чем кажется людям со стороны. Некоторое представление о глубине проблемы дает статья «Редкая профессия» Евгения Зуева (www.pcmag.ru/archive/9705s/05s979.asp): как три российских программиста разрабатывали С++-компилятор и с какими граблями они воевали. Пожалей компилятор! Не насилуй его навороченными конструкциями, почерпнутыми из новейшей редакции стандарта и до сих пор еще не отработанными. Так ты существенно ограничиваешь круг компиляторов, пережевывающих твою программу, и создаешь все условия для появления трудноуловимых ошибок, генерируемых самим компилятором. Правило номер один гласит: «Не греши на компилятор и прежде всего ищи ошибку у себя». Однако из этого вовсе не следует, что компилятор никогда не ошибается. Компиляторы содержат поистине гигантское количество ошибок, и bug lists обычно имеют очень и очень внушительные объемы. процесс программирования на С++ нередко сравнивают с хождением по минному полю. Виновата чрезмерная сложность языка, который с возрастом становится все сложнее и сложнее. Поговаривают даже о скорой кончине С++. Симптомы загнивания и деградации налицо, пусть даже слухи о его смерти сильно преувеличены. С++ не решил тех проблем, ликвидации которых ожидали. Программирование не стало ни проще, ни эффективнее, количество ошибок ничуть не уменьшилось, удачные примеры повторного использования кода (о котором трубят все поклонники С++) можно пересчитать по пальцам одной руки… Притом совокупная себестоимость программирования существенно возросла — достаточно взглянуть на зарплату С++-программистов, цену на средства разработки и затраты на процесс обучения и освоения языка. |