Релиз проекта Memsafe с механизмом безопасной работы со ссылочными типами и динамической памятью в коде на языке С++
Состоялся релиз проекта Memsafe v0.2.0, реализующего механизм безопасной работы со ссылочными типами и динамической памятью в коде на языке С++. Защитная структура в коде может быть добавлена без нарушения обратной совместимости со старым С++ кодом. Проект оформлен в виде одного заголовочного файла memsafe.h и плагина для компилятора Clang. Исходный код проекта опубликован на GitHub под лицензией LGPL 2.1.
По информации OpenNET, для безопасной работы с памятью в Memsafe использована концепция защиты из языка NewLang, адаптированная для С++ и дополненная контролем инвалидации ссылочных типов. В основе безопасного управления динамической памятью лежит использование сильных и слабых указателей, а также контроль времени жизни копий переменных с сильными указателями во время компиляции исходного кода программы.
Предложенная техника защиты походит на концепцию владения и заимствования из языка Rust, но реализована на базе сильных и слабых ссылок (стандартных механизмов С++ shared_ptr и weak_ptr). Любые операции с данными для переменной по ссылке возможны только после её захвата, т. е. после преобразования слабой ссылки (weak_ptr) в сильную (shared_ptr).
Способ маркировки объектов в коде библиотеки реализован с помощью С++ атрибутов «», что напоминает способ из спецификаций P3038 и P3081 с профилями безопасности (предложены Бьёрном Страуструпом и Гербом Саттером), но не требует разработки нового стандарта С++ (достаточно использовать уже существующий С++20). С использованием пространства имён «memsafe» и разделением защищённого и незащищённого (unsafe) кода можно познакомиться в этом примере.
В начале марта 2025 года Бьёрн Страуструп призвал отвечающий за разработку стандартов для языка C++ комитет WG21 принять меры для сохранения актуальности C++ в условиях активного продвижения инициатив по переходу на языки, обеспечивающие безопасную работу с памятью. Страуструп считает, что язык С++ уже предоставляет все возможности, необходимые для безопасной работы с памятью. Остаётся только предоставить средства, гарантирующие, что код написан с использованием только безопасных возможностей. Для обеспечения разработки безопасного кода Страуструп предлагает стандартизировать систему профилей C++, вводящих дополнительные требования к коду. Профили близки к применению флагов «‑Wall» и «‑Wextra» при компиляции, но в отличие от них работают на уровне запрета применения определённых возможностей языка.
В начале февраля Бьёрн Страуструп представил «профили» для обеспечения безопасности ресурсов и типов в рамках проекта «C++ на стероидах», чтобы помочь разработчикам сосредоточиться на эффективном использовании современного C++ и избежать устаревших «тёмных углов» языка. Он пожаловался, что многие разработчики «используют C++ так, как будто это все ещё предыдущее тысячелетие», в своей новой статье под названием «21st Century C++».
11 сентября 2024 года разработчик Шон Бакстер (Sean Baxter) представил драфт основного документа проекта Safe C++ для продвижения внедрения безопасного кода на C++, включая запрет на использование небезопасных методов работы с памятью, вместо перевода проектов на Rust.
Написать комментарий