В 2023 году Белый дом выпустил меморандум с рекомендацией перейти на «memory-safe» языки программирования. Следом — рекомендации NSA и CISA. Технические СМИ взорвались заголовками в духе «C++ мёртв». В комментариях потянулась неизбежная дискуссия.
Если вы пишете на C++, у вас наверняка возник вопрос: это реальная угроза или очередная шумиха?
Разберёмся без паники и без снобизма.
Откуда ноги растут
В феврале 2024 года CISA (Агентство кибербезопасности США) вместе с партнёрами из Великобритании, Австралии и ещё нескольких стран опубликовала совместное руководство: «Prioritizing Memory Safety». Основной тезис: большинство критических уязвимостей — buffer overflow, use-after-free, race conditions — связаны с ручным управлением памятью. C и C++ названы примерами «memory-unsafe» языков.
Это не первый звонок. По данным Microsoft, ~70% CVE в Windows за последние 10 лет — проблемы безопасности памяти. Google называет похожие цифры для Chrome. Хромиум — это ~25 миллионов строк C++.
Почему именно сейчас? Несколько причин:
- Rust достиг зрелости и попал в Linux kernel (2022), Android (с 2021).
- Громкие атаки (Log4Shell, SolarWinds) держат безопасность ПО в фокусе.
- Правительства стали смотреть на ПО как на инфраструктуру — с соответствующими требованиями.
Что реально происходит в индустрии
Важно разделить два вопроса: «вытесняют ли C++ как язык?» и «пишут ли новый код на чём-то другом?»
Новый low-level код — да, не только C++
Google начал писать новые компоненты Android на Rust ещё в 2021 году. К 2023-му — около 21% новых нативных строк Android пишется на Rust. Число уязвимостей памяти в Android за этот период снизилось с 76% до 24% от общего числа CVE.
Microsoft экспериментирует с Rust в Windows kernel components. Amazon написала на Rust часть Firecracker VMM и компоненты AWS Nitro.
Это значимо. Но важно понять масштаб: эти компании продолжают поддерживать десятки и сотни миллионов строк C++ кода. Никто не переписывает кодовую базу с нуля.
Существующий C++ код — никуда не делся
Chrome — 25 млн строк C++. Это не будут переписывать. Unreal Engine, Unity (C++ core), Qt, LLVM, MySQL, PostgreSQL, почти весь gamedev — всё это C++. Финтех (latency-critical trading systems) тоже.
Вопрос не «переписать или нет», а «в каких новых проектах стоит рассмотреть альтернативу?»
Rust: реальные плюсы и честные ограничения
Rust действительно решает класс проблем, которые в C++ требуют дисциплины и инструментов (ASan, TSan, Valgrind, code review).
Что Rust делает хорошо:
- Ownership model исключает use-after-free и double-free на уровне компилятора.
- Borrow checker предотвращает data races в многопоточном коде.
- Хорошая интеграция с существующим C-кодом через FFI.
Где всё сложнее:
- Крутая кривая обучения — особенно для разработчиков, привыкших к C++.
- Экосистема C++ несравнимо богаче: Boost, Qt, game engines, graphics APIs.
- Unsafe Rust существует — и в системном коде без него сложно. Гарантии слабеют.
- Компиляция медленнее, чем даже у C++ с большими проектами.
- Generics и trait system — мощно, но иначе устроены. Переучиваться болезненно.
Показательно: в опросе Stack Overflow 2023 года Rust — «самый любимый язык» 7-й год подряд. Но «используется в работе» — лишь ~9% разработчиков. Разрыв между восхищением и реальным применением велик.
C++ не стоит на месте
Критики C++ нередко сравнивают современный Rust с C++98. Это некорректно.
C++23 и C++26
C++23 уже принят. Ключевые улучшения:
std::expected<T, E>— обработка ошибок без исключений и без кодов возврата, близко к RustResult.- Ranges v3 — безопаснее и выразительнее raw loops.
std::print/std::println— наконец-то форматированный вывод без UB.- Улучшения для span и view — меньше сырых указателей.
C++26 (в разработке) приносит контракты (Contracts — P2900). Это pre/post-conditions и invariants прямо в языке. Позволяет ловить нарушения в debug-режиме и включать/выключать проверки в release.
Safety Profiles (WG21 P3081)
В WG21 активно работают над «Safety Profile» — набором правил, который можно применять к кодовой базе и статически гарантировать отсутствие определённых UB. Идея похожа на Rust-подход, но в форме аннотаций и проверок поверх существующего C++.
Это не серебряная пуля, но показывает: стандартизаторы слышат критику и реагируют.
Реальная цена миграции
Допустим, вы хотите переписать C++ систему на Rust. Что это стоит на самом деле?
Google, по внутренним оценкам, называет коэффициент: 1 строка Rust ≈ 2–3 строки C++ по усилиям при первоначальном написании. Для переписывания — ещё выше, потому что нужно понять старый код и выразить инварианты в новой системе типов.
Microsoft исследовала затраты на перевод критических Windows-компонентов. Вывод: для зрелого C++ кода с хорошим тест-покрытием это многолетний проект с высокими рисками регрессий.
Реальный кейс: Firefox переписал CSS/layout engine (Stylo) на Rust — это заняло несколько лет, несколько десятков инженеров и дало реальный прирост производительности. Но это была конкретная подсистема, а не весь браузер.
Вывод: постепенная замена новых компонентов — реалистично. Полная миграция legacy — в большинстве случаев экономически нецелесообразна.
Что это значит для вас как разработчика
Если вы уже пишете на C++:
- Ваши знания никуда не делись. C++ доминирует в gamedev, системном программировании, финансах, embedded — и будет доминировать ещё 10–20 лет.
- Изучите современный C++ (C++20/23). Много проблем, за которые критикуют C++, уже решены в новом стандарте.
- Потратьте время на понимание ownership, RAII, smart pointers — это и в C++ хорошая практика, и ментальный мост к Rust.
Если думаете освоить Rust:
- Это полезный навык, особенно если интересует системное программирование, OS development, WebAssembly.
- Не ждите, что Rust «заменит» C++ в вашей нише в ближайшие годы — но в некоторых новых проектах он уже first-class выбор.
На собеседовании:
- Вопрос «почему C++ всё ещё актуален?» встречается. Знать про memory safety дебаты, C++23/26 и реальное применение Rust — это показатель зрелого понимания рынка.
Итог
C++ не вытесняют. Его критикуют — и справедливо. Индустрия ищет пути писать новый код безопаснее, и Rust занял значимое место в этом поиске. Но это не смерть C++ — это его взросление.
Крупнейшие кодовые базы мира написаны на C++. Они не будут переписаны. Сам язык активно развивается. А разработчик, понимающий и C++, и почему весь этот разговор о безопасности вообще возник — стоит дороже.
Хотите разобрать memory safety в C++ глубже — практически, с примерами кода и типичными ошибками на собеседовании? Это тема нескольких топиков в нашем тренажёре.