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

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


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

9.3.2.4. Численные и научные расчеты

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

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

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

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



создается код на другом языке, который уже и выполняет нужные действия. Требованиям к языку реализации и к целевому языку С++ удовлетворяет очень хороню, так что я предвижу возрастание его роли в таких приложениях. Эту роль С++ наследует от С. Но такие детали, как возможность объявлять переменные почти повсеместно в сочетании со средствами организации профамм (пространства имен), делают C-I-+ даже более удобным в качестве целевого языка, чем С.

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

9.3.2.6. Смешанные системы

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

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

C-I-+ не совершенен. Однако он достаточно хорош, так что замена аналогичным языком ему не грозит. Только принципиально иной язык мог бы предоставить по-настоящему серьезные преимущества, чтобы его стали считать безусловно лучшим. Быть просто улучшенным С-и- недостаточно, чтобы сменить его. Вот почему С-ы- - это не просто улучшенный С. Если бы C-I-+ не предлагал совершенно новые способы написания программ, то программисты не отказывались бы от С. Именно поэтому Pascal и Modula-2 потерпели неудачу как альтернативы С, хотя многие представители академических кругов рекламировали их в течение многих лет. Они просто не настолько сильно отличались от С, чтобы намного превзойти его.

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



9.4. Что может сделать С++ более эффективным

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

9.4.1. Стабильность и стандарты

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

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

9.4.2. Обучение и приемы

Наибольший нотенциал для улучшений языка я вижу в простом изучении новых приемов проектирования и програ.ммирования. Самых простых и экономичных результатов можно было бы добиться просто за счет более эффективного использования С++. И не нужно никаких дорогостоящих инстру.ментов. С другой стороны, изменить образ мышления нелегко. Большинству программистов недостаточно просто выучить новый синтаксис, надо еще глубоко освоить новые концепции. Посмотрите, что написано в разделе 7.2 и в учебнике, где затрагиваются вопросы проектирования, например, в [2nd] или [Booch, 1993]. Я предчувствую, что в ближайшие несколько лет мы станем свидетелями значительного улучшения методов проектирования и программирования, но это все равно не дает нам права сидеть сложа руки и ждать.

9.4.3. Системные вопросы

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



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

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