Подтвердить что ты не робот

Макросы Racket vs Scheme

У макросов racket более расширенные функциональные возможности, чем в Scheme или Common Lisp? Я подозреваю, что это особенно важно в отношении модулей, пространств имен и областей видимости и т.д., Но я был бы признателен за простое изложение того, что могут сделать макросы Racket, если что-нибудь, что другие lisp не могут.

Кроме того, Scheme/CL также раскрывает слой читателя разработчику, и, используя это, невозможно ли в этих lisps создавать совершенно новые языки (а не только макросы s-expr), такие как Scribble, как вы можете в Racket?

Другими словами, Racket - это просто философия/конвенция вокруг "языкового программирования" с удобными синтаксическими обертками с этой целью или же она более существенно расширяет Схему, чтобы сделать технически невозможным на этом языке?

Большое спасибо.

4b9b3361

Ответ 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 опубликовал его в списке с более поздней обзорной бумагой.