Гигиенический макрос
-
Проблема макрогигиены
- Макрогигиена предотвращает захват переменных макросами.
- Макросы могут непреднамеренно захватывать переменные, что приводит к ошибкам.
-
Решение проблемы макрогигиены
- Использование необычных имен переменных в макросах предотвращает конфликты.
- Создание временных символов в макросах гарантирует уникальность имен.
- Использование пакетов в макросах предотвращает случайное использование имен.
- Гигиенические макросистемы, такие как в Scheme, обеспечивают ссылочную прозрачность.
-
Примеры макросистем
- Схема имеет различные макросистемы, включая синтаксические правила и синтаксический регистр.
- Racket предлагает расширенные возможности макросистемы по сравнению со схемой.
- Другие языки, такие как Julia и Raku, также поддерживают гигиеничные макросистемы.
-
Критика гигиенических макросистем
- Гигиеничные макросистемы могут усложнить преднамеренный учет переменных.
- Некоторые макросистемы предлагают аварийные выходы, сохраняя при этом гарантии гигиены.
-
Рекомендации
- Ссылки на ресурсы, включая статьи и вики-страницы, связанные с макрогигиеной и Scheme.
Полный текст статьи: