Б. Страуструп - Дизайн и Эволюция C++. 2006 (1160775), страница 17
Текст из файла (страница 17)
Предоставление в токих случоях списка аргументов показалось достаточно разумным, чтобы побороть антипатию к включению еще одного «средсгво». Они позволяли сделать объявление с 1 а в в более кротким и похожим но объявление всгцсс». Что не реализовано в С и(!Ф С!аззев МИИИВИИИ Вот пример: «Можно объявить список ори(ментов па умолчанию для функции п пи ( ) . Затем этот список будет использоваться всякий раз, как абьект класса создается без указания аргументов.
Так, при наличии объявления с1авв с)тат влас)к ( уатк) пен(тле=512); объявление с1авв с(тат всасх в3; допустимо, при этом вЗ инициализируется вызовом вз.пеи(512)». При наличии общего механизма перегрузки функций (см. раздел 3.6 и главу 11) аргументы по умолчанию становятся логически избыточными и в лучшем случае обеспечивают небольшое удобство нотации. Однако списки аргументов по умолчанию существовали в С ту!й С!азвез много лет, прежде чем в С++ появилась перегрузка. 2.13. Что не реализовано в С и!Ф С!азиз Ряд возможностей, которые позднее были включены в С++ или обсуждаются до сих пор, рассматривались уже во время работы над С ту(й С!аззек Среди них— виртуальные функции, статические члены, шаблоны и множественное наследование. Однако «у всех этих обобщений есть свои области применения, но для проектирования, реализации, документирования и обучения каждой «особенности» языка требуются время, силы и опыт...
Концепция базового класса — это инженерный компромисс, как и вообще концепция класса в С !Ятгоцвтгор, 1982Ь!». Я специально упомянул, что приобретение опыта было необходимым. На этом разговор о вреде включения избыточных возможностей и о пользе прагматического подхода можно считать исчерпанным. Возможность включения автоматического сборщика мусора несколько раз рассматривалась и до 1985 г., но была признана неподходящей для языка, который использовался в системах реального времени, и для программирования низкоуровневых системных задач, вроде написания драйверов аппаратных устройств.
В те дни сборщики мусора были не такими совершенными, как сейчас, а нынешние мощности процессоров и обьем памяти просто несравнимы с прежними. Личный опыт работы с 5!пш!а и отчеты о других системах, где имеется сборка мусора, убедили меня, что эта технология неприемлема в системах, которые разрабатывали я и мои коллеги. Ксли бы в определении С ту(тй С!аьвез (и даже С++) требовалось наличие автоматической сборки мусора, то язык был бы более изящным, но «мертворожденным», Обсуждалась и прямая поддержка параллельности, но я отказался от этой идеи в пользу библиотечной реализации (см. раздел 2Л).
ИВИИИИИВ Язык С втг1Ф С1аввев 2.14. Рабочая обстановка С ту1гЬ С!ахваз был спроектирован и реализован в рамках исследовательского проекта в Центре исследований по вычислительной технике компании Вей?лЬэ. Для такой работы этот центр предоставлял — и до сих пор предоставляет — уникальную обстановку. Здесь мне предложили «заняться чем-нибудь любопытным», выделили достаточные компьютерные ресурсы, всячески поощряли общение с интересными и знающими людьми и дали год па то, чтобы представить на рассмотрение плоды своих трудов. Одной из составляющих корпоративной культуры Центра было предубеждение против «больпшх замыслов», требующих более одного-двух человек, против «грандиозных планов», в том числе передачи непроверенных бумажных проектов для реализации другим людям, и против разделения на проектировщиков и копировщиков.
Если вам это по душе, то и в Ве!1 ЕаЬж и в других местах вы найдете немало возможностей для приложения сил. Однако в Центре исследований по вычислительной технике прямо требовалось, чтобы вы (если це заняты теоретическими исследованиями) лично реализовывали задуманное, воплощали свои идеи и находили пользователей, которым зто пригодилось бы. Обстановка очень способствовала такой работе, в Вей 1лЬз было достаточно творческих людей, хватало и вопросов, ждущих своего решения. Поэтому я считал себя вправе написать так [8ггоцэггцр, 19861: «Никогда не существовало дизайна С++ на бумаге; проектирование, документирование и реализация проходили одновременно. Естественно, внешний интерфейс С++ написан на С++ Не было никогда ни «проекта С++», ни «комитета по проектированию С++».
Только после признания данного языка начали возникать обычные организационные структуры, но даже тогда именно я официально отвечал за справочное руководство, за мной было последнее слово по поводу всего, что в него включалось. Так продолжалось до начала 1990 г., когда эта обязанность была передана комитету АХ81 по С++. Как председатель рабочей группы по расширениям в составе комитета по стандартизации, я по-прежнему несу прямую ответственность за все новшества в С++ (см. раздел 6А).
С другой стороны, лишь несколько первых месяцев я мог заниматься дизайном просто нз эстетических соображений и вносить в язык произвольные изменения. Позже каждое языковое средство необходимо было формально реализовывать, а любое изменение или добавление требовали нс просто согласия, а чаще всего энергичного одобрения со стороны основных пользователей С цг!1Ь С!аззез, а потом и С++.
Поскольку никакого гарантированного сообщества пользователей не было, то сам язык и компилятор могли выжить только при условии, если бы понравились пользователям настолько, чтобы те устояли перед естественной тягой к проверенным временем языкам и не поддались рекламным обещаниям относительно новых. Даже мельчайшая несовместимость должна была компенсироваться куда большей выгодой для пользователей, поэтому серьезные несовместимости не вводились в язык даже в начале его существования. Поскольку пользователь склонен считать серьезной любую несовместимость, я оставлял только такие, без которых было никак не обойтись.
И только при переходе от С ту)й С1аэзеэ к С++ было решено пойти на то, что многие старые программы перестанут работать. Рабочая обстановка ПИИИИИИП Отсутствие формальной организационной структуры, крупномасштабной поддержки — финансовой, кадровой, маркетинговой — более чем компенсировалось неформальной помощью со стороны моих коллег и единомышленников из Центра исследований по вычислительной технике и той защитой от нетехнических требований со стороны организаций, курирующих разработки, которую обеспечила мне администрация Центра.
Если бы не помощь и дружеская критика сотрудников Центра, дизайн С++ уступил бы веяниям моды и интересам отдельных групп, а его реализация увязла бы в бюрократической трясине. Важно и то, что здминистрацня Ве!1 1лЬз создала такую обстановку, где не было нужды утаивать свои идеи ради личной карьеры. Наоборот, дискуссии всегда велись свободно и каждый извлекал из идей и мнений других пользу для себя. Жаль, что даже внутри компании Центр исследований по вычислительной технике — скорее, исключение, чем правило. С пчгЬ С1аззез развивался в ходе обсуждений с сотрудниками Центра и первыми пользователямн как внутри него, так и в других подразделениях Ве11 1лЬз. Я спроектировал меньшую часть С ийЬ С1аззез и С++, рождением большей мы обязаны многим другим специалистам.
Немало идей отвергалось, если они были чересчур сложными, малополезными, слишком трудными для реализации или для обучения, недостаточно эффективными с точки зрения быстроты действия или памяти, несовместимыми с С или просто странными. Реализовывалось лишь очень немногое, да и то после обсуждения не менее чем с двумя специалистами. Обычно в ходе работы, тестирования и использования идея видоизменялась. Новый вариант предлагался более широкой аудитории, затем еше немного модифицировался и, наконец, пролагал дорогу к официальной версии С пчгЬ С!аззез, поставляемой лично мной.
Важным инструментом проектирования считалось составление руководства, поскольку если что-то не удавалось легко объяснить, то и поддерживать было бы слишком утомительно. Я об этом никогда не забывал, потому что в то время, образно говоря, сам был центром технической поддержки. Значительное влияние на меня оказал Сэнди Фрэзер (Банду Егазег), начальник моего отдела. Так, я считаю, что именно он уговорил меня отказаться от определения классов в духе З1шп!а, где включается полное определение каждой функции, и перейти к стилю, подразумевающему, что определения функций находятся в другом месте, а за счет этого усилить роль объявления класса как интерфейса. Многое в С тч!гЬ С!аззез было сделано для того, чтобы упростить построение симуляторов, которые применялись в работе Сэнди Фрэзера по проектированию сетей.
Первым реальным приложением С пчгЬ С!аззез как раз и был такой симулятор сети. Еще одним из пользователей С тт!гЬ С!аззез, оказавшим немалое влияние на его развитие, был Садхир Агравал (Зпс1Ь1г Аягатга!), также занимавшийся моделированием сетей. В решении вопросов дизайна и реализации С пчгЬ С!аьвез часто принимал участие Джонатан Шопиро, который занимался «потоковой машиной баз данных». Дискуссии по общим вопросам языков программирования, не касающимся конкретных прикладных задач, я вел с Деннисом Ричи, Стивом Джонсоном и в особенности с Лугом Макилроем.
Влияние последнего на разработку С и С++ нельзя переоценить. Не помню ни одного по-настоящему важного проектного решения в С++, которое я бы обстоятельно не обсудил с этим человеком. Естественно, не ИИИИИИИИ Язык С вц!Ф С1аззез всегда мы соглашались друг с другом, но и по сию пору я очень неохотно принимаю решения наперекор мнению Макилроя. Почему-то выходит так, что он всегда оказывается прав и при этом обладает бездной знаний и терпения.