Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033), страница 5
Текст из файла (страница 5)
Джонатан Шапиро (Лопагпап Б!1Ор)го) и Эндрю Кениг (Апогея Коешв) (оба из АТ8гТ) были редакторами, которые — с помощью многих членов комитета — подготовили текст стандарта, основанный на моем исходном справочном руководстве по С++. Открытый и демократичный процесс стандартизации потенциально таит в себе одну опасность: результат может оказаться комитетской разработкой». В случае с С++ этого по большей части удалось избежать. Во-первых, я состоял председателем рабочей группы по расширению языка.
В этом качестве я оценивал все основные предложения и составлял окончательные варианты тех из них, которые я, рабочая группа и комитет считали стоящими и в тоже время реализуемыми. Таким образом, комитет в основном обсуждал направляемые ему относительно завершенные проекты, а не занимался разработкой таковых. Во-вторых, главная из новых составляющих стандартной библиотеки — стандартная библиотека шаблонов БТ), предоставляющая общую, эффективную, типобезопасную и расширяемую среду контейнеров, итераторов и алгоритмов — была, в основном, результатом работы одного человека, Александра Степанова (А)ехапдег 81ерапоч) из Нею!ец-рас)гагд. Предисловие автора к третьему русскому изданию 27 Важно, что стандарт С++ — это не просто бумажка.
Он уже встроен в наиболее свежие реализации С++. Большинство основных реализаций поддерживают стандарт (с очень немногочисленными исключениями), причем все обещают полное соответствие в течение ближайших месяцев. Чтобы стимулировать честность производителей, две компании предлагают пакеты, проверяющие «стандартность» реализации С++, Итак, код, который я пишу сейчас, использует, если это необходимо, большинство возможностей, предлагаемых стандартным С++ и описанных в данном третьем издании «Языка программирования С++».
Улучшения в языке С++ и расширение стандартной библиотеки заметно изменили то, как я пишу код. Мои теперешние программы короче, яснее и эффективнее прежних, что является прямым результатом лучшей, более ясной и систематичной поддержки абстракций в стандартном С++. Улучшенная поддержка таких средств, как шаблоны и исключения, сокращают потребность в более низкоуровневых и запутанных возможностях языка.
Поэтому я считаю, что стандартный С++ проше в использовании, чем его предшествуюшие варианты, где мне приходилось имитировать средства, которые теперь поддерживаются непосредственно. Основываясь на приведенных наблюдениях, я решил, что необходимо полностью переписать второе издание «Языка программирования С++». Никак иначе нельзя было должным образом отразить новые возможности, предлагаемые языком, и поддерживаемые ими приемы программирования и проектирования. В результате 80% материала третьего издания добавлено по сравнению со вторым.
Изменилась и организация книги — теперь больший упор делается на технику и стиль программирования. Рассматриваемые изолированно, особенности языка скучны— они оживают лишь в контексте приемов программирования, ради поддержки которых и задумывались. Соответственно, С++ может теперь преподаваться как язык более высокого уровне. То есть основное внимание можно уделять алгоритмам и контейнерам, а не жонглированию битами, объединениями, строками в стиле С, массивами и проч. Более низкоуровневые понятия (такие как массивы, нетривиальное использование указателей и приведения типов), естественно, также придется изучить. Но их представление теперь удается отложить до тех пор, пока новичок в программировании на С++, читатель или студент не обретуг зрелость, необходимую, чтобы воспринимать эти средства в контексте более высокоуровневых концепций, к применению которых обучаемые уже привыкли.
В частности, невозможно переусердствовать в подчеркивании важности преимушества статически типобезопасных строк и контейнеров перед стилями программирования, предполагающими использование множества макросов и приведений типов. В третьем издании «Языка программирования С++» мне удалось избавиться от почти всех макросов и свести использование приведений типов к немногочисленным случаям, когда они действительно существенны. Я считаю серьезным недостатком принятую в С/С+-ь форму макросов, которую теперь можно считать устаревшей благодаря наличию более подходящих средств языка, таких как шаблоны, пространства имен, встроенные функции и константы.
Точно также, широкое использование приведений типов в любом языке сигнализирует о плохом проектировании. Как макросы, так и приведения являются частыми источниками ошибок. 28 Язык программирования С++ Тот факт, что без них можно обойтись, делает программирование на С++ куда более безопасным и элегантным.
Стандарт С++ предназначен для того, чтобы изменить наш способ программировать на С++, проектировать программы и обучать программированию на С++. Подобные изменения не происходят за один вечер. Я призываю вас не торопясь, внимательно присмотреться к стандарту С++, к приемам проектирования и программирования, используемым в третьем издании «Языка программирования С+-ькч — и к вашему собственному стилю программирования. Предполагаю, что вполне возможны значительные улучшения. Но пусть ваша голова остается холодной! Чудес не бывает — при написании кода опасно использовать языковые возможности и приемы, которые вы понимаете лишь частично.
Настало время изучать и экспериментировать — только поняв новые концепции и приемы, можно воспользоваться по-настояшему существенными преимуществами стандартного С++. Добро пожаловать! Бьерн Страуструл Предисловие Нрограььнирование есть понимание. — Кристин Нюгард Применение языка С++ доставляет мне все большее удовольствие. За прошедшие годы средства поддержки проектирования и программирования на С++ кардинально улучшились, а также было предложено множество полезных и удобных методик их использования. Но речь идет не только об удовольствии. Практикующие программисты достигли значительного повышения производительности, уровня поддержки, гибкости и качества в проектах любого уровня сложности и масштаба.
К настоящему времени С++ оправдал большую часть возлагавшихся на него надежд, а кроме того он преуспел в решении задач, о которых я даже н не мечтал. Эта книга представляет стандарт С++' и ключевые методы программирования и проектирования, поддерживаемые этим языком. Стандарт С++ намного мощнее и точнее, чем то, что излагалось в первом издании данной книги.
Новые языковые черты, такие как пространства имен, исключения, шаблоны и механизм динамического определения типов, позволяют реализовывать многие методики программирования более непосредственно, чем это было возможно ранее. Стандартная библиотека предоставляет программистам возможность стартовать с существенно более высокоуровневых конструкций чем те, что доступны в «голом» языке. Всего лишь треть информации из первого издания перекочевало во второе издание данной книги. Третье издание переработано еше более интенсивно. В ней есть кое-что, что будет полезно самым опытным программистам на С++. В то же время, она более доступна новичкам, чем предыдущие издания этой книги.
Это стало возможным благодаря взрывному росту практического использования С++ и опыту, вытекающему из этой практики. Стандартная библиотека позволяет по-новому представить основные концепции языка С++. Как и предыдущие издания, настоящая книга описывает язык С++ независимо от конкретных реализаций. Как и в предыдущих изданиях, все конструкции и концепции излагаются «снизу-вверх», так что к тому моменту, когда они начинают использоваться, они уже представлены и подробно описаны. Отметим, что начать использовать хорошо спроектированную библиотеку можно прежде, чем читатели смогут изучить ее внутреннее устройство. Кроме того, стандартная библиотека сама по себе является ценнейшим источником примеров программирования и методов проектирования.
В настоящей книге рассматриваются все основные средства языка и стандартной библиотеки. Ее материал организован вокруг этих основных средств, однако фокус изложения направлен на применение средств языка как инструмента проектирова- !50/!ЕС 14882:2003(Е), Стандарт языка программирования С+Э Язык программирования С++ ния и программирования, а не на формальные конструкции как таковые.
Книга демонстрирует ключевые методики, делающие С++ эффективным, и излагает эти методики так, чтобы их постижение повышало мастерство программиста. За исключением глав, иллюстрирующих технические детали, практические примеры кода взяты из области системного программирования. Дополнением к данной книге может служить исчерпывающий справочник гле Аппо!а!ее! С++ йапяиаяе Бгапдаггь Основной целью данной книги является стремление помочь читателю понять, как средства языка С++ непосредственно поддерживают ключевые методики программирования. Задача ставится так, чтобы подвигнуть читателя отойти как можно дальше от простого копирования примеров кода и эмулирования методик, присущих другим языкам программирования. Только отличное понимание идей, стоящих за средствами языка, ведет к настоящему мастерству.