RUS  ENG
Полная версия
ЖУРНАЛЫ // Моделирование и анализ информационных систем // Архив

Модел. и анализ информ. систем, 2022, том 29, номер 3, страницы 246–264 (Mi mais779)

Эта публикация цитируется в 1 статье

Theory of computing

Трансформация модели памяти языка программирования C в объектно-ориентированное представление на языке EO

А. И. Легаловa, Е. Г. Бугаенкоb, Н. К. Чуйкинa, М. В. Шипицинc, Я. И. Рябцевa, А. Н. Каменскийa

a НИУ «Высшая школа экономики», ул. Мясницкая, д. 20, г. Москва, 101000 Россия
b Российский исследовательский институт Huawei, Смоленская площадь, 7-9, г. Москва, 121099 Россия
c Национальный исследовательский университет ИТМО , Кронверкский пр., д. 49, лит А., г. Санкт-Петербург, 197101 Россия

Аннотация: В работе проводится анализ возможностей трансформации конструкций языка программирования C в объекты языка программирования EO. Особенностью рассматриваемого подхода является транспиляция из языка системного программирования в язык с более высоким уровнем абстракции, не поддерживающий непосредственные манипуляции с компьютерной памятью. К действиям, которые в этом случае необходимо поддерживать, относится использование разыменованных указателей, наложение данных различного типа на одну и ту же область памяти, а также различная интерпретация одних и тех же данных, расположенных в одном и том же адресном пространстве памяти. Принято решение о создании дополнительных EO-объектов, напрямую имитирующих непосредственную работу с компьютерной памятью в языке C и инкапсулирующих ненадежные операции с данными посредством указателей. Для отображения возможностей языка C, обеспечивающих взаимодействие с компьютерной памятью, предлагается абстрактный объект-память. Он представляет собой массив байт, при работе с которым возможны запись и чтение по заданному индексу. Для исследования вариантов и анализа полученных результатов разработан транспилятор, обеспечивающий необходимые трансформации. Он реализован на основе Clang, который формирует абстрактное синтаксическое дерево. Обработка этого дерева осуществляется с использованием библиотек LibTooling и LibASTMatchers. Рассмотренный подход оказывается целесообразным при решении ряда задач, к одной из которых относится статический анализ кода. Подобные решения позволяют выделить в отдельные программные объекты низкоуровневые фрагменты кода, акцентировав внимание на их изучении и возможных преобразованиях в более надежный код.

Ключевые слова: трансформация программ, процедурное программирование, объектно-ориентированное программирование, транспиляция, компиляция, языки программирования.

УДК: 004.4’4

MSC: 68N15, 68Q10, 68N20

Поступила в редакцию: 07.08.2022
Исправленный вариант: 01.09.2022
Принята в печать: 02.09.2022

DOI: 10.18255/1818-1015-2022-3-246-264



© МИАН, 2024