Pull to refresh

C++ на стероидах: Бьёрн Страуструп представил «профили» для обеспечения безопасности ресурсов и типов

Reading time4 min
Views13K

«Прошло более 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++ и усилиях по обеспечению сильных гарантий безопасности. С другой стороны, они понимают, что язык программирования — это лишь одна часть набора инструментов, поэтому важно улучшать инструменты и процессы разработки». Страуструп напомнил, как он работал десятилетиями над тем, чтобы сделать язык безопаснее. Наконец, он поставил под сомнение само понимание безопасности: критики фокусируются на безопасности памяти, оставляя без внимания многие другие места, где можно проколоться.

Tags:
Hubs:
Total votes 18: ↑16 and ↓2+19
Comments53

Other news