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

1 ... 55 56 57 [ 58 ] 59 60 61 ... 144


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

В отличие от традиционных языков, С++ имеет механизм наследования, что является большим преи.муп1еством. По сравнегиш же с языками, поддерживающими наследование, в С++ предусмотрен статический контроль типов. Из всех языков только Eiffel и lVIodula-3 в какой-то мере похожи на С++. В языке Ada9X, идущем на смену Ada, тоже есть наследование.

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

7.43. Как выдержать конкуренцию

Люди часто удивляются, почему AT&T позволяет другим компаниям реализовывать С++. Это свидетельствует о незнании законов и непони.мании целей AT&T. После опубликования справочного руководства по С++ [Stroustrup, 1984] любой желающий может создать компилятор для языка. Более того, AT&T не только не препятствовала приходу новых людей на растущий рынок компиляторов С++, инструментальных средств, образовательных услуг и т.д., но всячески приветствовала и поощряла данную тенденцию. Многие просто упускают из виду, что AT&T в гораздо большей степени является потребителем програм.мных продуктов, нежели их производителем. Поэтому компании очень выгодны труды конкурентов на поле С++.

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



Labs и устоять против стихии рынка, не может быть совсем уж плохим, даже если он не подчиняется диктату академическоР! моды.

Само собой, стратегию определяют не какие-то безликие компании. Ее формулируют люди, и согласие достигается и.менно между ними. Стратегия развития С++ идет от преобладавших в Bell Labs и других подра;делениях AT&T идей. Язык никогда бы не стал популярным, если бы концепция общедоступного програ.мм-пого обеспечения не нашла поддержки.

Конечно, согласие достигалось не всегда просто, иногда не достигалось и вовсе. Мне рассказывали, как однажды некий менеджер высказал идею засекретить С++ как конкурентное преимущество AT&T. Его разубедил другой менеджер, добавив: В любом случае идея абсурдна, поскольку Бьерн уже ра;адал 700 копий справочного руководства . Разумеется, все экземпляры были отправлены после получения надлежащего разрешения и одобрения моим начальством.

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

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

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

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

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



Глава 8. Библиотеки

Понять жизнь можно, лишь Оглядываясь назад, но жить-то приходится, смотря вперед.

Серен Кьеркегор

8.1. Введение

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

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

8.2. Проектирование библиотеки С++

Библиотека Fortran - это набор подпрогра.мм, библиотека С - набор функций и ассоциированных с ними структур данных, библиотека Smalltalk - иерархия классов с корнем в определенном месте стандартной иерархии Smalltalk. А что такое библиотека С++? Ясно, что она может походить на библиотеку Fortran, С или Smalltalk. Но также она может быть наборо.м абстрактных типов с несколькими реализациями (см. раздел 13.2.2), набором шаблонов (см. главу 15)... Допустимы и другие варианты. Проектировщик библиотеки С++ может выбирать из нескольких базовых структур или даже предложить несколько вар1Шнтов интерфейса к одной библиотеке. Например, библиотеку, оргапизовагшую как набор абстрактных типов, удастся представить и как набор функций для программы на С. А библиотека, устроенная в виде иерархии классов, может внешне выглядеть как набор описателей (handles).

Вариативность подходов отражает разнообразие потребностей сообп1ества пользователей С++. К библиотеке, поддерживающей высокопроизводительные вычисления, предъявляются иные требования, че.м к библиотеке интерактивной



1 ... 55 56 57 [ 58 ] 59 60 61 ... 144

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