Ssylka

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

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

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

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

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


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

7613Возможно ли вернуть к жизни шедевр Рубенса, не нарушив при этом его дух? 7612Возможен ли покой спустя десятилетия? Раскрытие тайны убийства Дон Момохара 7611Почему на складах России скопилось так много автомобилей? 7610Могут ли мышцы ушей помочь нам лучше слышать? 7609Может ли мусор на улицах стать ключом к спасению планеты? 7608Сколько памяти нужно смартфону в будущем? 7607Как устроены сливеры во Flutter и как их эффективно использовать? 7606Энергетический гигант Калькотта: батарейный комплекс на страже "зеленого"... 7605Кто спас Ном от "душителя"? 7604Ускользающее убежище: судьба центра реабилитации под угрозой из-за стрельбища 7603Зачем в городах возвышали жилые дома на опоры? 7602Может ли стремительный взлет искусственного интеллекта подорвать неприкосновенность... 7601Неужели сейчас идеальный момент для покупки нового телевизора? 7600Где заканчивается привычное и начинается необъяснимое? 7599Индия: возрождение тигра и уроки сохранения для всего мира