1.81M
Category: programmingprogramming

Метапрограммирование

1.

Парадигмы программирования
(с примерами на языке R)
Метапрограммирование
Голубничий А.А.
[email protected]
@Golubnichij

2.

Структура занятия
• основные понятия;
• шаблонизация;
• самомодифицирующийся код;
• rlang и lobstr.
2

3.

Основные понятия
Метапрограмма – это программа, создающая или модифицирующая
в процессе своей работы другую программу или саму себя.
Метапрограммирование – вид программирования, связанный с
созданием программ, которые порождают другие программы как
результат
своей
работы

частности,
на
стадии компиляции их исходного кода), либо программ, которые
меняют себя во время выполнения (самомодифицирующийся код)
3

4.

Шаблонизация
Шаблоны (template) – средство языка C++, предназначенное для
кодирования обобщенных алгоритмов, без привязки к некоторым
параметрам (например, типам данных, размерам буферов,
значениям по умолчанию).
4

5.

Самомодифицирующийся код
Самомодифицирующийся код (СМК) – программный прием, при
котором
приложение
создает
или
изменяет
часть
своего программного кода во время выполнения.
По времени проведения модификации метод делится на:
• Модификация при инициализации – проводится один раз, перед
запуском изменяемого кода
• Модификация на лету (on-the-fly)
– изменение состояния
программы во время исполнения
5

6.

Основные применения СМК
• В критичных к безопасности местах для усложнения исследования
кода.
• В критичных к скорости местах для ускорения работы.
• Для
включения/отключения
во
время
исполнения
некоторой
функциональности для тестирования или отладки.
• В ядре Linux и, возможно, других ОС, используются для отключения
частей ядра, не нужных в данном окружении.
6

7.

Основные методы реализации СМК
Гомоиконность

инструкции
по
самоидентификации
или
изменению кода основываются на том же синтаксисе, что и сам код.
Интроспекция – представление внутренних структур языка в
виде переменных встроенных типов с возможностью доступа к ним
из
программы
технологиям

терминах
динамического
С++
это
будет
полиморфизма
и
соответствовать
динамического
приведения типов).
Интерпретация произвольного кода, представленного в виде строки.
7

8.

Реализация в R
rlang – пакет для работы с основными функциями ядра R и
tidyverse
lobstr – пакет предоставляющий инструменты в том же духе,
что и str(), которые позволяют вам углубиться в детали
объекта.
8

9.

Абстрактное синтаксическое дерево
Абстрактное
синтаксическое
дерево (АСД) – конечное
помеченное
ориентированное дерево, в
котором внутренние
вершины сопоставлены
(помечены) с операторами
языка программирования, а
листья – с
соответствующими
операндами.
9

10.

Абстрактное синтаксическое дерево в R
10
English     Русский Rules