Программирование >>  Полиморфизм без виртуальных функций в с++ 

1 ... 62 63 64 [ 65 ] 66 67 68 ... 144


1986] следовало отложить до окончания разработки более полной библиотеки, включающей такие фундаментальные классы, как одпосвязные и двусвязные списки, ассоциативные массивы, массивы с контролем выхода за границы и простые строки. Их отсутствие заставило всех изобретать велосипед и породило ненужное разнообразие базовых классов. Пытаясь самостоятельно построить базовые классы, программисты вынуждены были сразу начать с продвинутых возможностей, еще не освоив основы С++. Кроме того, много усилий было потрачено на разработку .методов и инстру.ментов по ходу работы с библиотеками, которые имели серьезный внутрерншй дефект - отсутствие шаблонов.

В некоторо.м смысле я бы мог избежать вышеназванной ошибки. В первопа-чально.м плане книги значилось три раздела, посвященных библиотеке: о потоковом вводе/выводе, о контейнерных классах и о поддержке многозадачности. Приблизительно я знал, чего хочу, но, к сожалению, слишко.м устал и не мог реализовать контейнерные классы, не и.мея в како.м-то виде шаблонов. Идея подделать шаблоны с по.\ющью препроцессора или некоторой временной уловки в ко.мпиляторе не пришла мне тогда в голову.

9.3. Всего лишь мост?

я создал С++ как .мост, по которо.му люди могли бы перейти от традиционного програ.м.мировапия к абстракция.м данных и объектпо-ориентированрюму программированию. Есть ли у С++ будущее за эти.ми рамками? Разве C+-I- - это всего лип1ь мост и ничего более? Будет ли этот язык еще представлять интерес и иметь ценность, когда объектно-ориептировариюе профаммирование будет применяться повсеместно? И если ответ положителен, то можно ли что-нибудь сделать для тех пользователей С++, которым не важна совместимость с С, не причинив вред те.м, для кого она еще, по крайней мере, десять лет будет необходима?

Язык существует для того, чтобы помочь при решении задач. Если язык с самого начала оказался удачным, то будет суп1ествовать, пока есть задачи, при решении которых он оказался полезным. И станет пользоваться успехом, если только в како.м-то другом языке не будут предложены гораздо лучшие решения для тех же .задач. Поэтому возникают следуюпше вопросы:

J останутся ли актуальными задачи, которые по.могает решать С++?

□ появятся ли существенно лучшие решения?

□ сможет ли С++ предложить хорошие решения новых задач?

Я отвечаю Fia вопросы так: .многие останутся , медленно и да . 9.5.7. Мост нужен надолго

Пройдет еще достаточно времени, пока большинство гюльзователей преуспеет в использовании объектно-ориентированного профам.мирования, проектирования и т.д. Роль С++ как моста и средства для гибридного проектирования и разработки не исчерпает себя в двадцатом столетии, а его значение как средства сопровождения и обновления старого кода будет актуально еще дольше.

Не стоит забывать, что даже переход от ассемблера к С осуществился пе повсеместно. Точно так же и переход от С к С++ может запять длительное время.



Однако в этом и сильная сторона С++. Тем, кому действительно нужен чистый С, С++ предоставляет все его возможности без потери эффективности. Поддержка обоих стилей - как на переходный период, так и там, где стиль С действительно наиболее подходит, - одна из фундаментальных целей языка С++.

9.3.2. Если С++ - это ответ, то на какой вопрос?

С++ - язык общего назначения или, по крайней мере, .многоцелевой. Отсюда следует, что для каждой конкретной ситуации можно построить язык или систему, которая бы отвечала требованиям данной ситуации лучше, чем С++. Однако сила С++ в том, что он дает достаточно хорошие ответы на .\пюгие вопросы, а не наилучший ответ на какой-то один вопрос. Например, С++, как и С, отлично подходит для низкоуровневого системного програм.мирования, и его производительность в этой области обычно выше, чем у других языков высокого уровня. Однако для большинства машинных архитектур хороший програ.ммист Fia ассемблере смог бы написать код, несколько меньший по размерам и более быстрый, че.м тот, который способен сгенерировать хороший компилятор.

С трудом представляю себе то приложение, для которого нельзя было бы построить специализированный язык, лучший, чем С++ или любой другой язык общего назначения. Поэтому самое большее, на что .может рассчитывать язык общего назначения, - быть вторым .

