Бьёрн Страуструп: Соединяя элегантность и скорость
Бьёрн Страуструп хотел того, что на бумаге звучало как противоречие: языка, на котором он мог бы писать программы «такие же элегантные, как программы на Simula, но такие же эффективные, как программы на C». Simula была медленной и академичной; C был быстрым и беспощадным. Страуструп потратил следующие четыре десятилетия на то, чтобы доказать, что это противоречие было лишь кажущимся, и в процессе создал язык, на котором до сих пор работают операционные системы, браузеры, игровые движки и торговые площадки по всему миру.
Начало в рабочем классе в Орхусе
Страуструп родился 30 декабря 1950 года в Орхусе, Дания, в семье рабочего класса и с 1969 по 1975 год изучал математику с упором на информатику в Орхусском университете. Затем он отправился в Кембриджский университет для получения докторской степени по информатике, которую завершил в 1979 году под руководством Дэвида Уиллера, сосредоточившись на распределенных вычислениях. Именно в Кембридже, под влиянием Кристена Нюгора — одного из двух изобретателей Simula и самой объектно-ориентированного программирования, — Страуструп впитал идеи о классах, наследовании и абстракции, которые определят дело всей его жизни. Он говорил, что знакомство с выразительной мощью Simula в сочетании с разочарованием от того, насколько непрактично медленно она работала, породило ту конкретную проблему, для решения которой был создан C++.
Bell Labs и рождение «C with Classes»
В 1979 году Страуструп присоединился к Центру исследований в области компьютерных наук Bell Labs компании AT&T в Мюррей-Хилле, штат Нью-Джерси — той самой исследовательской культуре, которая породила Unix и сам язык C. Там он начал расширять C классами в стиле Simula, первоначально назвав результат «C with Classes». Внутреннее справочное руководство для того, что позже будет переименовано в C++, появилось в 1984 году, а коммерческий выпуск языка состоялся в 1985 году, в том же году, когда Страуструп опубликовал первое издание книги «Язык программирования C++», которая выдержала четыре издания и была переведена на двадцать один язык. Он намеренно создал C++ как расширение C, а не как язык с чистого листа, — решение, которое стоило ему некоторой теоретической чистоты, но обеспечило немедленную совместимость с огромной существующей кодовой базой и инструментарием. Это был прагматичный компромисс, который больше всего повлиял на скорость распространения языка. Впоследствии он возглавлял отдел исследований крупномасштабного программирования в Bell Labs компании AT&T с момента его создания до конца 2002 года, а в 1993 году был назначен научным сотрудником Bell Labs, а в 1996 году — научным сотрудником AT&T.
Что на самом деле добавил C++
C++ добавил к C статическую систему типов, которая относилась к пользовательским типам с той же серьезностью, что и к встроенным, объектно-ориентированное программирование, основанное на классах и наследовании Simula, и — в более позднем и, возможно, более влиятельном шаге — обобщенное программирование с помощью шаблонов, позволяющее писать код один раз и специализировать его для многих типов без ущерба для скорости. Его идиома управления ресурсами, RAII (получение ресурса есть инициализация), связывала время жизни ресурса со временем жизни объекта через конструкторы и деструкторы — паттерн, который решил класс ошибок памяти и утечек ресурсов, мучивших программистов на C годами, и который позже повлиял на дизайн управления ресурсами в языках со сборкой мусора. Важно отметить, что все это не было достигнуто ценой прямого доступа C к оборудованию и ресурсам операционной системы — половина амбиций Страуструпа, касающаяся эффективности, никогда не приносилась в жертву ради половины, касающейся элегантности.
Двадцать вопросов, восемь минут на часах и процентиль, измеренный по всем, кто его проходил. Без регистрации.
Пройти тест IQ →Управление языком через стандартизацию
Страуструп не просто изобрел C++ и ушел. Он был одним из основателей комитета по стандартизации ANSI в 1989 году и последующего комитета ISO в 1991 году, и в течение двадцати четырех лет возглавлял рабочую группу комитета по эволюции — орган, который проверяет каждое предлагаемое дополнение к языку. Это необычно долгий срок управления для создателя любого языка программирования, и это означало, что Страуструп лично формировал то, как C++ впитывал десятилетия новых требований, от поддержки параллелизма до метапрограммирования во время компиляции, не ломая при этом огромный массив существующего кода на C++, который уже работал в производстве.
Академическая и промышленная карьера после Bell Labs
После Bell Labs Страуструп перешел в Техасский университет A&M в 2002 году на должность профессора кафедры инженерного дела, а в 2011 году стал заслуженным профессором университета. В 2014 году он присоединился к Morgan Stanley в качестве технического сотрудника и управляющего директора, одновременно занимая должность приглашенного профессора в Колумбийском университете, а с 2022 года является профессором информатики в Колумбийском университете — необычный поворот в конце карьеры, который поставил изобретателя системного языка в центр технологий торговой фирмы с Уолл-стрит.
Награды и признание
Награды Страуструпа отражают его огромное влияние, а не какой-то один прорыв: премия Грейс Мюррей Хоппер от ACM в 1993 году, избрание членом ACM и IEEE в 1994 году, премия Уильяма Проктера за научные достижения в 2005 году (первый ученый-компьютерщик, получивший ее), медаль Фарадея IET в 2017 году и премия Чарльза Старка Дрейпера в 2018 году «за концептуализацию и разработку языка программирования C++». Музей компьютерной истории признал его членом в 2015 году, отметив его заслуги в «выводе объектно-ориентированного и обобщенного программирования в мейнстрим». Он не получал премию Тьюринга ACM.
Почему Бьёрна называют гением
Аргумент в пользу того, чтобы назвать Страуструпа гением, не опирается на один-единственный акт теоретической оригинальности — объектная ориентация пришла от Нюгора и Даля, обобщенное программирование имело прецеденты, а C уже существовал. Он опирается на более редкий вид инженерного суждения: способность объединять идеи, которые, как считалось в этой области, находятся в противоречии, не разрушая ни одну из них, и продолжать правильно делать этот компромисс на протяжении четверти века решений по стандартизации, пока сама вычислительная техника менялась под языком. В цитировании премии Дрейпера ему приписывают «концептуализацию и разработку» C++ — языка, который признает синтез, а не чистое изобретение. Честный контраргумент существенен: C++ широко критикуют, в том числе внутри отрасли, за его накопленную сложность, за то, что он подвергает программистов ловушкам безопасности памяти, которые более новые языки, такие как Rust, были явно разработаны для устранения, и за проектные компромиссы, которые восходят непосредственно к основополагающему решению Страуструпа оставаться обратно совместимым с C. Его гениальность, если это слово применимо, ближе к мастерству и управлению — созданию чего-то чрезвычайно полезного и несовершенного, а затем поддержанию этого в течение сорока лет, — чем к вспышке чистого абстрактного озарения.
Наследие
C++ остается фундаментальным для операционных систем, браузеров, игровых движков и систем финансовой торговли, и его влияние заметно прослеживается в Java, C# и Rust. Собственная оценка Страуструпом дела всей своей жизни всегда была характерно несентиментальной: он создал инструмент, предназначенный для использования, и по этому критерию — чистой, десятилетней повсеместности — C++ оказался успешнее почти любого другого языка программирования в истории.

