Занятие 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++: путь от исходника до исполняемого файла и ваш первый собранный руками бинарник.