# Бьерн Страуструп: «C++ — это инструмент для тех, кто хочет управлять реальностью»

Источник: https://www.youtube.com/watch?v=uTxRF5ag27A
Канал: Lex Fridman
Опубликовано: 07.11.2019

---

Бьерн Страуструп — человек, который определил облик современного цифрового мира, создав язык программирования C++. В беседе с Лексом Фридманом он размышляет о философии дизайна, эволюции абстракций и о том, почему в мире критических систем нет места «пушистому» и неточному коду.

## 🕰️ От суперэллипсов к системному мышлению: истоки
[[JUMP:01:32]]

Творческий путь Бьерна Страуструпа начался в университете со второй попытки изучения компьютерных наук [1:32]. Его первой программой на языке **Algol 60** был расчет формы суперэллипса с последующим выводом звездчатых паттернов на бумажный принтер [1:46]. Несмотря на знакомство с Fortran и Pascal, настоящий интерес у Страуструпа вызвали низкоуровневые материи: ассемблер и микрокод [2:39]. Именно работа с «железом» позволила ему оплатить магистерскую степень и сформировала понимание того, как работает машина.

Переломным моментом стало знакомство с языком **Simula**. По словам Страуструпа, именно в Simula были изобретены ключевые концепции объектно-ориентированного программирования (ООП):

*   Классы и наследование.
*   Runtime-полиморфизм.
*   Система типов, которая была строже, чем в Pascal, но при этом давала свободу расширения [3:23].

Страуструп отмечает, что создатели Simula — Кристен Нюгор и Оле-Йохан Даль — были математиками и мыслили категориями «множеств» и «классов», что и дало название основной сущности ООП [5:56]. Главный урок, который Бьерн вынес из Simula: программа может расти линейно по сложности, а не по квадрату её размера, если её правильно модуляризировать [3:40].

## 🧬 Краткая история языков через призму человека
[[JUMP:06:25]]

Рассматривая историю программирования, Страуструп выделяет **Fortran** как величайший прорыв [6:39]. До него код писался под конкретную машину. Команда IBM создала «переводчик формул», который позволил людям (физикам и инженерам) писать в терминах математики, а не команд процессора. Это принесло в мир софта переносимость (portability) [7:33].

По мнению гостя, развитие языков идет по пути приближения к человеческому уровню абстракции без потери машинной эффективности [8:00]. Он делит языки на несколько категорий:

1.  **Бизнес-ориентированные:** COBOL.
2.  **Академически чистые:** Algol 60, который Страуструп считает технически безупречным, но практически бесполезным из-за недостатка гибкости [9:05].
3.  **Динамические и функциональные:** Lisp и Smalltalk. Страуструп признает их значимость, но отмечает, что они часто не подходят для условий с жесткими ограничениями по памяти и надежности [14:13].

## 🏗️ Философия C++: Принцип нулевых накладных расходов
[[JUMP:25:04]]

C++ создавался для задач, где надежность и производительность неразрывны. По словам Страуструпа, если система тратит слишком много времени на интерпретацию вызовов, она не успеет обработать сигнал в телефонной сети или вовремя среагировать на нажатие тормоза в автомобиле [26:39].

Ключевой догмой языка стал **Zero-Overhead Principle** (принцип нулевых накладных расходов):

1.  То, чем вы не пользуетесь, не должно стоить вам ничего.
2.  То, чем вы пользуетесь, вы не могли бы написать на более низком уровне (например, на языке C) эффективнее [44:19].

В качестве примера Страуструп приводит умножение матриц: на C++ можно создать абстракцию, которая за счет оптимизаций компилятора и устранения временных объектов будет работать быстрее, чем код на Fortran или рукописный код на C [45:01].

## 🛠️ Ошибка как искусство и статический анализ
[[JUMP:29:45]]

Страуструп убежден, что безопасность системы достигается через упрощение, а не через бесконечное наслоение проверок [30:00].
«Если то, как вы думаете о проблеме, не отражено в коде напрямую — в системе есть потерянное звено, существующее только в вашей голове», — утверждает создатель C++ [30:41]. Прямое выражение намерений в коде делает его поддерживаемым и тестируемым.

Для борьбы со «сложностью, ведущей к багам», Бьерн продвигает **C++ Core Guidelines** — набор правил, минимизирующих ущерб от ошибок [33:16]. Он выделяет два подхода к проверке кода:

*   **Динамический:** Тестирование во время выполнения (дорого и не всегда покрывает все случаи).
*   **Статический анализ:** Анализ кода без запуска. Страуструп считает его будущим индустрии [37:08]. С его помощью можно отслеживать утечки ресурсов и нарушения логики типов до того, как программа попадет на устройство в условной Боготе, где нет программиста для отладки [14:42].

## 🗳️ Демократия стандартизации: C++11, 14, 17 и 20
[[JUMP:1:18:14]]

История стандартизации C++ началась в 1989 году, когда представители IBM и HP убедили Страуструпа, что язык должен принадлежать миру, а не одной корпорации [1:18:52]. Процесс идет под эгидой ISO и напоминает политическую борьбу.

*   **Циклы обновления:** Первые стандарты (98 и 11) создавались десятилетиями. Страуструп называет это «эффектом второй системы», когда амбиции затягивают сроки [1:25:04].
*   **Новый ритм:** Сейчас комитет перешел на жесткий трехлетний цикл (C++14, 17, 20). Если фича не готова — она ждет следующего «поезда» [1:26:36].

Одной из самых ожидаемых функций C++20 Страуструп называет **Concepts** (Концепты) [1:08:24]. Это предикаты времени компиляции, которые позволяют накладывать ограничения на параметры шаблонов (например, требовать, чтобы тип был «сортируемым»). Это решит проблему «ужасных сообщений об ошибках» при работе с шаблонами, над которой Бьерн бился почти 30 лет [1:15:17].

## 🧘 Философский взгляд на будущее и AI
[[JUMP:1:28:32]]

На вопрос о самом красивом элементе C++ Страуструп отвечает без колебаний: **конструкторы и деструкторы** [1:28:58]. Эта пара (концепция RAII) позволяет управлять ресурсами без вмешательства сборщика мусора (Garbage Collector), обеспечивая предсказуемую производительность.

Обсуждая современные веяния в области AI и машинного обучения, Бьерн проявляет осторожность:

*   **Профессионализм против доступности:** Он не согласен с тезисом, что «программировать должны все». Системы управления самолетами или ядерными реакторами должны писать инженеры, использующие острые и точные инструменты, а не «фуззи-логику» (нечеткую логику) [1:39:57].
*   **Риски AI:** Страуструпа пугает идея передачи контроля от AI человеку в критической ситуации. Если автопилот не справляется и просит водителя вмешаться, у человека, который читал книгу, есть всего пара секунд на принятие решения. Это он считает крайне опасной конструкцией [1:42:25].

Завершая беседу, Страуструп отмечает, что единственное, что удерживает его в индустрии 40 лет — это люди и то, что они делают с помощью его языка: от марсоходов до систем очистки дизельных двигателей [1:45:35]. Его цель остается прежней: сделать C++ еще лучше, сохраняя верность принципам аппаратной эффективности и мощной абстракции.