Использование метапрограммных средств языка Common Lisp для разработки систем эмуляторов
https://doi.org/10.21869/2223-1536-2023-13-3-135-145
Аннотация
Цель исследования заключается в анализе и использовании метапрограммирования на языке Common Lisp при проектировании и реализации эмуляторов, симулирующих аппаратуру вычислительных систем. Рассматриваются виды метапрограммирования, макросредства языка Common Lisp, использование макросов для метапрограммирования.
Методы. Язык Lisp характеризуется использованием единообразных S-выражений для представления данных и программ. Таким образом, данные могут являться частью программы, и наоборот: программа может быть данными. Макросредства Common Lisp позволяют напрямую модифицировать абстрактное синтаксическое дерево программы, и возможно создание новых синтаксический конструкций для решения поставленной задачи. При реализации функций эмулятора макросредства языка Common Lisp могут быть использованы для генерации функций, где общая часть функций входит в макрос, а различия функций задаются в параметрах при вызове макросов. Примеры таких макросов включают работу с битовыми регистрами статуса, генерацию арифметических команд, команду сравнения, работу с памятью и др. Таким образом, можно значительно уменьшить размер программы.
Результаты. В результате компьютерного моделирования был разработан и реализован симулятор архитектуры NES (процессор MOS 6502) на объектно-ориентированном языке программирования C# и на языке с поддержкой метапрограммирования Common Lisp. В результате симулятор, написанный на языке с поддержкой метапрограммирования, оказался более чем в 2 раза меньше, чем симулятор, написанный на языке C#.
Заключение. Использование метапрограммирования (на примере создания эмуляторов) может значительно сократить объем программы, упростить и улучшить архитектуру программы, уменьшить число ошибок и повысить качество программ. Использование предметно-ориентированных языков позволяет существеннее сократить объем кода программы.
Об авторе
А. А. ЧаплыгинРоссия
Чаплыгин Александр Александрович, кандидат технических наук, доцент кафедры программной инженерии
ул. 50 лет Октября, д. 94, г. Курск 305040
Список литературы
1. Ingebrigtsen E. Metaprogramming in C#. Birmingham, UK: Packt Publishing Limited, 2023. 353 p.
2. Лоторейчик В. Ю. Метапрограммирование на основе текстового препроцессора // Научно-технический вестник Санкт-Петербургского государственного университета информационных технологий, механики и оптики. 2006. № 25. С. 57–65. EDN JURWLF.
3. What APIs Are and Why They Matter. URL: https://www.f5.com/ labs/articles/education/still-mystified-by-apis-what-they-are-really-and-why-they-matter (дата обращения: 26.05.2022).
4. Аникин Д. А. Анализ методов авторизации и аутентификации REST API // Международный журнал информационных технологий и энергоэффективности. 2023. Т. 8, № 5-2(31). С. 120–124. EDN DZKSMQ.
5. Денисов Д. Э. Сравнение Typescript и Javascript для web-разработки // Студенческий вестник. 2023. № 20-8(259). С. 57–58. EDN MQCOML.
6. Назарова О. В. Интерактивный учебник по Java Script // Хроники объединенного фонда электронных ресурсов. Наука и образование. 2017. № 7(98). С. 63. EDN ZRRDGB.
7. Скотт Адам Д., Макдоналд М., Пауэрс Шелли. JavaScript. Рецепты для разработчиков. 3-е изд. СПб.: Питер, 2023. 528 с.
8. Абельсон Х., Сассман Д. Структура и интерпретация компьютерных программ. М.: Добросвет: КДУ, 2012.
9. Эванс Э. Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем. М.: Вильямс, 2020. 448 с.
10. Сухов А. О. Классификация предметно-ориентированных языков и языковых инструментариев // Математика программных систем: межвузовский сборник научных статей / под редакцией А. И. Микова и Л. Н. Лядовой. Пермь: Пермский государственный национальный исследовательский университет, 2012. С. 74–83. EDN TOFMPJ.
11. Fowler M. Domain Specific Language. URL: http://gnetna.com/books/Domain-Specific%20Languages.pdf (дата обращения: 25.05.2023).
12. Тихонов А. Ю., Аветисян А. И. Комбинированный (статический и динамический) анализ бинарного кода // Труды Института системного программирования РАН. 2012. Т. 22. С. 131–152.
13. Davide Di Gennaro. Advanced Metaprogramming in Classic C++. Berkeley, CA: Apress, 2015. 572 p.
14. McCarthy John. Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I // Communications of the ACM. 1960. Vol. 3, N 4. P. 184–195.
15. Domkin V. Programming Algorithms in Lisp. Berkeley, CA: Apress, 2021. 392 p.
16. Сосновский Е. И. Использование языка программирования LISP для расширения базовых возможностей бюджетных САПР // Новые компьютерные технологии. 2012. Т. 10, № 1(10). С. 55–59. EDN WHKGLD.
17. Graham P. ANSI Common LISP. Philadelphia, USA: Pearson, 1995. 448 p.
18. Рапортиренко А. М. Common Lisp версия системы компьютерной алгебры REDUCE // Вестник Российского университета дружбы народов. Серия: Математика, информатика, физика. 2010. № 2-2. С. 40–44. EDN MQIMWJ.
19. Сайбель П. Практическое использование Common Lisp. М.: ДМК Пресс, 2023. 488 c.
20. Трещев И., Кожин И. Эмуляторы и симуляторы сетей ЭВМ. Для студентов технических специальностей. М.: Ридеро, 2018. 166 c.
Рецензия
Для цитирования:
Чаплыгин А.А. Использование метапрограммных средств языка Common Lisp для разработки систем эмуляторов. Известия Юго-Западного государственного университета. Серия: Управление, вычислительная техника, информатика. Медицинское приборостроение. 2023;13(3):135-145. https://doi.org/10.21869/2223-1536-2023-13-3-135-145
For citation:
Chaplygin А.А. Using Metaprogramming Tools of the Common Lisp Language for the Development of Emulator Systems. Proceedings of the Southwest State University. Series: IT Management, Computer Science, Computer Engineering. Medical Equipment Engineering. 2023;13(3):135-145. (In Russ.) https://doi.org/10.21869/2223-1536-2023-13-3-135-145