Коллекция отличных приложений и программ с использованием макросов

Я очень очень заинтересован в макросах и только начинаю понимать его истинную силу. Пожалуйста, помогите мне собрать некоторые замечательные примеры использования макросистем.

Пока у меня есть эти конструкции:

Шаблон соответствия:

Эндрю Райт и Брюс Дуба. Сопоставление с образцом для схемы, 1995

Отношения в духе Пролога:

Дорай Ситарам. Программирование в Schelog. http://www.ccs.neu.edu/home/dorai/schelog/schelog.html

Даниэль П. Фридман, Уильям Э. Берд и Олег Киселев. Разумный интриган. MIT Press, июль 2005 г.

Матиас Феллайзен. Транслитерирование Пролога в Схему. Технический отчет 182, Университет Индианы, 1985.

Расширяемые циклические конструкции:

Себастьян Эгнер. Стремительное понимание в Схеме: проект SRFI-42. На семинаре по схеме и функциональному программированию, стр. 13–26, сентябрь 2005 г.

Олин Шиверс. Анатомия петли: история масштабов и контроля. В Международной конференции по функциональному программированию, стр. 2–14, 2005.

Системы класса:

PLT. PLT MzLib: руководство по библиотекам. Технический отчет PLT-TR2006-4-v352, PLT Scheme Inc., 2006. http://www.plt-scheme.org/techreports/

Эли Барзилай. Лохотрон. http://www.barzilay.org/Swindle.

Компонентные системы:

Райан Калпеппер, Скотт Оуэнс и Мэтью Флэтт. Синтаксическая абстракция в интерфейсах компонентов. На Международной конференции по генеративному программированию и проектированию компонентов, страницы 373–388, 2005

Проверка контракта на программное обеспечение

Мэтью Флатт и Матиас Феллайзен. Единицы: Прикольные модули для горячих языков. На конференции ACM SIGPLAN по разработке и внедрению языков программирования, стр. 236–248, 1998.

Оскар Уодделл и Р. Кент Дибвиг. Расширение возможностей синтаксической абстракции. В Симпозиуме по принципам языков программирования, стр. 203–215, 199

Генераторы парсеров

Скотт Оуэнс, Мэтью Флэтт, Олин Шиверс и Бенджамин Макмаллан. Генераторы лексера и парсера в схеме. На семинаре по схеме и функциональному программированию, стр. 41–52, сентябрь 2004 г.

Инструменты для инженерной семантики:

Матиас Феллайзен, Роберт Брюс Финдлер и Мэттью Флэтт. Разработка семантики с помощью PLT Redex. MIT Press, август 2009 г.

Спецификации преобразований компилятора:

Дипанвита Саркар, Оскар Уодделл и Р. Кент Дибвиг. Структура нанопасс для обучения компилятора. Журнал функционального программирования,15(5):653–667, сентябрь 2005 года. Образовательная жемчужина.

Новые формы исполнения

Сервлеты с сериализуемыми продолжениями Грег Петтиджон, Джон Клементс, Джо Маршалл, Шрирам Кришнамурти и Матиас Феллайзен. Продолжения обобщенной проверки стеков. В Международной конференции по функциональному программированию, стр.216–227, 2005.

Система доказательства теорем

Себастьян Эгнер. Стремительное понимание в Схеме: проект SRFI-42. На семинаре по схемам и функциональному программированию, стр. 13–26, сентябрь 2005 г.

Расширения базового языка с типами

Сэм Тобин-Хохштадт и Матиас Феллайзен. Разработка и реализация типизированной схемы. В Симпозиуме по принципам языков программирования, стр. 395–406, 2008.

Лень

Эли Барзилай и Джон Клементс. Лень без всякой тяжелой работы: сочетание ленивых и строгих языков для обучения. В Функциональное и декларативное программирование в образовании, стр. 9–13, 2005.

Функциональная реактивность

Грегори Х. Купер и Шрирам Кришнамурти. Встраивание динамического потока данных в язык вызовов по значению. На Европейском Симпозиуме по Программированию, 2006


Ссылка:

Собрание из диссертации Райана Калпеппера

8 ответов

Culpepper & Felleisen, обогащающие макросы, ICFP 2010

Калпеппер, Тобин-Хохштадт и Феллайзен, Усовершенствованная макрология и внедрение типизированной схемы, Схема Семинар 2007

Флатт, Финдлер, Фелляйзен, Схема с классами, миксин и черты, APLAS 2006

Херман, Менье, Совершенствование статического анализа встроенных языков с помощью частичной оценки, ICFP 2004

Shivers, Carlstrom, Gasbichler & Sperber (1994 и позже) Справочное руководство по Scsh.

Имеет много хороших примеров использования макросов для встраивания мини-языков в Scheme. Познакомил меня с техникой определения макросов, которые неявно цитируют их аргументы. Посмотрите на использование форм процессов, регулярных выражений и мини-языков, похожих на awk. Scsh - моя рекомендация в качестве отправной точки для игры с макросами.

Хилсдейл и Фридман (2000). Написание макросов в стиле продолжения.

Показывает, как слабые макросы синтаксических правил можно сделать мощными, используя стиль передачи продолжения. Дает множество примеров.

Макросы Flatt, Culpepper, Darais & Findler (представленные), которые работают вместе - привязки времени компиляции, частичное расширение и контексты определения.

Предоставляет обзор и семантику для подхода к макросам в Racket/PLT Scheme. Примеров не так много, но я думаю, что в статье есть то, что вы ищете.

ReadScheme! Не забудьте проверить обширную библиографию на ReadScheme.

http://library.readscheme.org/page3.html

Один пример, который вы пропустили, - это встраивание синтаксиса SQL в Scheme. http://repository.readscheme.org/ftp/papers/sw2002/schemeunit-schemeql.pdf

Макросы также используются для написания поддержки для автоматического тестирования.

Не Схема, но несколько похожий диалект Лисп с очень широким использованием макросов: http://www.meta-alternative.net/mbase.html

Существуют макросы, реализующие различные виды сопоставления с образцом, списки, генераторы различных синтаксических анализаторов (включая реализацию PEG/Packrat), встроенный Prolog, вывод посетителей ADT (например, сбор шаблонов в Haskell), макросы расширяемого синтаксиса, система типов Хиндли-Милнера, Схемоподобные синтаксические макросы и многое другое. Части этой функциональности могут быть потенциально перенесены в Scheme, другие части требуют расширенной системы макросов с явным контекстом.

Я бы добавил в список "Стандартную библиотеку Схемы". Посмотри файл boot-9.scm в раздаче лукавства. Многие из наиболее часто используемых форм Схемы - case, andи т. д. - определяются там как макросы.

Вот пример довольно удивительного использования макросов схемы для создания эффективных робототехнических систем, написанных на схеме

Посмотрите одну из моих любимых реализаций REST API: клиент Slack api, который написан не на Scheme, а на Racket.

octotep / Ракетка-слабины-апи

Это не совсем точно, поскольку оно разбросано по большому количеству очень старых публикаций, большинство из которых я никогда не читал, но большие фрагменты IIRC Common Lisp Object System и Meta-Object Protocol* могут быть; являются; или изначально были построены с макросами...

* Которые составляют IMHO, безусловно, самая продвинутая система программирования ОО когда-либо видела

Другие вопросы по тегам