Релиз проекта Memsafe с механизмом безопасной работы со ссылочными типами и динамической памятью в коде для языка С++

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Состоялся релиз проекта Memsafe v0.2.0, реализующего механизм безопасной работы со ссылочными типами и динамической памятью в коде на языке С++. Защитная структура в коде может быть добавлена без нарушения обратной совместимости со старым С++ кодом. Проект оформлен в виде одного заголовочного файла memsafe.h и плагина для компилятора Clang. Исходный код проекта опубликован на GitHub под лицензией LGPL 2.1.

По информации OpenNET, для безопасной работы с памятью в Memsafe использована концепция защиты из языка NewLang, адаптированная для С++ и дополненная контролем инвалидации ссылочных типов. В основе безопасного управления динамической памятью лежит использование сильных и слабых указателей, а также контроль времени жизни копий переменных с сильными указателями во время компиляции исходного кода программы.

Предложенная техника защиты походит на концепцию владения и заимствования из языка Rust, но реализована на базе сильных и слабых ссылок (стандартных механизмов С++ shared_ptr и weak_ptr). Любые операции с данными для переменной по ссылке возможны только после её захвата, т. е. после преобразования слабой ссылки (weak_ptr) в сильную (shared_ptr).

Способ маркировки объектов в коде библиотеки реализован с помощью С++ атрибутов «[[memsafe(...)]]», что напоминает способ из спецификаций 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.

Источник: https://habr.com/ru/news/888016/


Интересные статьи

Интересные статьи

В наше время многие компании используют различные сервисы для связи с клиентами и партнерами. Один из самых популярных мессенджеров - WhatsApp, стал незаменимым инструментом коммуникации в бизнесе. Од...
Статья о том, как упорядочить найм1. Информируем о вакансии2. Ведём до найма3. Автоматизируем скучное4. Оформляем и выводим на работу5. Отчитываемся по итогам6. Помогаем с адаптацией...
Всем привет! Я работаю бэкенд-разработчиком в компании Tinkoff, где участвую в разработке платформы CRM-системы для обслуживания физических и юридических лиц. Использование edge proxy и балан...
Существует традиция, долго и дорого разрабатывать интернет-магазин. :-) Лакировать все детали, придумывать, внедрять и полировать «фишечки» и делать это все до открытия магазина.
Системные администраторы всего мира, поздравляем вас с профессиональным праздником! У нас системных администраторов не осталось (ну почти). Однако предание о них еще свежо. В честь праздника м...