|
Программирование >> Полиморфизм без виртуальных функций в с++
Глава 3. Рождение С++ Никакие узы не связывают крепче, чем узы наследования. Стивен Джей Гоулд 3.1. От С with Classes к С++ в 1982 г. мне стало ясно, что С with Classes стал средним языком и останется таким до самой своей кончины. Средний язык я определил следующим образом: продукт достаточно полезен, чтобы окупить себя и своего разработчика, но не настолько привлекателен, чтобы окупить организацию формальной технической поддержки и разработки. Стало быть, продолжение работы над С with Classes и его реализацией на базе препроцессора С обрекало меня на бесконечное сопровождение. Из этой ситуации я видел только два выхода: □ прекратить поддержку С with Classes, перестать работать с пользователями, а себя освободить для новой деятельности; □ на основе опыта работы над С with Classes разработать новый - лучший -язык, который привлек бы достаточно пользователей, чтобы окупить организацию центра поддержки и разработки, и самому опять же заняться чем-то другим. В то время необходимым миниму.мом я считал 5 тыс. пользователей. Третья возможность - увеличение числа пользователей за счет маркетинговых мероприятий (читай, хвастливой рекламы) - мне никогда не приходила в голову. На деле же случилось так, что взрывной рост популярности С++ (так был назван новый язык) потребовал всего моего времени, так что и по сей день я не сумел переключиться на что-нибудь значительное. Думается, что своим успехом С++ обязан тому, что здесь были четко выдержаны поставленные цели проектирования: язык действительно помог структурировать большой класс программ гораздо лучше, че.м С, не жертвуя при этом эффективностью и не требуя такой культурной перестройки, которая сделала бы его неприемле.мым для организаций, неохотно идущих на большие перемены. Его успех был частично офаничен недостатком новых по сравнению с С воз.можностей, атакже технологией реализации (использование препроцессора). В С with Classes не было предусмотрено достаточной поддержки для людей, готовых потратить значительные усилия в надежде получить адекватный результат. С with Classes был шагом в правильном направлении, но только одним маленьким шажком. Придя к таким выводам, я начал проектировать улучшенный и расширенный язык, который должен был прийти на смену С with Classes. На этот раз я решил реализовать его в виде нормального компилятора. Новый язык поначалу продолжал именоваться С with Classes, но после вежливой просьбы руководства получил название С84. Причиной переименования было то, что пользователи стали называть С with Classes сначала новым С , а потом и просто С. Из-за этого настоящий С низвели до чистого С , простого С и старого С . Последнее название было особенно обидным, поэтому естественная вежливость и желание избежать путаницы заставили меня искать новое имя. Имя С84 продержалось всего несколько месяцев отчасти из-за того, что было некрасиво и слишком официально, а отчасти потому, что путаница все равно возникла бы, если бы люди стали опускать 84 . К тому же и Ларри Рослер (Larry Rosier), редактор комитета ANSI X3J lino стандартизации С, попросил меня придумать другое название. Он объяснил, что стандартизованные языки часто официально именуют, прибавляя к собственному названию языка год принятия стандарта, поэтому всех будет сбивать с толку то, что надмножество (С84, известный также под именем С with Classes, позже С++) имеет номер меньший, чем подмножество (С, возможно, С85, позже ANSI С) . Это замечание показалось мне весьма разумным, хотя Ларри оказался излишне оптимистичен на счет даты принятия стандарта С, и я призвал сообщество пользователей С with Classes подыскать другое название. Я выбрал для нового языка имя С++, поскольку оно было коротким, имело симпатичные интерпретации и не содержало прилагательных к С , -н-н в зависимости от контекста можно прочесть как следующий или увеличить , хотя обычно произносят плюс плюс . Предложил это название Рик Маскитти (Rick Mascitti). Впервые я употребил сочетание С++ в декабре 1983 г. в процессе работы над окончательным редактированием статей [Stroustrup, 1984] и [Stroustrup, 1984с]. Буква С в С++ имеет длинную историю. Разумеется, это название языка, созданного Деннисом Ричи. Непосредственным предшественником С был язык В - интерпретируемый потомок BCPL, который спроектировал Кен Томпсон. Создателем BCPL был Мартин Ричарде из Кембриджского университета, а работал он над ним во время пребывания в Массачусетском технологическом институте. В свою очередь BCPL - это Basic CPL, а CPL - название довольно большого (для своего времени) и изящного языка программирования, совместной разработки кембриджского и лондонского университетов. До подключения к проекту лондонцев С было первой буквой от Cambridge , а потом официально расшифровывалось как Combined . Неофициально же С означало Christopher , поскольку именно Кристофер Стрейчи (Christopher Strachey) вдохновлял работы по CPL. 3.2. Цели С++ На протяжении периода с 1982 по 1984 гг. перед разработчиками С++ ставились все более честолюбивые и вместе с тем более определенные цели. Я начал смотреть на С++ как на язык, отличный от С. Предметом кропотливой работы стали библиотеки и инструментальные средства. По этой причине, а также из-за того, что разработчики инструментальных средств в Bell Labs начали проявлять интерес к С++, а я са.м полностью погрузился в работу над новым компилятором Cfront, необходимо было дать ответ на несколько ключевых вопросов: □ кто будет пользоваться языком? □ на каких системах будут работать пользователи? □ как прекратить заниматься написанием инструментальных средств? □ как на определении языка скажутся ответы на первые три вопроса? Что касается первой неясности, я полагал так: пользователя.ми будут мои друзья в Bell Labs и я сам, затем язык более широко распространится в AT&T, после идеями и инстру.ментарием заинтересуются университеты, наконец, AT&T и другие смогут зарабатывать на продаже того набора инструментов, который получится. В какой-то .момент первая, до некоторой степени экспериментальная реализация, сделанная мной, перестанет эксплуатироваться и будет заменена ко.мпилятором промышленного качества, разработанны.м AT&T и другими организациями. Это было разумно с практической и экономической точек зрения. Первая реализация (Cfront) не имела бы полного набора инструментальных средств, была бы переноси.мой и дешевой, поскольку в таком продукте нуждались и именно его могли себе позволить я, .мои коллеги и многие университеты. Воз.можности для создания лучшего инструментария и специализированных сред появились бы позже. Более развитые инструменты, предназначенные преимущественно для промышленных пользователей, необязательно должны были быть дешевыми, и плата за них окупила бы организацию технической поддержки, без чего невозможно представить широкое распространение языка. Как раз это и есть ответ па третий вопрос: Как мне перестать заниматься написанием инструментальных средств? . В основных чертах данная стратегия сработала. Но почти все детали оказались не такими, как я рассчитывал. Чтобы ответить на второй вопрос, я просто огляделся по сторонам - на каких системах реально использовался С with Classes? Практически на любых: от таких маленьких, что на них и компилятор-то не мог работать, до мейнфреймов и суперкомпьютеров. Среди ОС были и такие, о которых я даже не слыхивал. Отсюда следовали выводы, что высокая степень переносимости и возможность выполнять кросс-ко.мпиляцию абсолютно необходимы и что я не могу делать никаких предположений о раз.мере и быстродействии машин, на которых будет работать сгенерированный код. Однако для построения компилятора потребовались какие-то допущения о системе, используемой для разработки программ. Я предположил, что скорость действия будет не менее 1 MIPS (миллион команд в секунду), а память - не менее 1 Мб. Предположение достаточно рискованное, поскольку в то время многие потенциальные пользователи работали на разделяемой PDP11 или другой системе, ие слишко.м мощной или эксплуатируемой в режиме разделения вре.мени. Я не предвидел революции, вызванной пришествие.м персональных компьютеров, но получилось так, что Cfront, превзошедший намеченные показатели производительности, мог работать (правда, на пределе) даже на IBM PC/AT. Это
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |