C++: красавец или чудовище?
Но дракон уже был выпущен на свободу, и виной тому стала новая концепция объектно-ориентированного программирования. Программисты полсотни лет до этого как-то научились обходиться без ООП, шли от операторов к процедурам, от процедур к модулям, к разделению кода и данных – как завещали великие. Объекты все смешали опять в кучу, но дали надежду, что теперь-то полегче будет создавать по-настоящему огромные проекты. Что на Си представляло большую проблему. Язык-то создавался из расчета выразительности, лаконичности и тяготел к реализации средств низкого уровня – за счет исключительно гибкой механики указателей на данные и функции, причем с указателями можно было творить математические преобразования. Так что Си действительно позволял писать сверхэффективные программы, но за ошибки отвечал исключительно программист. А у каждого программиста, не забываем, был еще и свой собственный стиль написания программ, что при лаконичности и эффективности языка приводило к тому, что любой программист с трудом читал и понимал программы другого. И именно этот язык был выбран за базу для нового С++. С обычными и короткими программами проблем с ним не было: язык получился действительно ярким, позволяющим использовать миллионы написанных исходников на Си с незначительными переделками. Но как только дело доходило до обещанных огромных программ, появлялись классы, виртуальные классы, потоки, перегрузки и метапрограммирование, на которые накладывались древние проблемы с Си. И если это чудовище даже начинало работать, то в него уже никто не лез – себе дороже. Говорят, даже Вирт как-то выразился о С++ в том плане, что сложность и избыточность языка вовсе не обозначает его мощности, и путать это не надо. А представить себе более сложный и запутанный в старых и новых проблемах язык, чем С++, почти нереально. Это, так сказать, что касается критики языка.
Из достоинств можно назвать то, что С++ стал самым стандартным и востребованным базовым языком в мире, на котором до недавнего времени писалось практически все: как в мире Windows, так и Unix/Linux. Мода есть мода, а без знания оного языка заполучить престижную работу было нельзя. Что-то вроде дресс-кода на костюмы или туфли на каблуках у женщин – пусть неудобно и ноги ломаются, но надо! В результате С++ стали использовать везде – где надо и где не надо, создав вынужденную армию кодеров, языка до конца не воспринимающих, но готовых до смерти биться под его знаменами. И неважно, что теперь чаще пишут на Java, С#, Nemerle и прочих потомках Си – синтаксис и концепции у них практически одинаковы.
В связи с «глобальностью» языка, компиляторы под него пишут многие компании: Microsoft, Intel, Watcom, Embarcadero и др. Помимо коммерческих реализаций, есть и бесплатные, включая линейку Turbo C++ for DOS, а также проект GNU. Интересно, что «родитель» языка Си тоже развивается в своем направлении, причем своими возможностями увеличивает пропасть в плане совместимости языков. Листинг программы на C++
В качестве примера синтаксиса предоставляем вам кусочек заимствованной программы. Программа печатает на экран содержимое текстового файла.
#include <iostream.h> int main() { ofstream f; f.open("data.txt"); char str; while(!f.eof()){ f.get(str); cout<<str; } f.close(); return 0; } |