cppsecurityrustproductionmemory-safety

Безопасность C++ в продакшне. Его правда замещают? И почему.

Разбираем шумиху вокруг памяти в C++, правительственные инициативы в пользу Rust и то, что реально происходит в крупных компаниях — без паники и религиозных войн.

29 августа 2026 г.5 мин чтения0 комментариев

В 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> — обработка ошибок без исключений и без кодов возврата, близко к Rust Result.
  • 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++ глубже — практически, с примерами кода и типичными ошибками на собеседовании? Это тема нескольких топиков в нашем тренажёре.

Leave a comment

Войдите, чтобы оставить комментарий.

Create an account or log in to leave a comment.

Sign In

Comments

No comments yet.

05Похожие разборы

Все записи
Employment

Итак, ты перекатываешься в Golang...

Мир меняется, рынок меняется, зарплаты и вакансии тоже меняются. Возможно, и тебе пора? Глянем что нужно, чтобы разобраться в golang, подготовиться к собесам и получить оффер.

11 мин чтения29 августа 2026 г.
Employment

Гайд по перекату. Фреймворк на случай, если ты заебался.

У всех приходит момент, когда нужно все поменять. Ты устал от работы, от компании, от менеджемента, от области, от своего языка программирования. Это не важно. Я дам тебе фреймворк как поменять все. Расскажу про свой опыт, предложу тебе решение через SMART, который я подкрепил собственным опытом.

11 мин чтения17 августа 2026 г.
Employment

Легенда. Важнейший этап собеседования

Процесс собеса - многоуровневый этап. Если на скрининге можно чуть налажать, то презентация твоего опыта ошибок не прощает. Разбираем как продать себя так, чтобы точно пройти интервью.

6 мин чтения11 августа 2026 г.