Занятие 0. Вступление: от перфокарт до LLM

Вступительная лекция — про контекст: откуда взялись инструменты, которыми мы будем пользоваться два семестра, по какому ритму живёт C++ и как меняется профессия прямо сейчас. Курс ведёт Александр Уланов (СПбГУ, факультет прикладной математики — процессов управления); вопросы по курсу, ДЗ и апелляциям — a.ulanov@spbu.ru.

Сквозной принцип лекции, который объяснит всё остальное: каждый язык — ответ на боль своего времени.

До высоких уровней: 1940-е — 1960-е

Первые ЭВМ программировали переключателями и перфокартами: программа — колода карт, ошибка — рассыпанная колода. Ассемблер (1950-е) дал числам имена, но остался один-к-одному с железом: новая машина — переписывай всё.

Прорыв — идея компилятора: Fortran (1957) доказал, что машина может переводить «формулы» в код не хуже человека. Затем ALGOL принёс структурность, Lisp — функции как данные, COBOL — язык для бизнеса.

C и рождение C++

1972, Bell Labs, Деннис Ритчи. Задача: переписать UNIX так, чтобы ОС переезжала на новые машины без переписывания с нуля. C — компромисс, попавший в вечность: близко к железу (указатели, байты — занятия 3 и 18), но переносимо. В 1973-м UNIX переписан на C; с тех пор C — лингва франка систем: ядра Linux и Windows, embedded, рантаймы других языков. Половина нашего курса — прямое наследие C: конвейер сборки (занятие 1), типы и память (3), C-строки (9), UB как контракт (18).

1979, снова Bell Labs. Бьярне Страуструп хочет писать распределённые системы: нужны классы как в Simula, но скорость как у C. 1979 — «C with Classes», 1983 — имя C++, 1985 — компилятор CFront и первая книга. Главный принцип на 45 лет вперёд — zero-overhead: «не платишь за то, чем не пользуешься; а тем, чем пользуешься, вручную лучше не сделаешь». Наши занятия 7 (RAII) и 22 (move) — этот принцип в действии.

Второе судьбоносное решение — совместимость с C и со старым собой: код 1985 года компилируется до сих пор, поэтому на C++ написаны системы, живущие десятилетиями.

Хронология стандартов

стандарт главное в нашем курсе
C++98/03 первый ISO; STL Степанова: контейнеры + итераторы + алгоритмы vector, sort — занятия 16–17
C++11 перезапуск языка: auto, лямбды, move, умные указатели, threads половина курса: занятия 11, 14, 16, 22
C++14/17 полировка + string_view, optional, variant, structured bindings занятия 9, 20
C++20 концепты, ranges, корутины, модули, spaceship <=> занятия 16, 24 — база курса
C++23 std::print, expected, mdspan заходами
C++26 в драфте: рефлексия, контракты, std::execution — состав финализируется тизеры

Тринадцать лет тишины между 98-м и 11-м чуть не стоили языку жизни — Java (1995) и C# (2000) забирали разработчиков. Ответ комитета — трёхлетняя каденция: с 2011 года новый стандарт выходит каждые три года. C++11 «ощущается как новый язык» — слова самого Страуструпа.

Почему C++ жив в 2026-м. Совместимость держит триллионы строк работающего кода; zero-overhead незаменим там, где считают наносекунды — игры, HFT, браузеры, БД, ML-рантаймы (внутри PyTorch и TensorFlow — C++), embedded. Соседи отвечали на свои боли: Java — переносимость через VM, Go (2009) — простота для серверов, Rust (2015) — безопасность памяти без сборщика мусора. Давление Rust и регуляторов (государственные рекомендации memory-safe языков) двигает и сам C++: профили безопасности — большая тема комитета прямо сейчас.

Наши дни: LLM

Пять лет, изменившие ремесло: GitHub Copilot (2021) — автодополнение целыми функциями; ChatGPT (2022) — диалог с моделью становится массовым; 2023–24 — ассистенты во всех крупных IDE; 2025–26 — агентные инструменты, которые сами компилируют, тестируют и правят.

По публичным заявлениям компаний, в Google ИИ генерирует более четверти нового кода (окт. 2024), в Microsoft — «20–30%» (апр. 2025). Цифры их собственные, но тренд очевиден: профессия смещается от набора текста к постановке задач и проверке результата.

«Зачем учить основы, если пишет ИИ?»

  • Главный навык эпохи ИИ — ревью чужого кода: сгенерированный код — это чужой код в промышленных объёмах. Чтобы принять или отвергнуть его, нужно видеть инварианты, память и худшие случаи.
  • ИИ ускоряет того, кто понимает, — и умножает ошибки того, кто не понимает: уверенный тон модели не заменяет доказательства.
  • Всё, чему учит курс — инварианты, UB, замеры, нижние оценки, — ровно то, что в сгенерированном коде надо проверять.
Политика курса по ИИ

Пользоваться ассистентами при ДЗ можно — понимать каждую сданную строку обязательно: на защите ДЗ спросим любую.

Что впереди у языка: рефлексия (программа изучает собственные типы — сериализация без макросов), контракты (пред- и постусловия в синтаксисе — наши инварианты станут частью языка), профили безопасности. Языку 45 лет — и он снова на фронтире.

Как устроен наш семестр

  • Две линии вперемежку: язык (C/C++ от сборки до шаблонов) и алгоритмы (от O-символики до кучи) — они постоянно ссылаются друг на друга.
  • Контроль: домашние задания после семинаров, два рубежных контроля, зачёт с оценкой. Сдача ДЗ — через Git; задачи также выкладываются в контест на HackerRank (HR).
  • Инструменты: компилятор + редактор, санитайзеры, Compiler Explorer — настроим на занятии 1.
  • Стиль курса: каждое утверждение о скорости — с настоящим замером; каждый цикл — с инвариантом; каждая «магия» — с разбором до байтов.

Что почитать вокруг лекции: cppreference.com — настольный справочник курса; isocpp.org — новости комитета и стандартов; история языка от первого лица — Б. Страуструп, «Дизайн и эволюция C++».

Следующее занятие — сборка C++: путь от исходника до исполняемого файла и ваш первый собранный руками бинарник.