[Перевод] 30 лет С++

14 октября этого года состоялась одна из важнейших годовщин мира программирования – 30-летие языка C++. За это время он завоевал огромную популярность и до сих пор остаётся одним из самых востребованных и широко используемых языков программирования в мире.

В связи с этим юбилеем мы предлагаем вашему вниманию перевод интервью с основателем языка Бьёрном Страуструпом.

e8cbd8ea9a2f42d59d27d24769e81c78.png
Ровно 30 лет назад состоялся релиз CFront 1.0 и первый выпуск книги  «Язык программирования C++». Было ли важным выпустить их в один и тот же день?

Я не знаю, было ли это важным, но в то же время это было хорошей идеей. О том, какой день станет удачным для релиза, меня спрашивали и AT&T (компания, продающая компилятор), и Addison-Wesley (издатель книги). Я назвал 14 октября, поскольку должен был выступать на конференции Ассоциации по вычислительной технике США и мог бы представить его там.

Это сделало вас дважды автором и, возможно, потребовало вдвое больше работы. Но помогло ли написание книги разработать более хороший язык?

Это была необходимая книга. Крошечное, но постоянно растущее сообщество нуждалось в ней. Мысль написать эту книгу пришла даже не в мою голову. Эту идею мне подал Ал Ахо, впоследствии мой сосед в Bell Labs (Bell Labs — компания, как и AT&T). Я абсолютно недооценил объём работ над «Языком программирования С++». Писать на совершенно новую тему очень сложно. Я узнал многое о языке, пытаясь объяснить его людям. Я изменял С++, и объяснение становилось проще благодаря тому, что сам язык становился более логичным или более функциональным. Написание инструкции – очень хороший способ проектирования.

68652223982947d5b28ff8764f64f556.jpg

Вы помните, что чувствовали в тот понедельник, 14 октября 1985 года, когда представили свой семинар «Введение в C++»?

Нет, не помню. На самом деле, из того, что происходило в 1980-х, я помню сравнительно немного. Я был тогда очень занят. В период с 1979 по 1991 число программистов, использующих С++, удваивалось каждые 7,5 месяцев. Такой рост порождает очень большое количество работы. Сегодня количество пользователей С++ достигает 4.4 миллионов (согласно исследованию JetBrains). Это был важный для меня день, но единственное, что я помню, – это как я получал на руки первую копию моего первого издания.

Как вы тогда видели С++? Каким представляли его будущее?

Конечно, я не предполагал такого невероятного, временами взрывного роста языка. Я сконцентрировался на его улучшении, изучал написание библиотек,  улучшал компилятор и объяснял, как всем этим пользоваться.

С другой стороны, многое, что мы видим в С++ сегодня, уходит корнями в те дни. Классы, объявление функций (прототипы функций), конструкторы и деструкторы были частью самой первой версии. Пару лет спустя я добавил встраиваемые функции и перегруженный оператор присваивания. Тогда же появилось различие между инициализацией и присваиванием. Общая перегрузка операторов возникла позднее (1983 или около того), тогда же, когда и виртуальные функции. Люди часто забывают, что параметризованные типы данных были внедрены с самого начала. Я использовал Cfront с заголовком <generic.h>. В течение пары лет я думал, что для обобщённого программирования макросов будет достаточно. Я очень ошибался, зато был прав, считая, что нужно использовать параметризованные типы и функции с (другими) типами. Результатом этого стали шаблоны (1988).

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

Большая часть попыток разработать хороший язык программирования терпит неудачу. Каково было чувствовать, что всё больше и больше программ вокруг вас написаны на языке, созданном вами? И что, по вашему мнению, стало причиной такого успеха?

Радостно – и в то же время страшновато. Приятно чувствовать, что ты разработал что-то полезное для стольких людей, но это и огромная ответственность, особенно с развитием языка. Если мы добавляли удачные и полезные возможности — мы делали этот мир лучше, но стоило ошибиться — и вред был бы очень большим. И всё же я думаю, что доработка С++ была чередой улучшений. Не все идеи были удачными, но большая часть оказалась очень полезной для большинства, а провалы не были фатальными. С каждым годом С++ становился всё лучше. Сейчас С++ несравнимо более полезен, чем релиз  1.0, выпущенный в 1980. Мы можем писать более красивый код, и он работает быстрее (даже если учесть разницу в быстродействии оборудования).

Причина успеха? Их было много. Чтобы добиться успеха, язык должен быть достаточно хорошим во всём, что нужно пользователям, и при этом не должен быть провальным ни в чём. Недостаточно быть лучшим в мире в одной-двух вещах. В своей основе С++ был и остаётся нацеленным на критические задачи в системах, где производительность и доступ к оборудованию имеют критическое значение (так называемое системное программирование), и особенно системах, где необходимо управление сложностью. Во-вторых, С++ постоянно эволюционировал в соответствии с проблемами окружающего мира, он рос. Он никогда не был «башней из слоновой кости». В конце концов, мне кажется важным, что С++ никогда не жил за счёт рекламы: я давал относительно скромные обещания и сдерживал их.

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

