Моделирование интерпретатора функционального языка программирования с возможностями метапрограммирования
https://doi.org/10.21869/2223-1536-2024-14-2-181-193
Аннотация
Цель исследований заключается в моделировании интерпретатора функционального языка программирования с возможностями метапрограммирования и анализе способов реализации примитивных операторов на основе макросов.
Методы. Была разработана формальная модель интерпретатора функционального языка, являющегося подмножеством Common Lisp, с денотационной семантикой, которая позволяет точно описать поведение интерпретатора при вычислении элементов языка, таких как цитирование, обращение к переменным, последовательность действий, ветвление, присваивание, абстракция, аппликация.
Результаты. На основе денотационной семантики был разработана архитектура интерпретатора функционального языка с возможностями метапрограммирования. В качестве базовых типов объектов были выбраны числа, символы, пары, строки и массивы. Для хранения объектов была использована теговая архитектура, где младшие биты адреса объекта всегда равны нулю, поэтому в них можно хранить код типа объекта и бит для пометки. Выделение и освобождение объектов происходит автоматически: для сборки мусора использован алгоритм пометки и очистки. С помощью макросов были реализованы операторы ветвления – полные и неполные, оператор выбора, операторы блока связанных переменных.
Заключение. В результате работы был реализован интерпретатор функционального языка с возможностями метапрограммирования. С помощью макросов были реализованы примитивные операторы условия, выбора, блока связанных переменных. На примере этих операторов показано, что, используя метапрограммирование, можно встраивать в интерпретатор только базовые формы и примитивы, а остальные операторы могут быть реализованы с помощью метапрограммирования, что позволяет упростить и сократить объем программного кода интерпретатора.
Об авторе
А. А. ЧаплыгинРоссия
Чаплыгин Александр Александрович, кандидат технических наук, доцент кафедры программной инженерии
ул. 50 лет Октября, д. 94, г. Курск 305040, Российская Федерация
Список литературы
1. Сайбель П. Практическое использование Common Lisp. М.: ДМК Пресс, 2017. 488 с.
2. Душкин Р. В. Функциональное программирование на языке Haskell. М.: ДМК Пресс, 2016. 608 с.
3. Узких Г. Ю. Функциональное программирование и его влияние на качество кода и обслуживаемость // Вестник науки. 2023. Т. 4, № 8(65). С. 316–318. EDN TQONQF.
4. Телегин В. А. Влияние функционального программирования на современные языки программирования // Инновации и инвестиции. 2023. № 7. С. 189–192. EDN VQEXEK
5. Городняя Л. В. Перспективы функционального программирования параллельных вычислений // Электронные библиотеки. 2021. Т. 24, № 6. С. 1090–1116. https://doi.org/10.26907/1562-5419-2021-24-6-1090-1116. EDN LOGTRU
6. Билуха И. Н. Актуальность функционального программирования // Студенческий вестник. 2020. № 5-4 (103). С. 60–61. EDN VTDJGN
7. Krasnov M. M., Feodoritova O. B. Using the functional programming library for solving numerical problems on graphics accelerators with CUDA technology // Proceedings of the Institute for System Programming of the RAS. 2021. Vol. 33, No. 5. P. 167–180. https://doi.org/10.15514/ISPRAS-2021-33(5)-10. EDN WXDIFI
8. Domkin V. Programming Algorithms in Lisp. Berkeley: Apress, 2021. 377 p.
9. Грэй П. ANSI Common LISP. М.: Символ-Плюс, 2020. 448 с.
10. Малов А. В., Родионов С. В. Реализация упрощенного алгоритма Байеса в среде функционального программирования COMMON LISP // Известия СПбГЭТУ «ЛЭТИ». 2015. № 2. С. 32–37. EDN TKJVLJ
11. Вторников А. Lisp: маленький гигант // Системный администратор. 2016. № 6 (163). С. 64–69. EDN VZGXVD
12. Nystrom R. Crafting interpreters. М.: Nobel Press, 2024. 640 p.
13. Ульман Джеффри Д., Сети Рави. Компиляторы: принципы, технологии и инструментарий. М.: Диалектика-Вильямс, 2018. 1184 с.
14. Халилов Э. Р. Разработка интерпретатора для языка программирования видеоигр // Информационно-компьютерные технологии в экономике, образовании и социальной сфере. 2020. № 1 (27). С. 79–89. EDN KNIRUT
15. Абельсон Х., Сассман Д. Структура и интерпретация компьютерных программ. М.: КДУ, 2022. 608 с.
16. Григорьев Е. А., Климов Н. C. Использование Ahead-Of-Time компиляции в платформе.NET как альтернатива Just-In-Time компиляции // E-Scio. 2019. № 11 (38). С. 364–371. EDN EOMDHH
17. Харин И. А., Раскатова М. В. Анализ алгоритмов составляющих частей компилятора и его оптимизации // Computational Nanotechnology. 2023. Т. 10, № 2. С. 26–35. https://doi.org/10.33693/2313-223X-2023-10-2-26-35. EDN BDGKMA
18. Штейнберг Б. Я., Штейнберг О. Б. Преобразования программ – фундаментальная основа создания оптимизирующих распараллеливающих компиляторов // Программные системы: теория и приложения. 2021. Т. 12, № 1 (48). С. 21–113. https://doi.org/10.25209/2079-3316-2021-12-1-21-113. EDN FZFEPX
19. Чаплыгин А. А. Использование метапрограммных средств языка Common Lisp для разработки систем эмуляторов // Известия Юго-Западного государственного университета. Серия: Управление, вычислительная техника, информатика. Медицинское приборостроение. 2023. Т. 13, № 3. С. 135–145.
20. Krishnamurthi Sh. Programming Languages: Application and Interpretation. Providence: Brown University, 2022. 376 p.
Рецензия
Для цитирования:
Чаплыгин А.А. Моделирование интерпретатора функционального языка программирования с возможностями метапрограммирования. Известия Юго-Западного государственного университета. Серия: Управление, вычислительная техника, информатика. Медицинское приборостроение. 2024;14(2):181-193. https://doi.org/10.21869/2223-1536-2024-14-2-181-193
For citation:
Chaplygin A.A. Modeling of functional language interpreter with metaprogramming. Proceedings of the Southwest State University. Series: IT Management, Computer Science, Computer Engineering. Medical Equipment Engineering. 2024;14(2):181-193. (In Russ.) https://doi.org/10.21869/2223-1536-2024-14-2-181-193