|
Программирование >> Полиморфизм без виртуальных функций в с++
Правила и принципы не относятся. Во вторую группу включены правила, относящиеся к роли С++ как инструмента поддержки проектирования. В третьей группе собраны аспекты, касающиеся технических, формирующих облик языка деталей. А правила из четвертой группы акцентируют внимание на роли С++ как языка для низкоуровневого программирования. Конечно, формулировки отточены уже задни.м числом, но эти правила определяли ход моих мыслей еще до заверщения работы над первой версией С++ в 1985 г., а многие из них, как упо.миналось в предыдущих главах, легли в основу исходной концепции С with Classes. 4.2. Общие правила Самые общие и важные правила С++ мало связаны с технически.мн вонроса.ми (см. табл. 4.2). Основной упор в них сделан на интересах сообщества пользователей. Природа С++ в значительной мере определена .моим желанием помочь современному поколению системных программистов в рещений актуальных задач. Подчеркну, что смысл слова современный из.меняется со временем, а значит, С++ должен эволюционировать, чтобы соответствовать потребиостя.м своих пользователей; он не может быть определен раз и навсегда. Таблица 4.2 Общие правила Эволюция С++ должна определяться реальными задачами Не устремляться в бесплодную погоню за совершенством С++ должен быть полезен сейчас Каждое средство должно иметь достаточно ясную реализацию Всегда оставлять путь для перехода С++ - это язык, а не законченная система Предоставлять всестороннюю поддержку для каждого поддерживаемого стиля программирования Ничего не заставлять делать насильно Эволюция С++ должна определяться реальными задачами. В информатике, как и во многих других областях, .можно наблюдать, как люди ищут задачу, к которой .можно было бы применить свое люби.мое рещение. Я не знаю безошибочного способа уберечься от субъективности при определении того, чту же является действительно важным, но точно знаю, что многие возможности, которые мне предлагали включить в язык, не уживаются с общей идеологией С++ и зачастую не нужны программнста.м, работающим над реальными проблемами. Единственным мотивом для внесения в С++ каких-либо изменений является продемонстрированная несколькими независимыми программистами недостаточная для решения их задач выразительность языка. Если только возможно, я привлекаю пользователей к поиску решения и воплощению его в жизнь. Не устремляться в бесплодную погоню за совершенством. Любой язык программирования несовершенен. И никогда не будет идеального языка, поскольку задачи и системы не стоят на месте. Года.ми шлифовать язык, пытаясь создать идеальную модель, - значит лишать программистов тех преимуществ, которые появились за это время. Тем са.мы.м проектировщик языка оставляет себя без обратной связи, и язык может развиться до такой степени, что станет уже никому не нужен. С другой стороны, программисты тратят больше всего времени на модификацию старого кода или попытки сопряжения с ним новых программ. Для работы им нужна стабильность. Если язык реально используется, то в нем неприемлемы радикальные из.менения. Даже относительно мелкие модификации трудно внести, не навредив пользователя.м. Поэтому решение пойти на серьез}юе усовершенствование должно опираться на надежную обратную связь с аудиторией, и принимать ту или иную поправку нельзя без серьезного рассмотрения вопросов совместимости, перехода на новую версию и обучения. По мере того как язык становится все более зрелым, любым изменениям в нем следует предпочитать альтернативы в виде инструментальных средств, специальных приемов и библиотек. Не каждую задачу нужно решать на С++, и не каждая проблема, имеющаяся в С++, настолько серьезна, чтобы заниматься ею. Например, не следует включать в сам язык средства для сопоставления с образцом или доказательства теорем, а хорошо известные недостатки С++, связанные с неудачно выбранными приоритетами операций (см. раздел 2.6.2), лучше не пытаться исправлять, а ограничиться предупреждения.ми компилятора. С++ должен быть полезен сейчас. Многие занимаются программированием для реп1епия сиюминутных задач, работают на довольно слабых компьютерах с устаревшими ОС и инструментальными средствами. Некоторым программистам не хватает формального образования. У многих нет времени повышать свою квалификацию. Таким образом, С++ должен быть полезен любому, кто обладает средней квалификацией и обычным компьютером. Хотя временами меня и подталкивали к этому, я никогда не собирался бросить таких пользователей на произвол судьбы и начать ориентироваться только на системы высшего класса и вкусы профессиональных ученых в области информатики. Смысл этого правила - как и большинства других - из.меняется со временем и в какой-то мере с распространением С++. Сейчас доступны более мощные компьютеры, растет и число программистов, знакомых с базовыми концепциями и методами, на которые опирается С++. А когда человек ставит перед собой более амбициозные цели, изменяются и задачи, с которыми он сталкивается. Отсюда следует, что сегодня можно и должно подумать о средствах, для которых требуются больше вычислительных ресурсов и более высокая квалификация программистов. Примерами могут служить обработка исключений (см. главу 16) и идентификация типов во вре.мя исполнения (см. раздел 14.2). Каждое средство должно иметь достаточно ясную реализацию. Для правильной и эффективной реализации любого средства не должно возникать нужды в сложных алгоритмах. В идеале должны существовать очевидные стратегии анализа и генерации кода, достаточно удобные для применения на практике. Большинство воз.можностей удалось реализовать, проверить и подвергнуть окончательной общие правила ревизии. Там, где не соблюдалась такая схема, например в случае с механизмом ии-станцирования шаблонов (см. раздел 15.10), возникали неприятности. Однако пользователей гораздо больше, чем разработчиков компиляторов. Поэтому всякий раз, когда приходится выбирать между сложностью компилятора и применения, решение должно приниматься в интересах пользователей. Я заслужил право на такое мнение, поскольку в течение многих лет сам зани.мался сопровождением компилятора. Всегда оставлять путь для перехода. С++ должен развиваться постепенно, чтобы обслуживать потребности своих пользователей. Также нельзя обойтись и без обратной связи с сообшеством. Значит, необходимо внимательно следить за тем, чтобы ранее написанный код продолжал работать. Если несовместимости не избежать, то надо приложить все усилия, чтобы помочь пользователям .молер}П13иро-вать свои программы. Точно так же следует указать путь перехода от неудачных прие.мов програм.мирования на С к более результативному использованию C-i-t-. Общая стратегия исключения из языка небезопасного, провоцирующего он1иб-ки, да и просто неудачного средства должна заключаться в том, чтобы сначала предложить более удачную альтернативу, затем порекомендовать не пользоваться устаревшим средство.м и лишь спустя несколько лет (а .может быть, и никогда) убрать изжившую себя возможность. Эту стратегию можно поддержать с помощью предупреждений компилятора. Часто не представляется возможны.м отказаться от некоторого средства или исправить ошибку (причина, как правило, в необходимости сохранять сов.местимость с С); тогда остаются только предупреждения (см. раздел 2.6.2). Таким образом, реализация С-ы- может оказаться более безопасной, чем следует из определения языка. С++ - это язык, а не законченная система. Среда программирования состоит из многих компонентов. Можно объединить их в единую - интегрированную -систему. Другой подход состоит в том, чтобы сохранить классическое разграничение между такими частями среды, как компилятор, компоновщик, библиотеки поддержки исполнения, библиотеки ввода/вывода, редактор, файловая система, база данных и т.д. Языку С-ы- ближе второй путь. С помощью библиотек, соглашений о вызове и пр. С-ы- приспосабливается к соглашениям, принятым в конкретной системе, при соблюдении которых возможно взаимодействие с другими языками и использование имеющихся инструментальных средств. Это ключ к переносимости реализации и, что важнее, к возможности обращаться к коду, написанному на других языках. Это также позволяет пользоваться общи.ми инструментами, облегчает совместную работу программистов, предпочитающих разные языки, и дает возможность одному человеку работать на разных языках. По своему замыслу С-ы- - это лишь один язык среди многих. Он позволяет разрабатывать инструментальные средства, но не требует никаких конкретных форм. У программиста остается свобода выбора. C-I-+ и сопутствующий инструментарий должны хорошо вписываться в данную систему. Особенно важно это для больших систем и систем с необычными ограничениями. Такие системы, как правило, не очень хорошо поддерживаются, поскольку стандартные инструментальные средства ориентированы преимущественно на отдельных программистов и небольшие коллективы, выполняющие среднюю работу.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |