Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 12
Текст из файла (страница 12)
1.5. Использование С++ С.~-+ используется сотнямп тьпяч программистов практически во всех прикладных областях. Язык поддерживается десятком независимых реализаций, сотнями библиотек, руководств, несколькими техничсскими журналами, многочисленными конференциями и бесчисленными консультантами. Широко доступно обучение на различном уровне.
Ранние приложения имели ярко выраженный системный оттенок. Например, несколько основных операционных систем и ключевые части многих других были написаны на Сз-ч [СапзрЬеП, 1987 [, [Кох[ег, 1988], [Наин[гоп, 1993], [Вегй, 1995], [Рагйпйвоп, 1995[. Я не шел на компромиссы, которые могли бы привести к снижению эффективности низкоуровневых средств С++. Эффективность позволяет нам использовать Сч ь для написания драйверов и других программ, предназначенных для непосредственного управления аппаратурои в реальном времени. В таком коде предсказуемость выполнения играет по меньшей мере такую же роль, как и скорость, Часто то же самое можно сказать и о размере программы.
Каждое свойство С+ в вводилось с учетом ограничений по времени выполнения и требуемой памяти [5ггопз1гп р, 1994, э 4.5]. 48 Глава 1, Обращение к читателю В болыпинстве приложений есть участки кода, критичные ко времени выполнения. Однако большая часть кода расположена не в них. Как правило, ключевыми аспектами являются удобство сопровождения, расширяемость и простота тестирования. Эти свойства С++ привели к его широкому использованиго в областях, где совершенно необходима надежность, а также там, где требования к программам значительно меняются со временем. В качестве примеров можно привести банковское дело, торговлю, страхование, телекоммуникапии и военные приложения.
В течение многих лет централизованное управление системой междугородних переговоров в СШЛ осуществлялось программой на С ь«, н каждый звонок по номеру, начинающемуся с 800 (то есть звонок, оплачиваемый вызываемой стороной), маршрутизировался программой, написанной на С++ 1Кашатп, 1993), Многие из этих приложений являются большими программами и живут очень долго. Соответственно, стабильность, совместимость и масштабируемость всегда оставались в центре внимания при развитии С++, Программы на С++, содержащие миллион строк, нс являются большой редкостью. Создание С++ (как и С) не имело целью поддержку численных расчетов.
Тем не менее, на С««решается множество численных, научных и инженерных задач. Главная причина этого в том, что традиционные численные задачи часто должны совмещаться с графикой и вычислениями, связанными со структурами данных, которые не укладываются в традиционный Богггап [Вцййе, 1992], (Вагсоп, 19941. Графика и пользовательские интерфейсы — области интенсивного использования С++. Любой, кто работал на Арр1е Мас1птозп или РС под управлением %ип1ои з, косвенно пользовался С++, потому что базовые пользовательские интерфейсы этих систем написаны на С++.
Таким образом, С++ является типичным языком для написания приложений со сложным пользовательским интерфейсом. Вьцпесказанное определяет самую сильную сторону С++: возможность эффективного использования в программах, предназначенных для широкого диапазона прикладных областей. В этом смысле приложение, включающее в себя доступ к локальной и глобальной сетям, численные расчеты, графику, интерактивное взаимо-: действие с пользователем и обращение к базе данных, можно считать типичным. Традиционно эти области считались раздельными и они часто обслуживались различными техническими группами с использованием разных языков программирования. С++ широко применяется во всех этих областях.
Более того, он способен сосуществовать с фрагментами кода и программами, написанными на других языках. С+в широко используется для обучения и исследований. Это удивляет мзюгих, кто (справедливо) утверждает, что С++ це является ни самым маленьким, ни самым понятным языком. Тем не менее, он; достаточно ясен для обучения основным концепциям; достаточно реалистичен, эффективен н гибок для критичных проектов; достаточно доступен для организаций и объединений с различными средами разработки и выполнения; достаточно содержателен, чтобы служить инструментом обучения более сложным концепциям и методам; достаточно «рыноченгь чтобы приобретенные знания оказались полезными вне академической среды. С+« — язык, вместе с которым вы можете расти. 1.6.
С и С++ 49 1.6. С и С++ В качестве базового языка для С»ь был выбран С, потому что он: [1] является многоцелевым, лаконичным и относительно низкоуровневым языком; [2] подходит для решения большинства системных задач; [3] исполняется везде и на всем; [4] стыкуется со средой программирования 1)Х1Х.
В С есть свои проблемы, но их имел бы и разработанный с нуля язык, а проблемы С нам известны. Важно и то, что, благодаря С, язык «С с классами» стал мощным (разве что несколько неуклюгким) инструментом уже в первые несколько месяцев с момен- та зарождения идеи добавить 8!пш!а-подобные классы в С. По мере того, как С++ набирал популярность и его возможности все более превос- ходили средства С, вновь и вновь поднимался вопрос о целесообразности сохранения совместимости.
Очевидно, что можно было бы избежать некоторых проблем, достав- . шихся по наследству от С (см., например, [Бегй(, 1981]). Совместимость была остав- лена, потому что: [1] существуют миллионы строк кода на С, которые могут выиграть от использования Сь+, если не потребуется их полного переписывания с С на С++; [2] на С написаны миллионы строк библиотечных функций и утилит; онн могут быть использованы программами на С++, благодаря синтаксическому сходству и совместимости по компоновке с С; [3] сотни тысяч программистов знают С; им требуется изучить только новые свойства С++, не переучивая основы; [4] С++ и С будут использоваться на одних и тех же системах одними и теми же людьми в течение многих лет, так что разница должна быть либо очень незначительной, либо очень большой, чтобы свести ошибки к минимуму и избежать путаницы.
Определение С++ было пересмотрено с тем, чтобы любая конструкция, допустимая и в С, и в С+«ч имела бы одинаковый смысл в обоих языках (с несколькими незначи- тельными исключениями, см, 9 Б,2), Сам язык С частично развивался под влиянием С++ [Воз!ег, 1984]. Стандарт АХ81 С [С, 1990] содержит синтаксис объявления функций, заимствованный из «С с классами». Заимствование происходит в обоих направлениях.
Например, тип указа- теля поЫ* придуман для АК 81 С, а реализован впервые в С++. Как и было обещано в первом издании втой книги, определение С++ было пересмотрено с цслью устране- ния непринципиальных несовместимостей. В настоящее время, С++ более совмес- тим с С, чем вначале. Идеал С++ — быть близким к АХБ1 С настолько, насколько это возможно, но не ближе [Коеп!8, 1989]. Стопроцентная совместимость никогда не яв- лялась целью. Иначе пришлось бы пожертвовать безопасностью с точки зрения ти- пов и гармоничным сочстъшием встроенных и определяемых пользователем типов.
Знание С не является обязательным для изучения С++. Программирование на С поощряет многие технические трюки, которые становятся ненужными благодаря С«+. Например, явное преобразование типов в С++ используется реже, чем в С Я 1.6.1). Однако хорошие программы на С имеют тенденцию походить на программы па Се». Например, любая программа из книги ТЬе С Ргойгаттгп8 (ап((иа8е (2пд Ейг!оп), Кегп!8Ьап апг] к!гсй!е (Яэын програлииироеания С, 2-е издание, Керпиган и Ритчи) [Кегп!8йап, 1988] является программой на Се+, При изучении С+ ь поможет опыт использования любого языка со статическим определением типов. 50 Глава 1. Обращение к читателю 1.6.1. Рекомендации для программистов на С Чем лучше вы знаете С, тем труднее вам будст избежать программирования на Съ+ в стиле С, теряя при этом потепцнальнгяс преимущества С«+, Просмотрите, пожалуйста, приложение Б, в котором описываются различия С и С++.
Вот некоторые вещи, с которыми Съ' справляется лучше, чем С: (1] Макросы почти никогда не требуются в С++. Пользуйтесь сопз1 Я 5.4) или епит (9 4.8) для определения констант, (пнпе Я 7.1.1) во избежание накладных расходов на вызов функций, Гетр(аГе (глава 13) для определения семейства функций или типов п патезрпсе Я 8.2) для предотвращения конфликтов имен. [2] Не обьявляйте переменную, пока она вам не потребуется, чтобы вы тут же могли инициализировать ее. Объявление можно поместить в любом месте, где допустима инструкция Я 6.3.1), в разделе иннцнализации7ог-инструкции Я 6.3.3) и в условиях Я 6.3.2.1), (3] Не используйте пза((ос(]. Оператор пеш Я 6.2.6) делает то же самос лучше. Вместо геаПог(] пользуйтесь весгог Я 3.8).
(4] Пытайтесь избегать ооЫ», арифметических операций над указателями, объединений и приведений типов, за исключением разве что глубоко спрятанных в реализацию функций илп классов. В большинстве случаев приведение типа означает ошибку на этапе проектирования. Если вам необходимо приведение, попробуйте воспользоваться одним из «новых преобразований типа» Я 6.2.7), которое позволит выразить более точно то, что вы пытаетесь сделать.
(5] Сведите к минимуму использование массивов символов и строк С. Стандартные библиотеки классов С++ з1ппп Я 3.5) и тес(ог Я 3.7.1) часто могут упростить программирование по сравнению с традиционным стилем С. В общем, не пытантесь создавать то, что уже сделано в стандартной библиотеке. Для обеспечения соглашений С о компоновке функция С++ должна быть объявлена соответствующим образом Я 9.2А).
Самое важное: пытайтесь представить программу в виде набора взаимодействуюьчих понятий, реализованных в виде классов н объектов, а не в виде набора структур данных с функциями, перемалывающими их биты. 1.6.2. Рекомендации для программистов на С++ Многие люди пользовались С++ в течение длительного времени. Большинство из ннх используют С++ в одной среде и привыкли к ограничениям, полагавшимися ранними компиляторами и библиотекамп первого поколения. Тем, чего не замечал опытный программист на С++ в течение этих лет, было не появление новых средств как таковых, а скорее изменения в отношениях между средствами языка, которые сделали возможными новыс методы программирования.
Другими словами, то, о чем вы не думали, когда изучали С+чч или то, что вы сочли непрактичным, сегодня может оказаться исключительно полезным. Вы сможете познакомиться с этим только путем повторного просмотра основ. Читайте главы по порядку. Если вы знакомы с содержанием главы, вам удастся пролистать ее за несколько минут, Если вы не знакомы с материалом, вам встретится что-ннбудь неожиданное. Я кое-что узнал, пока писал эту книгу и подозреваю, что вряд ли существует программист на С+«э который знает все представленные здесь 51 1.7. Размышления о программировании на С++ свойства и технологии. Более того, чтобы правильно польаоваться языком, вам необходима некая перспектива, которая привнесла бы порядок в набор средств н методов.