|
Программирование >> Полиморфизм без виртуальных функций в с++
2.14. Рабочая обстановка С with Classes был спроектирован и реализован в рамках исследовательского проекта в Центре исследований по вычислительной технике компании Bell Labs. Для такой работы этот центр предоставлял ~ и до сих нор предоставляет ~ уникальную обстановку. Здесь мне предложили заняться чем-нибудь любопытным , выделили достаточные компьютерные ресурсы, всячески поощряли общение с интересными и знающими людьми и дали год на то, чтобы представить на рас-СлМотрение плоды своих трудов. Одной из составляющих корпоративной культуры Центра было предубеждение против больип1х замыслов , требуюпщх более одного-двух человек, против грандиозных планов , в том числе передачи непроверенных бумажных проектов для реализации другим людя.м, и против разделения на проектировщиков и кодировщиков. Если вам это по душе, то и в Bell Labs, и в других местах вы найдете немало возможностей для приложения сил. Однако в Центре исследований по вычислительной технике прямо требовалось, чтобы вы (если пе заняты теоретическими исследованиями) лично реализовывали задуманное, воплощали свои идеи и находили пользователей, которым это пригодилось бы. Обстановка очень способствовала такой работе, в Bell Labs было достаточно творческих людей, хватало и вопросов, ждущих своего решения. Поэтому я считал себя вправе написать так [Stroustrup, 1986]: Никогда не существовало дизайна С++ но бумаге; проектирование, документирование и реолизоция проходили одновременно. Естественно, внешний интерфейс С++ написан но С++. Не было никогда ни проекта С++ , ни комитета по проектированию С++ . Только после признания данного языка начали возникать обычные организационные структуры, но даже тогда именно я официально отвечал за справочное руководство, за мной было последнее слово по поводу всего, что в него включалось. Так продолжалось до начала 1990 г., когда эта обязанность была передана комитету ANSI по C-I-+. Как председатель рабочей группы по расширениям в составе комитета по стандартизации, я по-прежнему несу прямую ответственность за все новшества в С++ (см. раздел 6.4). С другой стороны, лишь несколько первых месяцев я мог заниматься дизайном просто из эстетических соображений и вносить в язык произвольные изменения. Позже каждое языковое средство необходимо было фор.мально реализовывать, а любое изменение или добавление требовали не просто согласия, а чаще всего энергичного одобрения со стороны основных пользователей С with Classes, а потом и С++. Поскольку никакого гарантированного сообщества пользователей не было, то сам язык и компилятор могли выжить только при условии, если бы понравились пользователям настолько, чтобы те устояли перед естественной тягой к проверенным временем языкам и не поддались рекламным обещаниям относительно новых. Даже мельчайшая несовместимость должна была компенсироваться куда большей выгодой для пользователей, поэтому серьезные несовместимости не вводились в язык даже в начале его существования. Поскольку пользователь склонен считать серьезной любую несовместимость, я оставлял только такие, без которых было никак не обойтись. И только при переходе от С with Classes к С++ было решено пойти на то, что многие старые програ.ммы перестанут работать. Отсутствие формальной организационной структуры, крупномасштабной поддержки - финансовой, кадровой, маркетинговой - более чем компенсировалось неформальной помощью со стороны моих коллег и единомышленников из Центра исследований по вычислительной технике и той защитой от нетехнических требований со стороны организаций, курирующих разработки, которую обеспечила мне администрация Центра. Если бы не помощь и дружеская критика сотрудников Центра, дизайн C-i-i- уступил бы веяниям моды и интересам отдельных групп, а его реализация увязла бы в бюрократической трясине. Важно и то, что администрация Bell Labs создала такую обстановку, где не было нужды утаивать свои идеи ради личной карьеры. Наоборот, дискуссии всегда велись свободно и каждый извлекал из идей и мнений других поль.зу для себя. Жаль, что даже внутри компании Центр исследований по вычислительной технике - скорее, исключение, чем правило. С with Classes развивался в ходе обсуждений с сотрудниками Центра и первыми пользователями как внутри него, так и в других подразделениях Bell Labs. Я спроектировал меньшую часть С with Classes и С-1-+, рождением большей мы обязаны .многи.м другим специалистам. Не.мало идей отвергалось, если они были чересчур сложнььми, малополезными, слишко.м трудными для реализации или для обучения, недостаточно эффективными с точки зрения быстроты действия или памяти, несовмести.мыми с С или просто странными. Реализовывалось лишь очень немногое, да и то после обсуждения не .менее чем с двумя специалистами. Обычно в ходе работы, тестирования и использования идея видоизменялась. Новый вариант предлагался более широкой аудитории, затем еще немного модифицировался и, наконец, пролагал дорогу к официальной версии С with Classes, поставляемой лично мной. Важным инструментом проектирования считалось составление руководства, поскольку если что-то не удавалось легко объяснить, то и поддерживать было бы слишком утомительно. Я об этом никогда не забывал, потому что в то время, образно говоря, сам был центро.м технической поддержки. Значительное влияние на меня оказал Сэнди Фрэзер (Sandy Eraser), начальник моего отдела. Так, я считаю, что именно он уговорил меня отказаться от определения классов в духе Simula, где включается полное определение каждой функции, и перейти к стилю, подразумевающему, что определения функций находятся в другом месте, а за счет этого усилить роль объявления класса как интерфейса. Многое в С with Classes было сделано для того, чтобы упростить построение си-муляторов, которые применялись в работе Сэнди Фрэзера но проектированию сетей. Первым реальным приложением С with Classes как раз и был такой симулятор сети. Еще одним из пользователей С with Classes, оказавшим немалое влияние на его развитие, был Садхйр Агравал (Sudhir Agrawal), также занимавшийся моделированием сетей. В решении вопросов дизайна и реализации С with Classes часто принимал участие Джонатан Шопиро, который занимался потоковой машиной баз данных . Дискуссии по общи.м вопросам языков профаммирования, не касающимся конкретных прикладных задач, я вел с Деннисом Ричи, Стивом Джонсоном и в особенности с Дугом Макилроем. Влияние последнего на разработку С и C+-I- нельзя переоценить. Не помню ни одного по-настоящему важного проектного решения в С++, которое я бы обстоятельно не обсудил с этим человеком. Естественно, не всегда мы соглашались друг с другом, но и по сию пору я очень неохотно принимаю решения наперекор мнению Макилроя. Почему-то выходит так, что он всегда оказывается прав и при этом обладает бездной знаний и терпения. Поскольку С with Classes и С++ проектировались в основном на доске, то обсуждение всегда фокусировалось на типичных проблемах: небольших примерах, иллюстрирующих характерные особенности большого класса задач. Поэто.му хорошее решение небольшого примера очень помогало при написании програ.мм для реальных аналогичных задач. В С with Classes самы.м главным считался класс task, положенный в основу библиотеки для поддержки .многозадачности в духе Simula. Другими важными классами были queue, list и histogram. Классы queue и list базировались на идее, заимствованной из Simula, о классе link, от которого пользователи производили собственные классы. При таком подходе есть опасность создать язык и инструментарий для изящного решения небольших специально подобранных примеров, которые нельзя масштабировать для построения законченных систем или больших программ. Но такая нежелательная возможность нейтрализовалась тем простым фактом, что С with Classes с самого начала должен был быть самоокупаемым. А стало быть, он не мог выродиться во что-то изящное, но бесполезное. Работая в тесном контакте с пользователями, я привык обещать только то, что был в состоянии сделать. Я не мог себе позволить надавать столько обещаний, чтобы организация в конце концов сочла разумны.м выделить достаточно ресурсов для разработки, сопровождения и маркетинга продукта .
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |