Ssylka

Нужно ли запретить итераторы в C++ для повышения безопасности?

Итераторы в C++, реализованные на основе адресной арифметики, могут приводить к ошибкам, поскольку их легко сделать недействительными после модификации исходных данных, из которых они были получены. Проблема заключается в отсутствии контекста у итераторов, являющихся, по сути, указателями на память. Это приводит к таким проблемам, как циклические ссылки и утечки памяти.
Нужно ли запретить итераторы в C++ для повышения безопасности?
Изображение носит иллюстративный характер

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

Один из предложенных подходов заключается в обертывании итераторов прокси-классом, который связывает их с исходным контейнером. Этот прокси-класс будет выполнять отложенный вызов метода итерирования только в момент обращения к итератору, что исключает использование недействительных итераторов. Такой подход, вероятно, потребует запретить прямое использование итераторов и разрешить их только через прокси-класс, контролируемый плагином компилятора.

Несмотря на то, что полная реализация данного подхода еще не завершена, предварительные результаты позволили определить окончательную архитектуру плагина компилятора. В частности, для анализа AST (абстрактного синтаксического дерева) было решено использовать RecursiveASTVisitor вместо AST Matcher, так как первый метод позволяет более гибко управлять обходом дерева и проще обеспечивает контекстную информацию при анализе кода.


Новое на сайте

18603Могла ли детская смесь ByHeart вызвать национальную вспышку ботулизма? 18602Готовы ли банки доверить агентскому ИИ управление деньгами клиентов? 18601Как сезонные ветры создают миллионы загадочных полос на Марсе? 18600Как тело человека превращается в почву за 90 дней? 18599Как ваш iPhone может заменить паспорт при внутренних перелетах по США? 18598Мозговой шторм: что происходит, когда мозг отключается от усталости 18597Раскрыта асимметричная форма рождения сверхновой 18596Скидки Ninja: как получить идеальную корочку и сэкономить на доставке 18595Почему работа на нескольких работах становится новой нормой? 18594Записная книжка против нейросети: ценность медленного мышления 18593Растущая брешь в магнитном щите земли 18592Каким образом блокчейн-транзакции стали новым инструментом для кражи криптовалюты? 18591Что скрывается за ростом прибыли The Walt Disney Company? 18590Является ли ИИ-архитектура, имитирующая мозг, недостающим звеном на пути к AGI? 18589Как Operation Endgame нанесла сокрушительный удар по глобальной киберпреступности?