Коллекция отличных приложений и программ с использованием макросов - PullRequest
57 голосов
/ 28 декабря 2010

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

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

Сопоставление с образцом:

Эндрю Райт и Брюс Дуба.Сопоставление с образцом Схемы, 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 ]

8 голосов
/ 30 декабря 2010

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

Culpepper, Tobin-Hochstadt и Felleisen, Advanced Macrology и реализация типизированной схемы, Scheme Workshop 2007

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

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

6 голосов
/ 09 февраля 2011

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

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

Hilsdale & Friedman (2000) Написание макросов в стиле продолжения-продолжения .

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

Флатт, Калпеппер, Дарайс и Финдлер (представлены) Макросы, которые работают вместе - привязки времени компиляции, частичное расширение и контексты определения .

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

4 голосов
/ 10 августа 2011

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

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

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

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

3 голосов
/ 09 февраля 2011

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

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

2 голосов
/ 21 марта 2012

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

0 голосов
/ 08 июня 2017

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

octotep / рэкет-отвисшей апи

0 голосов
/ 25 ноября 2014

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

0 голосов
/ 09 февраля 2011

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

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

...