Метапрограммирование
На следующих страницах представлен дизайн метапрограммирования в Scala. Он вводит следующие основные средства:
- inline функция позволяет помечать некоторые абстракции (значения и методы) как статически сводимые. Она обеспечивает точку входа для макросов и других утилит метапрограммирования.
- Операции времени компиляции
предлагают дополнительные утилиты метапрограммирования, которые можно использовать в
inline
методах (например, для улучшения отчетов об ошибках) без необходимости определять макрос. - Макросы построены на двух фундаментальных операциях:
цитатах и склейках.
Цитата преобразует программный код в данные, а именно в (древовидное) представление этого кода.
Это выражается как
'{...}
для выражений, так и'[...]
для типов. Склеивание, выраженное как${ ... }
, идет другим путем: оно преобразует представление программы в программный код. Вместе сinline
, эти две абстракции позволяют программно конструировать код. - Постановка во время выполнения.
В то время как макросы создают код во время компиляции,
постановка позволяет программам создавать новый код во время выполнения.
Таким образом, генерация кода может зависеть не только от статических данных,
но и от данных, доступных во время выполнения.
Это разделяет оценку программы на две или более стадий.
Следовательно, этот метод генеративного программирования называется "Многоэтапное программирование".
Постановка построена на тех же принципах, что и макросы. Он использует цитаты и склейки, но не включает
inline
. - Рефлексия Цитаты — это представление кода в виде "черного ящика".
Они могут быть параметризованы и составлены с помощью склеивания, но их структура не может быть проанализирована извне.
Отражение TASTy позволяет анализировать структуру кода,
частично раскрывая тип представления фрагмента кода в стандартном API.
Тип представления — это форма типизированного абстрактного синтаксического дерева, которое порождает
TASTy
моникер. - TASTy Inspection
Типизированные абстрактные синтаксические деревья сериализуются в специальном сжатом двоичном формате,
хранящемся в
.tasty
файлах. Проверка TASTy позволяет загружать эти файлы и анализировать древовидную структуру их содержимого.
Ссылки: