Программирование >>  Полиморфизм без виртуальных функций в с++ 

1 ... 4 5 6 [ 7 ] 8 9 10 ... 144


Предыстория С++

Я изучал математику, в том числе прикладную, поэтому защищенная в Дании кандидатская диссертация была посвящена математике и информатике. В результате я научился любить красоту математики, но предпочитал смотреть на нее, как на инструмент решения практических задач. Я искренне сочувствовал студенту, которого Евклид, по преданию, выгнал за вопрос Но для чего нужна математика? Точно так же мой интерес к компьютерам и языка.м программирования носит в основном прагматический характер. Компьютеры и языки программирования можно оценивать как произведения искусства, по эстетические факторы должны дополнять и усиливать их полезные свойства, а не подменять их.

Больше 25 лет я увлекаюсь историей. Немалое время посвятил и изучению философии. Отсюда вполне осознанный взгляд на истоки моих интеллектуальных пристрастий. Если говорить о философских течениях, то мне, скорее, ближе эмпирики, чем идеалисты; мистиков я просто не понимаю. Поэто.му Аристотеля я предпочитаю Платону, Юма - Декарту, а перед Паскалем склоняю голову. Всеобъемлющие системы , такие, как у Платона или Канта, пленяют .меня, но кажутся фундаменталыю порочными, поскольку, по-моему, они очень далеки от повседневного опыта и особенностей конкретного индивидуума.

Почти фанатичный интерес Кьеркегора к личности и его тонкое понимание психологии кажутся мне куда интереснее грандиозных схем и заботы обо всем человечестве, присущих Гегелю или Марксу. Уважение к группе, не подразумевающее уважения к ее членам, я не считаю уважением вовсе. Корни многих решений для С++ - в моем нежелании принуждать пользователей делать что бы то ни было жестко определенным образом. Из истории мы знаем, что вина за многие ужасные трагедии лежит на идеалистах, которые пытались заставить людей делать так, чтобы им было хорошо . Кроме того, я считаю, что идеалисты склонны игнорировать неудобный опыт и факты, противоречащие их догмам или теории. Всякий раз, когда те или иные идеалы вступают в противоречие, а иногда и в тех ситуациях, где ученые мужи пришли к единодушному согласию, я предпочитаю давать программисту выбор.

Мои литературные вкусы еще раз подтверждают нежелание принимать решение только на основе теории и логики. В этом смысле С++ во многом обязан таким романистам и эссеистам, как Мартин А. Хансен, Альбер Камю и Джордж Оруэлл, которые никогда не видывали компьютера, и таким ученым, как Дэвид Грис, Дсг.альд Кнут и Роджер Нидэм. Часто, испытывая искушение запретить какую-то возможность, которая лично мне не нравилась, я останавливался, ибо не считал себя вправе навязывать свою точку зрения другим людям. Я знаю, что .многого можно добиться опюсителыю быстро, если последовательно придерживаться логики и безжалостно выносить приговор неправильно.му, устаревше.му и нелогичному образу мыслей . Но при такой модели становятся очень велики человеческие потери. Для меня на,много дороже принятие того факта, что люди думают и действуют по-разному.

Я предпочитаю медленно - иногда очень медленно - убеждать людей попробовать новые приемы и принять на вооружение те, которые отвечают их нуждам и склонностям. Существуют эффективные методы обращения в другую веру и совершения революции , но я их боюсь и сильно со.мневаюсь, что они так уж



Немного об авторе книги

эффективны в длительной перспективе и по большому счету. Часто, когда кого-то легко удается обратить в религию X, последующее обращение в религию Y оказывается столь же простым, а выигрыш от этого эфемерный. Я предпочитаю скептиков истинно верующи.м . Мелкий, но неопровержимый факт для .меня ценнее большинства теорий, а продемонстрирова1П1ЫЙ экспериментально результат важнее груды логических аргументов.

Такой взгляд на вещи легко может привести к фаталистическому принятию status quo В конце концов, нельзя приготовить омлет, не разбив яиц, - многие люди просто не хотят меняться, если это неудобно для их повседневной жизни, или стремятся хотя бы отложить перемены до понедельника . Вот тут-то надо проявить уважение к фактам... и толику идеализма.

Состояние дел в программировании, как и вообще в мире, далеко от идеала, и многое можно улучшить. Я проектировал С++, чтобы решить определенную задачу, а не для того, чтобы что-то кому-то доказать, и в результате язык оказался полезным. В основе его философии лежала убежденность, что улучшений можно добиться путем последовательных изменений. Конечно, хотелось бы поддерживать макси.мальный темп изменений, улучшающих благосостояние людей. Но са.мое трудное - понять, в чем же состоит прогресс, разработать методику постепенного перехода к лучшему и избежать эксцессов, вызванных чрез.мерным энтузиазмом.

Я готов упорно работать над внедрением в сознание идей, которые, по моему глубокому убеждению, принесут пользу людям. Более того, я считаю, что згченые и интеллектуалы должны способствовать распространению своих идей в обществе, чтобы они применялись людьми, а не оставались игрой изощренного ума. Однако я не готов жертвовать людьми во имя этих идей. В частности, я не хочу навязывать единый стиль проектирования посредством узко определенного языка программирования. Мысли и действия людей настолько индивидуальны, что любая попытка привести всех к обще.му знаменателю принесет больше вреда, чем пользы. Поэтому С++ сознательно спроектирован так, чтобы поддержать различные стили, а не показать единственный истинный путь .

Принципы, которыми я руководствовался при проектировании С++, будут детально изложены в главе 4. Здесь вы обнаружите отголоски тех общих идей и идеалов, о которых говорилось только что.

Да, язык программирования - на редкость важная вещь, однако это всего лишь крохотная часть реального мира и поэто.му не стоит относиться к нему чересчур серьезно. Необходимо обладать чувством .меры и - что еще важнее - чувством юмора. Среди основных языков программирования С++ - богатейший источник шуток и анекдотов. И это неслучайно.

При обсуждении философских вопросов, равно как и возможностей языка легко скатиться на чрезмерно серьезный и нравоучительный тон. Если так произошло со мной, примите извинения, но мне хотелось объяснить свои интеллектуальные пристрастия, и думаю, что это безвредно - ну, почти безвредно. Да, кстати, мои литературные вкусы не ограничиваются только произведениями вышеназванных авторов, просто именно они повлияли на создание С++.



Глава 2. Язык С with Classes

Специализация - это для насекомых.

РА. Хайнлайн

2.1. Рождение С with Classes

Работа над тем, что впоследствии стало языком С++, началась с попытки проанализировать ядро UNIX, чтобы понять, как можно было бы распределить эту систему между несколькими компьютерами, соединенными локальной сетью. Этот эксперимент проходил в апреле 1979 г. в Центре исследований по вычислительной технике компании Bell Laboratories в Мюррей Хилл, штат Нью-Джерси. Вскоре было выявлено две подзадачи: как проанализировать сетевой трафик, порожденный распределенностью ядра, и как разбить ядро на отдельные модули. В обоих случаях требовалось выразить модульную структуру сложной системы и типичные способы обмена информацией между модулями. Задача была как раз из тех, к решению которых я зарекся приступать без соответствующих инструментов. Поэтому мне пришлось заняться разработкой подходящего инструментария в соответствии с критериями, выработанными в Кембридже.

В октябре 1979 г. был готов препроцессор, который я назвал Срге. Он добавлял Simula-подобные классы к С. В марте 1980 г. препроцессор был улучшен настолько, что использовался в одном реальном проекте и нескольких экспериментальных. В моем архиве сохранилось упоминание о том, что к тому времени Срге работал на 16 системах. Самым важным элементом этих проектов была первая серьезная библиотека на С++, которая поддерживала многозадачное программирование с применением сопрограмм [Stroustrup, 1980b], [Stroustrup, 1987b], [Shopiro, 1987]. Язык, подаваемый на вход препроцессора, получил название С with Classes .

В период с апреля по октябрь я начал думать не об инструменте, а о языке, но С with Classes все еще рассматривался как расширение С, позволяющее выразить концепции модульности и параллельности. Однако важнейшее решение уже было принято. Хотя поддержка параллельности и моделирования в духе Simula и являлась основной целью С with Classes, язык не содержал никаких примитивов для выражения параллельности. Вместо этого была написана библиотека, поддерживающая необходимые стили параллельности. В ней использовалась комбинация наследования (иерархии классов) с возможностью определять функции-члены класса специального назначения, распознаваемые препроцессором. Обратите внимание на множественное число - стили . Я считал - и считаю - особенно важным, чтобы с помощью языка можно было выразить несколько вариантов параллельной обработки. Есть множество приложений, которы.м параллельность необходи.ма.



1 ... 4 5 6 [ 7 ] 8 9 10 ... 144

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика