Б. Страуструп - Дизайн и Эволюция C++. 2006, страница 8
Описание файла
DJVU-файл из архива "Б. Страуструп - Дизайн и Эволюция C++. 2006", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр DJVU-файла онлайн
Распознанный текст из DJVU-файла, 8 - страница
Я предпочитаю медленно — иногда очень медленно — убеждать людей попробовать новые приемы и принять на вооружение те, которые отвечают их нуждам и склонностям. Сушествуют эффективные методы «обрашсния в другую веру» и «совершения революции», но я нх боюсь и сильно сомневаюсь, что они так уж Немного об авторе книги 116 ИИИИИП эффективны в длительной перспективе и по большому счету. Часто, котла кого-то легко удается обратить в религию Х, последуюшее обращение в религию У оказывается столь же простым, а выигрыш от этого эфемерный.
Я предпочитаю скептиков «истинно верующим». Мелкий, но неопровержимый факт лля меня ценнее большинства теорий, а продемонстрированный экспериментально результат важнее груды логических аргументов. Такой взгляд на веши легко может привести к фаталистическому принятию згагпз ппо В конце концов, нельзя приготовить омлет, не разбив яиц, — многие люди просто не хотят меняться, если это неудобно для их повселневной жизни, или стремятся хотя бы отложить перемены «до понелельннка». Вот тут-то надо проявить уважение к фактам... и толику идеализма. Состояние дел в программировании, как и вообще в мире, далеко от идеала, и многое можно улучшить. Я проектировал С++, чтобы решить опрелеленную задачу, а не для того, чтобы что-то кому-то показать, и в результате язык оказался полезным. В основе его философии лежала убежденность, что улучшений можно добиться путем послеловательных изменений.
Конечно, хотелось бы поддерживать максимальный темп изменений, улучшающих благосостояние люлей. Но самое трудное — понять, в чем же состоит прогресс, разработать метолику постепенного перехода к лучшему и избежать эксцессов, вызванных чрезмерным энтузиазмом. Я готов упорно работать над внелрением в сознание плей, которые, по моему глубокому убеждению, принесут пользу людям. Более того, я считаю, что ученые и интеллектуалы должны способствовать распространению своих плей в обществе, чтобы они применялись людьми, а не оставались игрой изошренного ума. Однако я не готов жертвовать люльми во имя этих идей.
В частности, я не хочу навязывать единый стиль проектирования посредством узко определенного языка программирования. Мысли и действия людей настолько индивидуальны, что любая попытка привести всех к общему знаменателю принесет больше вреда, чем пользы. Поэтому С++ сознательно спроектирован так, чтобы поддержать различные стили, а не показать единственный «истипный путь». Принципы, которыми я руководствовался при проектировании С++, будут детально изложены в главе 4. Здесь вы обнаружите отголоски тех общих идей и идеалов, о которых говорилось только что.
Да, язык программирования — на редкость важная вещь, олнако это всего лишь крохотная часть реального мира и поэтому не стоит относиться к нему чересчур серьезно. Необходимо облапать чувством меры и — что еще важнее — чувством юмора. Среди основных языков программирования С++ — богатейший источник шуток и анекдотов. И это неслучайно. При обсуждении философских вопросов, равно как и возможностей языка легко скатиться на чрезмерно серьезный и нравоучительный тон.
Если так произошло со мной, примите извинения, но мне хотелось обьяснить свои интеллектуальные пристрастия, и лумаю, что это безвредно — ну, почти безврелно. Да, кстати, мои литературные вкусы не ограничиваются только произведениями вышеназванных авторов, просто именно они повлияли на создание С++. Глава 2. Язык С ~мИЬ С!аваев Специализация — это для насекомых. Р.А. Хайнлайн 2.1.
Рождение С алФ С!аыеь Работа над тем, что впоследствии стало языком С++, началась с попытки проанализировать ядро УЫ1Х, чтобы понять, как можно было бы распределить эту систему между несколькими компьютерами, соединенными локальной сетью. Этот эксперимент проходил в апреле 1979 г. в Центре исследований ~о вычислительной технике компании Вей 1.аЬогагопез в Мюррей Хилл, штат Пью-Джерси. Вскоре было выявлено две подзадачи: как проанализировать сетевой трафик, порожденный распределенностью ядра, и как разбить ядро на отдельные модули. В обоих случаях требовалось выразить модульную структуру сложной системы и типичные способы обмена информацией между модулями.
Задача была как раз из тех, к решению которых я зарекся приступать без соответствующих инструментов. Поэтому мне пришлось заняться разработкой подходящего инструментария в соответствии с критериями, выработанными в Кембридже. В октябре 1979 г. был готов препроцессор, который я назвал Срге. Он добавлял 81шп1а-подобные классы к С. В марте 1980 г.
препроцессор был улучшен настолько, что использовался в одном реальном проекте и нескольких экспериментальных. В моем архиве сохранилось упоминание о том, что к тому времени Срге работал на 16 системах. Самым важным элементом этих проектов была первая серьезная библиотека на С++, которая поддерживала многозадачное программирование с применением сопрограмм [Зггоцзггцр, 1980Ь], [Бггопзггцр, 1987Ь], [8Ьор1го, 1987]. Язык, подаваемый на вход препроцессора, получил название «С цпгЬ С!аззезм В период с апреля по октябрь я начал думать не об инструменте, а о языке, но С цпгЬ С!аваев все еще рассматривался как расширение С, позволяющее выразить концепции модульности и параллельности. Однако важнейшее решение уже было принято. Хотя поддержка параллельности и моделирования в духе 81шц1а и являлась основной целью С цпгЬ С!аззез, язык не содержал никаких примитивов для выражения параллельности.
Вместо этого была написана библиотека, поддерживающая необходимые стили параллельности. В ней использовалась комбинация наследования (иерархии классов) с возможностью определять функции-члены класса специального назначения, распознаваемые препроцессором. Обратите внимание на множественное число — «стили». Я считал — и считаю — особенно важным, чтобы с помощью языка можно было выразить несколько вариантов параллельной обработки. Есть множество приложений, которым параллельность необхолима, Рождение С чи!Мз С!азвев 1! ИИИВИИИ а преобладающей модели ее поддержки нет.
Поэтому в случаях, когда параллельность нужна, ее следует реализовывать в библиотеках или в специализированном расширении так, чтобы одна конкретная форма не запрещала использование других. Таким образом, на языке предлагались общие механизмы организации программ, а вовсе не поддержка конкретных предметных областей.
Именно это и сделало С ччгЬ С!аззез, позднее и С++, универсальным языком программирования, а не расширением С для специализированных приложений. Позже вопрос о выборе между поддержкой специализированных приложений и общим механизмом абстракций вставал неоднократно. И всякий раз принималось решение в пользу усовершенствования механизма абстракций.
Поэтому в С++ нет ни встроенных типов для комплексных чисел, строк и матриц, ни прямой поддержки параллельности, устойчивости объектов, ни распределенных вычислений, ни сопоставления образцов и манипуляций на уровне файловой системы.
Я упомянул лишь малую толику часто предлагавшихся расширений. Но существуют библиотеки, поддерживающие все эти возможности. Предварительное описание С пчгЬ С!аззез было опубликовано в виде технического отчета в Ве!1 1.аЬз в апреле 1980 г. [Бсгопзсгцр,1980) и в журнале 31ОР1 АХ Ь!ог!сез !81гоцзсгцр,1982!. Более подробный технический отчет АаИп8 С!аяез го Йе С Еиякиайе: Ап Ехегсие т Еапйиаяе Епо1игшп (Вггоцзггцр, 1980! напечатан в журнале Уо/Зваи: Ргасдсез апИЕхрепепсе. В данных работах заложена хорошая илея: описывать только те возможности, которые полностью реализованы и нашли применение. Такой подход соответствовал традициям Центра исследований по вычислительной технике компании Ве!! 1лЪогагог1ез.
Я отошел от подобной тактики только тогда, когда назрела необходимость большей открытости относительно будущего С++, чтобы в свободной дискуссии по поводу эволюции языка могли принять участие многочисленные пользователи, которые не работали в АТЛЕТ. С члгЬ С!аззез специально проектировался для обеспечения лучшей организации программ. Было решено, что с собственно явычислительной частью» С и так справляется. Я считал принципиальным такой аспект: улучшение структуры не может достигаться за счет падения производительности по сравнению с С. Язык С и!1Ь С!аззез не лолжен был уступать С во времени выполнения, компактности кода и данных. Однажды кто-то продемонстрировал систематическое трехпроцентное падение производительности новой версии по сравнению с С, вызванное наличием временных переменных, которые препроцессор С ъчгЬ С!аззез использовал в механизме возврата из функции.
Недочет был признан неприемлемым, и причину быстро устранили. Аналогично, чтобы обеспечить совместимость формата хранения с С и, следовательно, избежать накладных расходов по памяти, в объекты классов не помещались никакие чслужебныеь данные. Другой важной целью работы было стремление избежать ограничений на области использования С МгЬ С!аззез. Идеал (кстати, достигнутый) — С чпйЬ С!аззез может применяться везде, где использовался С. Отсюда следовало, что новая версия ни в коем случае не должна была уступать С в эффективности, но эта эффективность не могла достигаться за счет отказа от некоторых, пусть даже уродливых особенностей С.