Трансформация модели памяти языка программирования C в объектно-ориентированное представление на языке EO
https://doi.org/10.18255/1818-1015-2022-3-246-264
Аннотация
В работе проводится анализ возможностей трансформации конструкций языка программирования C в объекты языка программирования EO. Особенностью рассматриваемого подхода является транспиляция из языка системного программирования в язык с более высоким уровнем абстракции, не поддерживающий непосредственные манипуляции с компьютерной памятью. К действиям, которые в этом случае необходимо поддерживать, относится использование разыменованных указателей, наложение данных различного типа на одну и ту же область памяти, а также различная интерпретация одних и тех же данных, расположенных в одном и том же адресном пространстве памяти. Принято решение о создании дополнительных EO-объектов, напрямую имитирующих непосредственную работу с компьютерной памятью в языке C и инкапсулирующих ненадежные операции с данными посредством указателей. Для отображения возможностей языка C, обеспечивающих взаимодействие с компьютерной памятью, предлагается абстрактный объект-память. Он представляет собой массив байт, при работе с которым возможны запись и чтение по заданному индексу. Для исследования вариантов и анализа полученных результатов разработан транспилятор, обеспечивающий необходимые трансформации. Он реализован на основе Clang, который формирует абстрактное синтаксическое дерево. Обработка этого дерева осуществляется с использованием библиотек LibTooling и LibASTMatchers. Рассмотренный подход оказывается целесообразным при решении ряда задач, к одной из которых относится статический анализ кода. Подобные решения позволяют выделить в отдельные программные объекты низкоуровневые фрагменты кода, акцентировав внимание на их изучении и возможных преобразованиях в более надежный код.
Ключевые слова
MSC2020: 68N15, 68Q10, 68N20
Об авторах
Александр Иванович ЛегаловРоссия
Егор Георгиевич Бугаенко
Россия
Николай Константинович Чуйкин
Россия
Максим Владимирович Шипицин
Россия
Ярослав Иванович Рябцев
Россия
Андрей Николаевич Каменский
Россия
Список литературы
1. Y. Bugayenko, Elegant Objects. [Online]. Available: https://www.elegantobjects.org/.
2. Y. Bugayenko, Elegant Objects. California, USA: Amazon Kindle Direct Publishing, 2016, vol. 1, isbn: 9781519166913.
3. Y. Bugayenko, Elegant Objects. California, USA: Amazon Kindle Direct Publishing, 2017, vol. 2, isbn: 9781534908307.
4. Y. Bugayenko, EOLANG and ψ-calculus, 2021. arXiv: 2111.13384 [cs.PL].
5. H. Saleh, S. Zykov, and A. Legalov, «Eolang: Toward a New Java-Based Object-Oriented Programming Language», in Intelligent Decision Technologies. Smart Innovation, Systems and Technologies, vol. 238, 2021, pp. 355-363. doi: 10.1007/978-981-16-2765-1_30.
6. H. Saleh, J. Attakorah, S. Zykov, and A. Legalov, «Exploring the Eolang-Java Integration and Interoperability», in Procedia Computer Science. Proceedings of the 25th International Conference KES2021: Knowledge-Based and Intelligent Information & Engineering Systems, vol. 192, 2021, pp. 4560-4569. doi: 10.1016/j.procs.2021.09.234.
7. N. Kudasov and V. Sim, «Formalizing <p-calculus: a purely object-oriented calculus of decorated objects», in Proceedings of the ECOOP Workshop on Formal Techniques for Java-like Programs (FTfJP 2022), Berlin, Germany, 2022.
8. Polystat Project: Polyglot Static Analyzer for Object-Oriented Programming Languages. [Online]. Available: https://github.com/polystat.
9. Y. Bugayenko, Reducing Programs to Objects, 2021. arXiv: 2112.11988 [cs.PL].
10. Oberon 07 compiler. [Online]. Available: https://github.com/vladfolts/oberonjs.
11. Visual Interactive Simulations for Education and Science. [Online]. Available: https://visual.sfu-kras.ru/.
12. JSSpeccy 3 a ZX Spectrum emulator in the browser. [Online]. Available: http://jsspeccy.zxdemo.org/.
13. JSNES A JavaScript NES emulator. [Online]. Available: https://jsnes.org/.
14. JSLinux. [Online]. Available: https://bellard.org/jslinux/.
15. Experimental compiler of C to EO. [Online]. Available: https://github.com/polystat/c2eo.
16. Clang: a C language family frontend for LLVM. [Online]. Available: https://clang.llvm.org/.
17. Tutorial for building tools using LibTooling and LibASTMatchers. [Online]. Available: https://clang.llvm.org/docs/LibASTMatchersTutorial.html.
Рецензия
Для цитирования:
Легалов А.И., Бугаенко Е.Г., Чуйкин Н.К., Шипицин М.В., Рябцев Я.И., Каменский А.Н. Трансформация модели памяти языка программирования C в объектно-ориентированное представление на языке EO. Моделирование и анализ информационных систем. 2022;29(3):246-264. https://doi.org/10.18255/1818-1015-2022-3-246-264
For citation:
Legalov A.I., Bugayenko Ye.G., Chuykin N.K., Shipitsin M.V., Riabtsev Ya.I., Kamenskiy A.N. Transformation of C Programming Language Memory Model into Object-Oriented Representation of EO Language. Modeling and Analysis of Information Systems. 2022;29(3):246-264. (In Russ.) https://doi.org/10.18255/1818-1015-2022-3-246-264