Я неоднократно пытался выбраться из разработки С++, но он всегда затягивал меня обратно. Я чувствую, что работа над С++ — мой главный шанс сделать что-то стоящее. Таким образом, С++ — мой главный инструмент для исследования и разработки. Уроки, выученные мной и другими членами сообщества С++, внедряются в язык и библиотеки, где они могут помочь уже миллионам людей.

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

Что изменилось за 30 лет? Что осталось прежним?

Модель машины и стремление к большей поддержке абстракций остаются неизменными и такими же важными, как и всегда. Это же можно сказать и о внимании, которое уделяется статической (времени компиляции) системе  типов данных.

Использование исключений и шаблонов было значительно усовершенствовано, и теперь мы можем писать намного более красивый и функциональный код. И то, и другое появилось как возможные направления развития С++ в документе, который я написал для журнала IEEE Software в 1996 году. Исключения вместе с  конструкторами и деструкторами стали основой безопасного управления ресурсами (RAII). Шаблоны способствовали успешному развитию библиотеки STL Алекса Степанова и его идей обобщённого программирования. Буквально в этом году мы разработали прямую языковую поддержку концептов, чтобы  дополнить возможности шаблонов С++.

3ce1033c4d3d4607a0980b4a423e2f5e.jpg

В конце 1980х люди были помешаны на использовании иерархии классов. Меня же больше интересовало соединение различных стилей программирования в гармоничное целое. В первом издании своей книги я (преднамеренно) не употреблял термин «объектно-ориентированное программирование», а также давал выступления с названиями в духе  «С++ — это не просто объектно-ориентированный язык программирования». Позже публика проявила огромный интерес к шаблонному и мета-программированию, иногда забывая, что самое простое решение – часто самое лучшее. Я до сих пор ищу способ передать своё понимание элегантного программирования, основанного на синтезе особенностей языка и возможностей библиотек.

Ещё одна вещь, которая, по моему мнению, будет иметь большое значение в течение нескольких следующих лет – разработка гайдлайнов для инструментов и библиотек. Это поможет сообществу С++ намного быстрее осваивать новые возможности. Один совершенно новый аспект – это то, что мы сможем устранить висячие указатели, открывая возможности для программирования, абсолютно безопасного с точки зрения типов и управления ресурсами. В частности, мы устраняем все утечки ресурсов без сборщика мусора (потому что мы не производим мусора), так что нам не придётся сталкиваться с потерями производительности, хотя безопасность увеличивается. И мы не ограничиваем область применения С++.

Я надеюсь, что всё это поможет решить проблему, существовавшую в С++ всегда: недостаток обучения и понимания С++ даже среди людей, его использующих. С самого начала существовала тенденция описывать С++ как странную версию чего-то ещё. Например, до сих пор иногда говорят, что С++ — это «несколько новых фич, добавленных к С» или «небезопасный Java, в котором не хватает некоторых современных возможностей». Это наносит огромный вред распространению С++. Моя новая книга «Обзор С++» тоже может помочь. Я рассказываю всё о С++ и его стандартной библиотеке на довольно высоком уровне, при этом на меньшем количестве страниц, чем в книге Брайана Кернигана и Денниса Ритчи «Язык программирования Си» (также известна как K&R).  Моя книга рассчитана скорее на уже состоявшихся программистов, чем на новичков.

Через несколько дней комитет по С++ соберётся на Гавайских островах, чтобы обсудить работу над следующей крупной версией С++. Как, по вашему мнению, будет выглядеть С++17?

Думаю, более полное представление о том, на что будет похож С++17, у меня появится после собрания, которое состоится на следующей неделе в Коне [Гавайские острова]. Но я настроен (спокойно) и оптимистично. С++11 был большим достижением по сравнению с С++98, и я надеюсь, что С++17 будет таким же большим шагом вперёд по сравнению с С++11.

Например, я надеюсь увидеть:

  • концепты (уже есть спецификация ISO TS) для лучшего определения шаблонов
  • модули для более быстрой компиляции
  • улучшенный STL  с диапазонами (предложение Эрика Ниблера)
  • сопрограммы (предложение Гора Нишанова)
  • библиотеку по работе с сетью (предложение Криса Колхоффа)
  • лучшую поддержку многозадачного и параллельного программирования
  • и многое другое!


Перевод: http://blog.noveogroup.ru/post/132140074527/
Оригинал: http://cpp-lang.io/30-years-of-cpp-bjarne-stroustrup/

© Habrahabr.ru