scalabook

Форк
0
/
metaprogramming.md 
41 строка · 4.3 Кб

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

На следующих страницах представлен дизайн метапрограммирования в Scala. Он вводит следующие основные средства:

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

Ссылки:

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.