Preview

Известия Юго-Западного государственного университета. Серия: Управление, вычислительная техника, информатика. Медицинское приборостроение

Расширенный поиск

Использование метапрограммных средств языка 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

Просмотров: 178


Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


ISSN 2223-1536 (Print)