«Прошло более 45 лет с тех пор, как C++ был впервые задуман», — написал 74-летний создатель C++ Бьёрн Страуструп в статье для Communications of the ACM. Он пожаловался, что многие разработчики «используют C++ так, как будто это все ещё предыдущее тысячелетие», в своей новой статье под названием 21st Century C++, в которой он предоставил «ключевые концепции, на которых может быть построено производительное, безопасное для типов и гибкое программное обеспечение C++: управление ресурсами, управление временем жизни, обработка ошибок, модульность и обобщённое программирование, а также способы обеспечения того, чтобы код был современным, а не полагался на устаревшие, небезопасные и сложные в поддержке методы: руководства и профили».
Чтобы помочь разработчикам сосредоточиться на эффективном использовании современного C++ и избежать устаревших «тёмных углов» языка, были разработаны наборы руководств. «Здесь я сосредоточусь на руководствах C++ Core, которые я считаю наиболее амбициозными. Моя главная цель — безопасное для типов и ресурсов использование стандарта ISO C++, включая то, что каждый объект используется исключительно в соответствии со своим определением, а также никаких утечек ресурсов», — добавил Страуструп.
Эти моменты охватывает то, что разработчики называют безопасностью памяти и многое другое. Это не новая цель для C++. Очевидно, что этого нельзя достичь для каждого использования C++, но к настоящему времени у сообщества проекта этого языка программирования есть многолетний опыт, показывающий, что это можно сделать для современного кода, хотя до сих пор обеспечение было неполным. «Когда мы думаем о C++, важно помнить, что C++ — это не просто язык, а часть экосистемы, состоящей из реализаций, библиотек, инструментов, обучения и многого другого», — пояснил Страуструп.
Команда разработчиков из национальной рабочей группы по стандартизации С++ WG21 (и другие) работают над «профилями» для обеспечения соблюдения руководств. Хотя они «ещё не доступны, за исключением экспериментальных и частичных версий». Страуструп добавил, что основные руководящие принципы C++ «используют стратегию, известную как подмножество надмножества». Во‑первых, расширить язык несколькими библиотечными абстракциями: использовать части стандартной библиотеки и добавить небольшую библиотеку, чтобы сделать использование руководств удобным и эффективным (библиотека поддержки руководящих принципов. Далее нужно запретить использование низкоуровневых, неэффективных и подверженных ошибкам функций.
То, что мы получим, — это «C++ на стероидах»: что‑то простое, безопасное, гибкое и быстрое; а не обеднённое подмножество или что‑то, полагающееся на массовую проверку во время выполнения. Мы также не создаём язык с новыми и/или несовместимыми функциями. Результат — 100% стандарт ISO C++. Беспорядочные, опасные, низкоуровневые функции все ещё могут быть включены и использованы при необходимости.
Страуструп добавил, что основные принципы C++ сосредоточены на правилах, «которые, как мы надеемся, в конечном итоге принесут пользу всем»:
никаких неинициализированных переменных (No uninitialized variables)
Никаких нарушений диапазонов или nullptr (No range or nullptr violations)
Никаких утечек ресурсов (No resource leaks)
Никаких висячих указателей (No dangling pointers)
Никаких нарушений типов (No type violations)
Никакой недействительности (No invalidation)
11 сентября 2024 года разработчик Шон Бакстер (Sean Baxter) представил драфт основного документа проекта Safe C++ для продвижения внедрения безопасного кода на C++, включая запрет на использование небезопасных методов работы с памятью, вместо перевода проектов на Rust.
В январе 2023 года изобретатель языка программирования C++ Бьёрн Страуструп ответил Агентству национальной безопасности (АНБ) США по поводу рекомендации ведомства отказаться от использования языков C и C++, перекладывающих управление памятью на разработчика, в пользу современных языков программирования (C#, Go, Java, Ruby, Rust и Swift), которые обеспечивают автоматическое управление памятью или выполняющие проверки безопасной работы с памятью во время компиляции кода. Страуструп призвал АНБ со своей стороны сначала серьёзно подумать о «безопасности» новых языков и только потом предлагать что‑нибудь разумное по этому поводу. Учёный и разработчик считает, что упомянутые в отчёте АНБ «безопасные» языки программирования на самом деле не превосходят C++ в важных с его точки зрения применениях.
В конце февраля 2024 года Офис национального директора по кибербезопасности (ONCD) Белого дома США в рамках доклада о способах снижения количества уязвимостей в проектах и возможности в будущем улучшить надёжность ПО призвал разработчиков ПО в долгосрочной перспективе отказаться от небезопасных (в рамках работы с памятью) языках программирования С и С++ и перейти на более современные решения с высокой безопасностью памяти, например Rust, Python и Java.
Страуструп ответил на призыв Белого дома США переходить на языки с безопасностью памяти: «Я нахожу удивительным, что авторы этих государственных документов, похоже, не знают о сильных сторонах современного C++ и усилиях по обеспечению сильных гарантий безопасности. С другой стороны, они понимают, что язык программирования — это лишь одна часть набора инструментов, поэтому важно улучшать инструменты и процессы разработки». Страуструп напомнил, как он работал десятилетиями над тем, чтобы сделать язык безопаснее. Наконец, он поставил под сомнение само понимание безопасности: критики фокусируются на безопасности памяти, оставляя без внимания многие другие места, где можно проколоться.
