|
Программирование >> Полиморфизм без виртуальных функций в с++
Я очень рад, что могу взять эти слова обратно! Комитет проникся важностью вопроса и одобрил великолепную библиотеку контейнеров, итераторов и фундаментальных алгоритмов, спроектированную Алексо.м Степановым. Эта библиотека, которую часто называют STL (Standard Template Library), представляет собой изяпп1ый, эффективный, формально полный и хорошо протестированный каркас для построения и использования контейнеров (Alexander Stepanov и Meng Lee: The Standard Template Library, HP Labs Teclinical Report HPL-94-34 (R.l), 1994. Mike Vilot: The С++ Report, 1994). Разумеется, STL содержит классы для отображений и списков и включает в качестве частных случаев вышеупомянутые классы dynarray, bits и bitstring. Кроме того, комитет одобрил классы векторов для поддержки численных и научных расчетов, приняв за основу предложение Кена Баджа из Sandia Labs. Кроме того, нужно специфицировать базовую языковую поддержку, например, функции : : operator new (size t) и set new handler (), которые поддерживают оператор new (см. раздел 10.6), функции terminate () и unexpected () для поддержки обработки исключений (см. раздел 16.9) и классы type inf о, bad cast и bad typeid, необходимые для поддержки идентификации типов во вре.мя исполнения (см. раздел 14.2). Далее ко.митет должен разобраться, может ли удовлетворить желание иметь более полезные и стандартные классы , например string, не занимаясь самостоятельно проектированием и не вступая в конкуренцию с индустрией производства библиотек для С-ы-. Любые библиотеки, кроме библиотек С и iostreams, которые одобряет ко.митет, должны включать лишь строительные блоки. Основная роль стандартной библиотеки - облегчить взаимодействие между специализированными, независимо разработанны.ми библиотеками. Прини.мая во внимание все вышесказанное, комитет одобрил классы string и wstring и пытается объединить их в некий шаблон строки, включающей абсолютно все . Одобрен также класс динамического массива dynarray [Stal, 1993], шаблон класса bits<N> для битовых .множеств фиксированного размера, класс bitstring для битовых множеств с изменяемым размером. Кроме того, комитет принял классы комплексных чисел (предшественник - первоначальный класс complex, см. раздел 3.3), обсуждается вопрос, следует ли принять класс вектора для поддержки численных расчетов и научных приложений. О наборе стандартных классов, их спецификациях и даже названиях все еще ведутся оживленные споры. На мой взгляд, в стандартную библиотеку должны были включены шаблоны списка и ассоциативного массива (отображения) - см. раздел 9.2.3. Однако, как и в случае с версией 1.0, они могут быть принесены в жертву желанию во что бы то ни стало завершить стандартизацию ядра языка вовремя. Глава 9. Перспективы развития языка С++ Нельзя дважды войти в одну и ту же реку. Гераклит 9.1. Введение Данная глава в большей степени основана на личных оценках и обобщениях. Здесь приведены ответы на некоторые обшие вопросы и рассмотрены проблемы, которые всегда возникают при обсуждении проектирования С++. Глава состоит из трех взаи.мосвязанных частей: □ попытка оценить текущее состояние С++ с учето.м имеющегося опыта, а также разобраться, каким мог бы стать язык (см. раздел 9.2); □ оценка проблем, которые станут актуальными для разработчиков программ в будущем, с целью понять, как с помощью С++ можно было бы способствовать их решению (см. раздел 9.3); □ взгляд на те области, в которых са.м язык и его применение стоило бы значительно усовершенствовать (см. раздел 9.4). 9.2. Оценка пройденного пути Часто говорят, что задним умом всяк крепок . Это неверно. Данное утверждение основано на ложных допущениях о то.м, будто нам известны все существенные факты прошлого, что мы знаем все о текущем состоянии дел и достаточно беспристрастны. Обычно ни одно из этих условий не выполняется. Поэтому ретроспективный взгляд на явление, столь сложное и динамичное, как язык программирования и его широкомасштабное применение, не может быть простой констатацией факта. Так или иначе, я попытаюсь дать ответы на некоторые трудные вопросы: □ достигнуты ли основные цели С++? □ является ли С++ логически последовательным языком? □ какова основная недоработка языка? Разумеется, ответы на эти вопросы взаимосвязаны: да , да и отказ от включения более полной библиотеки в версию 1.0 . 9.2.7. Достигнуты ли основные цели С++? С++ - это язык програ.ммирования o6niero назначения, цель которого - сделать работу серьезных програм.vhictob более приятным занятием [Stroustrup, 1986Ь]. Данная задача успепшо решена. Точнее, достаточно образованным и опытным програм.мистам язык дал воз.можность писать програм.мы на более высоком уровне абстракции ( точно так же, как в Simula ), пе утратив присущей С эффективности. Это удалось сделать для приложений (впутрен)1е сложных, ограР1Ичен-пых условиями среды выполнения), которым требуется быстродействие и большое потребление памяти. В более широком смысле объектно-ориептировапное программирование и абстракции данных стали доступны разработчикам, которые раньше относились к таким метода.м и поддерживаюпш.м их языкам (Smalltalk, Clu, Simula, Ada, 00 Lisp и т.д.) пренебрежительно и даже презрительно ( дорогие игрушки, непригодные для решения реальных задач ). Чтобы преодолеть такой барьер, было сделано следующее: □ С++ генерирует код, который по быстродействию и расходу памяти может па равных конкурировать к признанным лидером в этой области - языком С. Любой язык, задачей которого является не уступить или даже превзойти С, просто обязан быть быстрым . Необходимую производительность С++ обеспечивает как для традиционно структурированного кода, так и для основанного на абстракциях данных и объектно-ориентированных методах; □ такой код может интегрироваться с существующими программами и получаться па широко распространенных платфор.мах. Высокая степень переносимости считалась чрезвычайно важным критерием, как и способность сосуществовать с уже написанным кодом и с традиционны.ми инструмепта-.ми, например отладчиками и редакторами связей; а в С++ допускается постепенный переход на новые приемы программирования. Благодаря С++ доступны каждому стали объектно-ориентированное программирование и абстракции данных. С++ также явился мощным сти.мулом для языков, поддерживающих в то.м или ином виде объектно-ориентированное программирование и абстрагирование данных. Появление С++ помогло и пользователям других языков, побудив разработчиков этих языков увеличивать производительность и гибкость. 9.2.2. Является ли С++ логически последовательным языком? В целом и я, и большинство пользователей довольны языко.м С++. Есть, конечно, много деталей, которые я улучшил бы, если бы мог. Однако фундаментальная концепция сильно типизированного языка, основанного иа классах с виртуальными функциями и предоставляющего средства для низкоуровневого програ.м.миро-вания, кажется мне здравой. Кроме того, все основные средства тесно связаны и гюд-держивают друг друга.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |