Макросы Racket vs Scheme
У макросов racket более расширенные функциональные возможности, чем в Scheme или Common Lisp? Я подозреваю, что это особенно важно в отношении модулей, пространств имен и областей видимости и т.д., Но я был бы признателен за простое изложение того, что могут сделать макросы Racket, если что-нибудь, что другие lisp не могут.
Кроме того, Scheme/CL также раскрывает слой читателя разработчику, и, используя это, невозможно ли в этих lisps создавать совершенно новые языки (а не только макросы s-expr), такие как Scribble, как вы можете в Racket?
Другими словами, Racket - это просто философия/конвенция вокруг "языкового программирования" с удобными синтаксическими обертками с этой целью или же она более существенно расширяет Схему, чтобы сделать технически невозможным на этом языке?
Большое спасибо.
Ответы
Ответ 1
В Racket работают две ключевые функции, которые делают "языковое программирование":
- система модулей позволяет специфицировать базовый язык
- контекстно-зависимые макросы
Первая пуля - это в основном то, что делает #lang
. Наличие модульной системы для настройки считывателя, а привязки, доступные в данном модуле, позволяют легко использовать разные языки. Без этого было бы более громоздким работать с такими языками, как Scribble или at-exp
.
Во-вторых, Racket предоставляет переопределяемые контекстно-зависимые макросы, такие как #%app
, #%module-begin
и т.д., которые позволяют настраивать, скажем, каждое приложение-функцию внутри модуля или всего модуля. Это позволяет добавить, например, пропуск проверки типа по всему модулю.
Это не исчерпывающий список функций, которые помогают создавать языки в Racket. Если вам интересно узнать больше об этом, читайте "Языки как библиотеки" .
Ответ 2
Я рекомендую прочитать статью " Составляемые и скомпилированные макросы -
Вы хотите, когда? " Мэтью Флатт.
В нем объясняется, как макросы и модули работают вместе в Racket.
Затем выполните небольшой язык в Racket - скажем, TinyBasic.
Затем сравните с другими языками.
ОБНОВЛЕНИЕ
http://www.cs.utah.edu/plt/publications/jfp12-draft-fcdf.pdf
Ответ 3
См. также ответ Matthew для того же вопроса после того, как @Scott опубликовал его в списке с более поздней обзорной бумагой.