Отметив данный факт, я все же остановлюсь на сильных сторонах С++:

□ низкоуровневое системное програм.мирование; J высокоуровневое системное программирование;

□ встроенные системы;

□ численные и научные расчеты;

□ общее прикладное программирование.

Некоторые из этих категорий пересекаются. Ни у одной нет общепринятого определения. Но С++ остается хорошим выбором в каждой из этих областей. Более того, любой язык, подходящий для всех этих категорий, очень напоминал бы С++ в плане предоставляемых базовых сервисов, хотя в синтаксическом или семантическом отношении мог бы быть друггим. Упомянутые области не исчерпывают всего разнообразия приложений, в которых успешно применялся С++, но именно они являются ключевыми.

9.3.2.1. Низкоуровневое системное программирование

Для низкоуровневого профаммирования С++ подходит лучше всех существующих языков. В нем сильные стороны С сочетаются с возможностью простого абстрагирования данных с нулевы.ми издержками по быстродействию и па.мяти, он удобен для создания больших програм.м. Никакой новый язык в этой сфере не сможет оказаться настолько лучше С++, чтобы заменить его. Системное программирование, включая разработку низкоуровневых компонентов, всегда будет сильной стороной С++. В этой области он выступает как улучшенный С. Еще много лет едиР1Ственным конкурентом С++ здесь будет оставаться С, и все же С++ -более удачный выбор, поскольку он и есть С, только лучше. Я ожидаю, что низкоуровневое системное программирование будет постепенно утрачивать свою



важность, но останется одной из основных областей применения С++. Поэтому надо быть очень осторожным, чтобы не улучшить язык или компиляторы С++ настолько, что он станет языком только высокого уровня.

9.3.2.2. Высокоуровневое системное программирование

Размер и сложность традиционных систем растут очень быстро. В качестве примера можно привести ядра ОС, диспетчеры сетей, компиляторы, системы электронной почты, системы для фотонабора, для манипуляций с изображениями и звуком, системы связи, пользовательские интерфейсы и системы баз данных. Следовательно, традиционный акцент на низкоуровневой эффективности смешается в сторону общей структуры системы. Эффективность по-прежнему остается важным аспектом, но становится вторичной, поскольку никому не нужна, если большую систему не удастся эконо.мно построить и сопровождать.

Имеющиеся в С++ средства абстрагирования данных и объектно-ориентированного профаммирования относятся именно к этой стороне вопроса. Шаблоны, пространства имен и исключения будут значить все больше и больше для про-фаммистов, работающих над такими приложениями. Изолирование необходимых нарушений системы типов в низкоуровневых функциях, подсистемах и библиотеках будет становиться все более критичным. При использовании этой техники основной код приложения станет безопасным с точки зрения типов, а значит, более удобным для сопровождения. Я ожидаю, что значимость высокоуровневого системного профаммирования с годами возрастет, но тем Fie менее останется областью, где С++ имеет большие преимущества.

Для высокоуровневого системного программирования хорошо подходят и многие другие языки, напри.мер Ada9X, Eiffel и Modula-3. Если не считать поддержки сборки мусора и параллельности, то они приблизительно эквивалентны С++ с точки зрения фундаментальных механизмов. Естественно, о качестве отдельных средств и глубине их интеграции в язык можно спорить бесконечно. Однако при наличии высококачественных реализаций каждый из этих языков может поддержать широкий круг приложений. Определяющи.ми при разработке станут проблемы, не относящиеся к техническим деталям языка: управляемость, приемы проектирования и обучение программистов. У С++ есть определенные конкурентные преимущества: эффективность, гибкость, доступность и наличие большого числа пользователей.

Для некоторых крупных приложений авто.матическая сборка мусора - это большое преимущество, для других - дополнительная сложность. Если в компиляторы С++ не будет включен необязательный сборщик мусора, то в определенных областях С++ займет невыгодные позиции, но я уверен, что такие компиляторы скоро появятся повсеместно.

9.3.2.3. Встроенные системы

В ряду областей системного програ.ммирования встроенные системы должны быть рассмотрены особо. Под встроенными системами понимаются профаммы, управляющие работой компьютеризованных устройств: видеокамер, автомобилей, ракет, телефонных коммутаторов и т.д. Думается, что важность таких систем со временем возрастет и применяться в них будет смесь низко- и высокоуровневого



1 ... 62 63 64 [ 65 ] 66 67 68 ... 144

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика