МЕТОД ДЕКЛАРАТИВНОГО МЕТАПРОГРАМУВАННЯ НА ОСНОВІ РОЗШИРЕННЯ СИНТАКСИСУ ІСНУЮЧИХ МОВ ПРОГРАМУВАННЯ

Автор(и)

DOI:

https://doi.org/10.31891/2219-9365-2022-71-3-1

Ключові слова:

декларативне програмування, метапрограмування, генерування коду

Анотація

Розглянуто метод декларативного метапрограмування, який орієнтований на генеруввання коду. Метод базується на розширенні синтаксису розповсюджених мов програмування загального призначення. Розширення синтаксису доповнює оригінальний синтаксис мови, надаючи додатковий функціонал генерування коду за допомогою використання шаблонів. Шаблон містить точну структуру отриманого згенерованого коду, але дозволяє вказувати деталі для кожного згенерованого фрагмента. Метод додає нові елементи синтаксису, які дозволяють змінювати контексти під час написання програми, що генерує код. Зовнішній контекст виконується миттєво під час компіляції програми. Внутрішній контекст містить код шаблону, який буде згенеровано. Головне — забезпечити плавний перехід між двома контекстами, щоб код усередині кожного з них був написаний за допомогою однієї мови програмування. Метод забезпечує два типи генерування коду, а саме: миттєве та відкладене генерування. Перший створює згенерований код миттєво під час компіляції. Другий дозволяє генерувати код під час виконання програми. У цьому випадку він генерує проміжне подання шаблону у вигляді публічної функції, яку можна викликати під час виконання програми. Щоб забезпечити належний досвід використання такого підходу, важливо реалізувати інтеграцію з інтегрованим середовищем розробки, яке включає підсвічування коду та перевірку синтаксису. Крім того, коректна інтеграція може бути забезпечена шляхом розробки плагіна для систем збірки Bazel або Gradle.

##submission.downloads##

Опубліковано

30.09.2022

Як цитувати

Ставицький, П. ., & Войтко, В. . (2022). МЕТОД ДЕКЛАРАТИВНОГО МЕТАПРОГРАМУВАННЯ НА ОСНОВІ РОЗШИРЕННЯ СИНТАКСИСУ ІСНУЮЧИХ МОВ ПРОГРАМУВАННЯ. MEASURING AND COMPUTING DEVICES IN TECHNOLOGICAL PROCESSES, (3), 5–11. https://doi.org/10.31891/2219-9365-2022-71-3-1