Купить офлайн
Цена на сайте может отличаться от цены в магазинах сети. Внешний вид книги может отличаться от изображения на сайте.
Цена на сайте может отличаться от цены в магазинах сети. Внешний вид книги может отличаться от изображения на сайте.
Книга написана Бьерном Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный объектно-ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».
Описание
Характеристики
Книга написана Бьерном Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка.
Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный объектно-ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток.БИНОМ. Лаборатория знаний
Как получить бонусы за отзыв о товаре
1
Сделайте заказ в интернет-магазине
2
Напишите развёрнутый отзыв от 300 символов только на то, что вы купили
3
Дождитесь, пока отзыв опубликуют.
Если он окажется среди первых десяти, вы получите 30 бонусов на Карту Любимого Покупателя. Можно писать неограниченное количество отзывов к разным покупкам – мы начислим бонусы за каждый, опубликованный в первой десятке.
Правила начисления бонусов
Если он окажется среди первых десяти, вы получите 30 бонусов на Карту Любимого Покупателя. Можно писать неограниченное количество отзывов к разным покупкам – мы начислим бонусы за каждый, опубликованный в первой десятке.
Правила начисления бонусов
Отличная книга в посредственной обертке
Хорошо!
Книга «Язык программирования C++. Специальное издание» есть в наличии в интернет-магазине «Читай-город» по привлекательной цене. Если вы находитесь в Москве, Санкт-Петербурге, Нижнем Новгороде, Казани, Екатеринбурге, Ростове-на-Дону или любом другом регионе России, вы можете оформить заказ на книгу Бьёрн Страуструп «Язык программирования C++. Специальное издание» и выбрать удобный способ его получения: самовывоз, доставка курьером или отправка почтой. Чтобы покупать книги вам было ещё приятнее, мы регулярно проводим акции и конкурсы.
Статья 2006 года.
Бьёрн Страуструп, изобретатель языка программирования C++, защищает свое наследие и рассказывает, что не так с большей частью программного кода.
В 1980-х и 90-х годах Бьёрн Страуструп разработал и внедрил язык программирования C++, который популяризировал объектно-ориентированное программирование и повлиял на многие другие языки программирования, включая Java.
C++ остается архетипическим «высокоуровневым» компьютерным языком (то есть языком, который сохраняет особенности естественного, человеческого языка), и он по-прежнему используется миллионами программистов. Многие из систем и приложений эры ПК и интернета были написаны на C++. Несмотря на это, язык остается спорным, во многом потому что его, как известно, трудно изучать и использовать, а также потому, что дизайн Страуструпа позволяет разработчикам допускать серьезные ошибки программирования в интересах сохранения их свободы.
Страуструп, на протяжении многих лет работающий в AT&T Bell Labs, теперь является профессором компьютерных наук на факультете инженерии в Техасском университете A&M, недалеко от Хьюстона.
Технологический обзор: почему большая часть программного обеспечения настолько плоха?
Бьёрн Страуструп: Некоторые программы на самом деле довольно хороши по любым стандартам.
Я думаю, что реальная проблема заключается в том, что «мы» (то есть разработчики программного обеспечения) находимся в постоянном чрезвычайном положении, хватаясь за соломинку, чтобы выполнить нашу работу. Мы выполняем много маленьких чудес посредством проб и ошибок, чрезмерного использования грубой силы и многих испытаний, но зачастую этого недостаточно.
Разработчики программного обеспечения стали мастерами в сложном искусстве создания достаточно надежных систем из ненадежных частей. Проблема в том, что часто мы не знаем точно, как мы это сделали: система просто «превратилась» в нечто минимально приемлемое. Лично я предпочитаю знать, когда система будет работать, и почему она будет это делать.
Технологический обзор: Как мы можем исправить беспорядок, в котором мы находимся?
Бьёрн Страуструп: Теоретически ответ прост: получше обучите наших разработчиков программного обеспечения, используйте более подходящие методы проектирования и используйте гибкий дизайн, мысля в долгосрочной перспективе. Вознаграждайте правильные, надежные и безопасные системы. Наказывайте за неряшливость.
На самом деле это невозможно. Люди вознаграждают разработчиков, чье программное обеспечение дешево, имеет баги и выпущено первым. Все потому что людям нужны новые гаджеты. Им не нужны неудобства, они не хотят изучать новые способы взаимодействия со своими компьютерами, не хотят задержек в доставке и не хотят платить за качество (если только это не очевидно, хотя чаще всего даже тогда не хотят). И без реальных изменений в поведении пользователей поставщики программного обеспечения вряд ли изменятся.
Мы не можем просто остановить мир на десятилетие, пока мы перепрограммируем все, начиная от наших кофе-машин и заканчивая нашими финансовыми системами. С другой стороны, продолжать действовать наобум дорого, опасно и удручающе. Необходимы значительные улучшения, и они могут появиться только постепенно. Они должны прийти на широкий фронт; лишь одного изменения недостаточно.
Одна из проблем заключается в том, что «академические дымовые трубы» мешают: слишком много людей продвигают какую-то область как панацею. Более эффективные методы проектирования могут помочь, лучшие методы спецификации могут помочь, лучшие языки программирования могут помочь, лучшие технологии тестирования могут помочь, лучшие операционные системы могут помочь, улучшение инфраструктуры среднего уровня, лучшее понимание областей приложений может помочь, лучшее понимание структур данных и алгоритмов могут помочь — и так далее. Например, теория типов, модельная разработка и формальные методы могут, несомненно, оказать значительную помощь в некоторых областях, но продвигаются они лишь как решение для исключения других подходов, каждый из которых гарантирует отказ в крупномасштабных проектах. Люди продвигают то, что знают, и то, что они видели; как иначе? Но только некоторые люди обладают технической зрелостью, чтобы сбалансировать требования и ресурсы.
Технологический обзор: Идея, лежащая в основе C++, заключалась в том, что программисты будут работать более активно в обмен на более эффективный код. Bell Labs захотели использовать язык, который несколько действительно умных людей будут использовать для написания кода, работающего на таких компьютерах, как Electronic Switching Systems (ESS), которые были не очень быстрыми. Сегодня очень много быстрых компьютеров и много разработчиков программного обеспечения. Означает ли это, что это сводит на нет всю суть C++?
Бьёрн Страуструп: C++ не был разработан специально для больших коммутационных аппаратов, он был разработан для огромного спектра приложений. Bell Labs была домом для невероятного спектра интересных проектов, охватывающих все масштабы и использующих практически все виды компьютеров и операционных систем. Но да, среднестатистический программист Bell Labs был значительно более способным в сравнении с мнением большинства людей о «среднестатистическом программисте», а надежность и производительность (в этом порядке) считались значительно более важными, чем в большинстве других мест.
Производительность по-прежнему остается проблемой во многих приложениях, которые меня интересуют: быстрота реагирования интерфейсов, время запуска и закрытия приложений. Разработчики программного обеспечения нейтрализуют поразительную производительность современного компьютерного оборудования, добавляя избыточные (программные) абстракции слой за слоем. Похоже, что мы столкнулись с ограничениями линейного ускорения для аппаратного обеспечения, но во многих случаях мы могли выиграть пару порядков величин у программного обеспечения.
Тем не менее, C++ действительно стал слишком «дружелюбным по отношению к экспертам» в то время как уровень эффективного формального образования среднестатистического разработчика программного обеспечения снизился. Тем не менее, решение заключается не в том, чтобы упростить до абсурда языки программирования, а в том, чтобы использовать различные языки программирования и обучать больше экспертов. Этим экспертам нужно использовать какие-то языки, а C++ — один из этих языков.
Технологический обзор: В ретроспективе, при проектировании C++, не было ли ваше решение обменять эффективность программного обеспечения, его безопасность и надежность на производительность кода во время выполнения, фундаментальной ошибкой?
Бьёрн Страуструп: Ну, я не думаю, что я сделал такой обмен. Я хочу элегантный и эффективный код. Иногда я это понимаю. Эти дихотомии (между эффективностью и правильностью, эффективностью и временем программиста, эффективностью по сравнению с высоким уровнем и т. д.) являются фиктивными.
То, что я действительно делал, — это разработал C++, как прежде всего язык системного программирования: я хотел иметь возможность писать драйверы устройств, встроенные системы и другой код, который должен был использовать непосредственно. Затем я хотел, чтобы C++ был хорошим языком для разработки инструментов. Это требовало гибкости и производительности, а также способности выразить элегантные интерфейсы. Мое мнение заключалось в том, что для создания более высокого уровня, для создания полных приложений вам сначала нужно было покупать, строить или заимствовать библиотеки, предоставляющие соответствующие абстракции. Часто, когда у людей возникают проблемы с C++, реальная проблема заключается в том, что у них нет соответствующих библиотек или они не могут найти доступные библиотеки.
Другие языки пытались более непосредственно поддерживать приложения высокого уровня.
Это работает, но часто эта поддержка стоит за счет специализации. Лично я не стал бы разрабатывать инструмент, который мог бы делать только то, что я хотел — я стремлюсь к общности.
Технологический обзор: Как вы объясняете тот факт, что C++ широко критикуется и многими программистами, но в то же время очень широко используется? Почему этот язык настолько успешен?
Бьёрн Страуструп: Ответ прост: есть только два вида языков: те, на которые жалуются все, и те, которые никто не использует.
Есть более полезные системы, разработанные на языках, которые считаются ужасными, чем на языках, которые хвалили за то, что они красивы — и многое другое. Цель языка программирования — помочь создать хорошие системы, где «хорошее» можно определить разными способами. Мое краткое определение: что-то правильное, поддерживаемое и достаточно быстрое. Эстетика имеет значение, но в первую очередь язык должен быть полезен; он должен позволить программистам этого мира выражать реалистичные идеи лаконично и недорого.
Основная причина успеха C++ заключается в том, что он отвечает ограниченным целям дизайна: он может эффективно выражать огромный спектр идей напрямую.
C++ не был предназначен для того, чтобы делать только одну вещь действительно хорошо или не позволять людям делать вещи, которые считаются «плохими». Вместо этого я сосредоточился на общности и производительности.
Я уверен, что на каждого программиста, который не любит C++, найдется тот, кому этот язык нравится. Однако мой друг отправился на конференцию, где основной докладчик попросил аудиторию продемонстрировать, поднимая руки: первое, сколько людей не любили C++, и второе, сколько людей написали программу на C++. В первой группе было вдвое больше людей, чем во второй. Выражение неприязни к чему-то, чего вы не знаете, обычно называют предрассудками. Кроме того, те, кто жалуются, всегда громче и увереннее, чем сторонники — разумные люди признают недостатки. Я думаю, что я знаю больше о проблемах с C++, чем о ком-либо вообще, но я также знаю, как их избежать и как использовать сильные стороны этого языка.
И, конечно, вы не ожидаете, что сторонники языков, которые проиграли в соревновании с C++, будут вежливы по отношению к этому факту. Разработка программного обеспечения не имеет такой степени профессионализма, хотя я надеюсь, что в конечном итоге это произойдет. В этом отношении наука отличается: когда выигрывает новый инструмент, техника или теория, люди видят это как прогресс. В программном обеспечении вклад конкурентов и предшественников не получил широкого признания, оценки или даже понимания.
Технологический обзор: В “Дизайне и эволюции C++” вы утверждаете, что Кьеркегор оказал влияние на вашу концепцию языка. Это шутка?
Бьёрн Страуструп: Возможно немного претенциозное заявление, но не шутка. Многие размышления о разработке программного обеспечения сосредоточены на группе, команде, компании. Это часто делается до такой степени, что человек полностью погружен в корпоративную «культуру» без выхода для уникальных талантов и навыков. Корпоративная практика может быть враждебной по отношению к людям с исключительными навыками и инициативой по техническим вопросам. Я считаю такое управление технарями жестоким и расточительным. Кьеркегор был сильным сторонником индивидуума против «толпы» и серьезно поднял вопрос важности эстетики и этического поведения. Я не мог указать на конкретную особенность языка и сказать: «Видите, есть влияние философа девятнадцатого века», но он является одним из корней моего нежелания устранять «уровень экспертного уровня», отменять «злоупотребление» и ограничивать возможности поддержки только тех приложений, которые, как я знаю, будут полезными. Тем не менее, я не особенно люблю религиозную философию Кьеркегора.
Технологический обзор: О чем вы жалеете больше всего?
Бьёрн Страуструп: Ни о чем не жалею! Ну, конечно, я мечтаю о том, что я мог бы сделать по-другому и лучше, но серьезно, кто я такой, чтобы переоткрыть, скажем, винтаж Бьёрна 1984 года? Возможно, он был менее опытным, чем я, но он был не менее умным, вероятно, умнее, и он лучше понимал слова 1984 года, чем я. C++ используется для создания многих систем, которые улучшают нашу жизнь, и это оказало значительное положительное влияние на более поздние языки и системы. Это то, чем можно гордиться.
Изменено 1 марта 2023 г.
Я написал несколько книг:
Переводы см. мой список публикаций и моя галерея обложек.
TC++PL4 стремится к полноте описания возможностей языка C++, компонентов стандартной библиотеки, а также поддерживаемых ими методов программирования и проектирования. Видеть Предисловие.
упражнения были расширены, но размещены в Интернете, чтобы сохранить деревья и дать возможность объяснения.
Обсуждение проблем разработки программного обеспечения, обнаруженных в TC++PL3. вырезано из-за нехватки места. Я по-прежнему рекомендую обсуждение в TC++PL3.
Третье издание представляет собой полную переработку второго издания. Более 80% текста новые по сравнению с моим 2-м изданием.
D&E должен дать вам гораздо лучшее представление о том, как особенности C++ подходят друг другу. Я надеюсь (и опыт), что понимание таких вопросов помогает людям писать лучшие программы, но основная цель книги не в конкретных методах программирования.
Глава ANSI/ISO представляет собой попытку решить проблему того, как поддерживать книгу в актуальном состоянии, не возясь с ее содержание до такой степени, что становится бесполезным в качестве общей точки ссылка. Подход осуществим, потому что изменения вписываются в общую узор языка.
К настоящему времени 2-е издание устарело и не подходит для изучения C++. С момента публикации стандарт ISO C++ был принят, и многие новые методы проектирования и программирования стали обычным явлением (см. мое 3-е издание).
Благодаря хорошей работе комитета ANSI/ISO стандарт ARM устарел.
Пол Крилл
Редактор на свободе, Информационный Мир |
КреативСоздатель C++ Бьерн Страуструп защищает почтенный язык программирования после того, как Агентство национальной безопасности США (АНБ) недавно рекомендовало не использовать его. АНБ рекомендует организациям вместо этого использовать безопасные для памяти языки.
Отвечая на бюллетень агентства по безопасности памяти программного обеспечения за ноябрь 2022 года, Страуструп, разработавший C++ в 1979 году, подчеркнул многолетние усилия по созданию лучшего, более безопасного и эффективного C++. «В частности, работа над Основными рекомендациями C++ специально направлена на предоставление статически гарантированного безопасного по типам и ресурсам C++ для людей, которые в этом нуждаются, без нарушения кодовых баз, которые могут работать без таких строгих гарантий, или введения дополнительных цепочек инструментов», — сказал Страуструп. в опубликованном ответе.
Бюллетень АНБ не рекомендует использовать C/C++, поскольку, несмотря на то, что программисты часто проводят тщательное тестирование для обеспечения безопасности кода, проблемы с памятью в программном обеспечении по-прежнему составляют большую часть эксплуатируемых уязвимостей. «АНБ советует организациям подумать о стратегическом переходе от языков программирования, обеспечивающих небольшую защиту памяти или не обеспечивающих ее вообще, таких как C/C++, к языку, безопасному для памяти, когда это возможно», — говорится в сообщении агентства.
Агентство упомянуло безопасные для памяти языки, такие как C#, Go, Java, Ruby, Rust и Swift». АНБ заявило, что часто используемые языки, такие как C и C++, обеспечивают свободу и гибкость в управлении памятью, в то же время сильно полагаясь на программиста для выполнения проверок ссылок на память.
Но Страуструп сделал акцент на повышении безопасности. «Теперь, если бы я считал, что какой-либо из этих «безопасных» языков превосходит C++ в том диапазоне применений, который меня волнует, я бы не считал исчезновение C/C++ чем-то плохим, но это не так. Кроме того, как уже было сказано, «безопасность» ограничивается безопасностью памяти, оставляя в стороне порядка дюжины других способов, которыми язык может (и будет) использоваться для нарушения той или иной формы безопасности».
Он также посетовал на меморандум АНБ, объединяющий C++ со старым языком C. C++, первоначально называвшийся C with Classes, является расширением C. «Как это часто бывает, он объединяет C и C++ в одну категорию C/C++, игнорируя 30 с лишним лет прогресса». В электронном письме InfoWorld в конце прошлой недели Страуструп добавил: «Да, слишком много людей говорят о мифическом языке C/C++, а затем часто сосредотачиваются на слабостях C-части. Многих из этих недостатков можно избежать в C++; как правило, путем написания более эффективного кода, который более прямо выражает намерение программиста».
Страуструп в электронном письме также поделился своим определением безопасности: он стремится к безопасности типов и ресурсов, при которой каждый объект используется в соответствии с его типом, а ресурсы не утекают. Для C++ это подразумевает некоторую проверку диапазона во время выполнения, устранение доступа через висячие указатели и недопущение неправильного использования приведения типов и объединений. C++ предлагает средства высокого уровня, такие как контейнеры, span, циклы range-for и варианты, которые могут гарантировать гарантии без ущерба для производительности или эффективности. Что касается так называемых безопасных языков, на которые ссылается АНБ, Страуструп сказал, что все языки уязвимы из-за кода, который не проверяется статически. Кроме того, каждая система должна использовать оборудование, а эффективный доступ к оборудованию редко бывает безопасным, сказал он.
Страуструп изложил свою стратегию безопасного использования C++: