Перевод статьи "Интервью Бьярна Страустрапа"
A-Z Языков программирования: C ++
Bjarne Stroustrup C ++ известность анализирует историю его знаменитого языка программирования
Naomi Hamilton 25/06/2008 21:50:12
Computerworld предпринимает ряд исследований в наиболее широко используемые языки программирования. Ранее мы говорили с Альфредом v. Aho известности AWK, S. Tucker Taft на Аде 1995 и пересмотры 2005, Microsoft о ее ГАДЮКЕ двигателя подлинника стороны сервера, Chet Ramey о его опыте, поддерживающем Удар, и Чарльза H. Moore о проекте и развитии Дальше.
В этом интервью мы болтаем к Bjarne Stroustrup C ++ известность о проекте и развитии C ++, коллекция мусора и роль лицевых волос в успешных языках программирования. Stroustrup в настоящее время - Колледж Технического Профессора Стула и Информатики в Техасе Университет A&M, и является товарищем лабораторий AT&T.
Что вызвало развитие C ++?
Я нуждался в инструменте для проектирования и осуществления распределенной версии ядра Unix. В то время, 1979, никакой такой инструмент не существовал. Я нуждался кое в чем, что могло выразить структуру программы, дело непосредственно с аппаратными средствами, и быть достаточно эффективным и быть достаточно портативным для серьезного программирования систем.
Вы можете найти больше подробной информации о проекте и развитии C ++ в моем HOPL (История Языков программирования) бумаги, которые Вы можете найти на моих домашних страницах, и в моей книге "Проект и Развитие C ++".
Была специфическая проблема, которую Вы пытались решить?
Две проблемы, которые всовывают мой ум, состояли в том, чтобы моделировать инфраструктуру коммуникации межпроцесса для системы распределенной или совместно используемой памяти (чтобы определить, какими услугами OS мы могли позволить себе управлять на отдельных процессорах), и [потребность], чтобы написать водителям сети для такой системы. Очевидно - так как Unix был написан в C - я также хотел высокую степень совместимости C. Очень рано, 1980 вперед, это использовалось другими людьми (помогший мной) для моделирований различных протоколов сети и алгоритмов организации дорожного движения.
Где делает название C ++, прибывают из?
Как "C с Классами" (мой предок к C ++) стал популярным в пределах Bell Labs, некоторые люди нашли, что название слишком много полного рта и начало называть это C. Это означало, что они должны были квалифицировать то, что они подразумевали, когда они хотели обратиться к языку Денниса Ritchie''s, таким образом они использовали "Старый C", "Прямо C", и такой. Кто - то нашел это непочтительным к Деннису (ни Деннис, ни я чувствовал, что) и однажды я получил "запрос" хотя каналы управления Bell Labs, чтобы найти лучшее название. В результате мы упомянули C ++ как C84 некоторое время. Это не делало много хорошего, таким образом я расспросил тут и там для предложений и выбрал C ++ от получающегося списка. Все согласились, что семантически ++ C будет еще лучше, но я думал, что создаст слишком много проблем для невыродков.
Были ли какие-нибудь особенно трудные или расстраивающие проблемы, которые Вы должны были преодолеть в развитии языка?
Партии! Для стартеров, каковы должны быть фундаментальные правила проекта для языка? Что должно быть на языке и что должно быть не учтено? Большинство людей требует крошечный язык, обеспечивающий каждую особенность, которую они когда-либо находили полезным на любом языке. К сожалению, это невозможно.
После короткого периода доверия удаче и хорошему вкусу, я завещал ряду "эмпирических правил", предназначенных, чтобы гарантировать, что программы в C ++ могли быть одновременно изящными (как в Simula67, язык, который вводил ориентированное на объект программирование), и эффективный для программирования систем (как в C). Очевидно, не каждая программа может быть оба, и многие ни один не, но намерение было (и), что компетентный программист должен быть в состоянии выразить примерно любую идею непосредственно и выполнить ее с минимальными накладными расходами (нулевые накладные расходы по сравнению с версией C).
Убеждение программного сообщества систем ценности проверки типа было удивительно трудно. Идее проверить аргументы функции против декларации функции отчаянно сопротивлялись многие - по крайней мере, пока C не принял идею от C с Классами.
В эти дни, ориентированное на объект программирование примерно всюду, таким образом твердо для людей полагать, что я в основном был не в состоянии убедить людей о, это - полезность, пока я наконец только не вставил действительные функции и продемонстрировал, что они были достаточно быстры для того, чтобы требовать использование. C ++ ''s вариант ООП был (и), в основном тот из Simula с некоторыми упрощениями и ускорениями.
C совместимость был (и), главный источник и проблем и сил. Будучи C совместимый, C ++ программисты гарантировались законченность особенностей, которая часто отсутствует в первых выпусках новых языков и прямая (и эффективная) доступ к большому количеству кодекса - не только C кодекс, но также и кодекс ФОРТРАНа и больше потому что C запрос соглашений был прост и подобен тому, что поддерживали другие языки. В конце концов, я имел обыкновение говорить, снова использовать запуски при использовании кое-чего, что уже существует, вместо того, чтобы ждать кого-то развивающего новые компоненты предназначал для повторного использования. С другой стороны, у C есть много синтаксических и семантических причуд и удержания жестко регламентированного с C, поскольку это развилось, не было легко.
Каковы главные различия между оригинальным C с Классами и C ++?
Большинство различий было в технике выполнения. C с Классами был осуществлен препроцессором, тогда как C ++ требует надлежащего компилятора (таким образом я написал один). Было легко расшифровать C с программами Классов в C ++, но языки не были на 100 % совместимы. С языковой точки зрения главное усовершенствование было условием действительных функций, которые позволили классическое ориентированное на объект программирование. Перегрузка (включая оператор, перегружающий), была также добавлена, поддержана лучшей поддержкой inlining. Это может стоить отмечать, что ключ C ++ особенности общего управления ресурсом, конструкторов и печей для сжигания отходов производства, был в самой ранней версии C с Классами. С другой стороны, шаблоны (и исключения) были введены в немного более поздней версии C ++ (1989); перед этим мы прежде всего использовали макроопределение, чтобы выразить родовые программные идеи.
Вы сделали бы что-нибудь по-другому в развитии C ++, если у Вас был шанс?
Этот общий вопрос немного несправедлив из-за курса, у меня не было льгот почти 30 лет опыта с C ++ тогда, и большая часть того, что я знаю, теперь результат экспериментирования с более ранними версиями C ++. Кроме того, у меня не было по существу никаких ресурсов тогда (только меня - время части) так, если я грандиозно предположу (правильно), что действительные функции, шаблоны (с "понятиями", подобными, ко что C ++ 0x предложения), и исключения, сделали бы C ++ 85 намного лучший язык, то я буду предлагать не только кое-что, что я не знал, как проектировать в начале 1980-ых но также и кое-чего, что - если я волшебно обнаружил, прекрасный проект - возможно, не был осуществлен в разумное время.
Я думаю, что отгрузка лучшей стандартной библиотеки с C ++ 1.0 в 1985 была бы едва выполнима и будет самым существенным усовершенствованием в течение времени. "Лучшей библиотекой" я подразумеваю один с библиотекой классов фонда, которые включали немного улучшенную версию (тогда доступный и отправляющий) библиотека задачи для поддержки параллелизма и ряда контейнерных классов. Отгрузка тех поощрила бы развитие улучшенных версий и установила бы культуру использования стандартных библиотек фонда, а не корпоративных.
Позже, я развил бы шаблоны (ключ к C ++ разрабатывают родовое программирование) перед многократным наследованием (не столь главная особенность, как некоторые люди, кажется, рассматривают это), и подчеркнутые исключения больше. Однако, "исключения" снова обостряет проблему непредусмотрительности. Некоторые из самых важных понятий, лежащих в основе современного использования шаблонов на C ++, не существовали до немного позже. Например использование "гарантий" в описании безопасного и систематического использования шаблонов было только развито во время стандартизации C ++, особенно Дейвом Abrahams.
|