Коллекция больших приложений и программ с использованием макросов
Я очень заинтересован в Макросах и только начинаю понимать его истинную силу. Пожалуйста, помогите мне собрать большое использование макросистем.
До сих пор у меня эти конструкции:
Соответствие шаблону:
Эндрю Райт и Брюс Дуба. Шаблон сопоставление для Схемы, 1995
Отношения в духе Пролога:
Дорай Ситарам. Программирование в schelog. http://www.ccs.neu.edu/home/dorai/schelog/schelog.html
Даниэль П. Фридман, Уильям Э. Бирд, и Олег Киселев. Рассужденный Schemer. Пресса MIT, июль 2005 г.
Маттиас Феллеисен. транслитерации Пролог в схему. Технический отчет 182, Университет Индианы, 1985 г.
Расширяемые контуры:
Себастьян Эгнер. Стремительное понимание в схеме: дизайн SRFI-42. В Семинар по схеме и функциональному Программирование, страницы13-26, сентябрь 2005. Олин дрожит. Анатомия цикла: a история охвата и контроля. В Международная конференция по функциональным Программирование, страницы 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
Проверка контрактов на программное обеспечение
Мэтью Флатт и Маттиас Феллеисен. Единицы: Прохладные модули для языков HOT В конференции ACM SIGPLAN Программирование языка Реализация, страницы 236-248, 1998
Оскар Уодделл и Р. Кент Дыбвиг. Расширение сферы синтаксиса абстракция. В Симпозиуме по принципам языков программирования, страниц 203-215, 199
Генераторы Parser
Скотт Оуэнс, Мэтью Флатт, Олин Дрожь, и Бенджамин Макмуллан. лексер и генераторы парсера в Схеме. В Семинар по схеме и функциональному Программирование, страницы 41-52, сентябрь 2004.
Инструменты для инженерной семантики:
Маттиас Феллейсен, Роберт Брюс Findler, и Мэтью Флатт. Семантика Инженерное дело с PLT Redex. MIT Press, Август 2009 года.
Спецификации трансформаций компилятора:
Дипанвита Саркар, Оскар Уодделл и Р. Кент Дыбвиг. Нанопасс рамки для обучения компиляторов. Журнал функциональных Программирование, 15 (5): 653-667, сентябрь 2005. Обучающая жемчужина.
Новые формы выполнения
Сервлеты с сериализуемыми продолжения Грег Петтион, Джон Клементс, Джо Маршалл, Шрирам Кришнамурти и Маттиасом Феллезином. Продолжения из обобщенного стека осмотр. В международном Конференция по функциональному программированию, pages216-227, 2005.
Теоретико-доказательная система
Себастьян Эгнер. Стремление к пониманию схемы: дизайн SRFI-42. В семинаре по схеме и функциональному программированию, стр. 13-26, Сентябрь 2005 года.
Расширения базового языка с типами
Сэм Тобин-Хохштадт и Маттиас Феллесины. Дизайн и реализация типизированной схемы. В Симпозиум по принципам программирования Языки, страницы 395-406, 2008.
Лень
Эли Барзилай и Джон Клементс. Лень без всяких трудных работа: объединение ленивых и строгих языки для обучения. В функциональном и декларативное программирование в образование, страницы 9-13, 2005.
Функциональная реактивность
Грегори Х. Купер и Шрирам Кришнамурти. Встраивание динамических поток данных на языке вызова по значению. В Европейском симпозиуме по программированию, 2006
Ссылка:
Собрано из История Райана Кулпеппера
Ответы
Ответ 1
Culpepper и Felleisen, Укрепляющие макросы, ICFP 2010
Culpepper, Tobin-Hochstadt and Felleisen, передовая макрология и внедрение типизированной схемы, семинар по схемам 2007
Flatt, Findler, Felleisen, схема с классами, миксинами и чертами, APLAS 2006
Герман, Менье, улучшение статического анализа встроенных языков с помощью частичной оценки, ICFP 2004
Ответ 2
Shivers, Carlstrom, Gasbichler и Sperber (1994 и последующие) Справочное руководство Scsh.
Имеет много хороших примеров использования макросов для встраивания мини-языков в Схему. Предложил мне технику определения макросов, которые неявно цитируют их аргумент. Посмотрите на использование форм процесса, регулярных выражений и awk-подобных мини-языков. Scsh - моя рекомендация в качестве отправной точки для игры с макросами.
Hilsdale and Friedman (2000) Написание макросов в стиле продолжения прохождения.
Показывает, как макросы слабых синтаксических правил могут быть сделаны мощными, используя стиль продолжения прохождения. Дает много примеров.
Flatt, Culpepper, Darais и Findler (представлены) Макросы, которые работают вместе - привязки времени компиляции, частичное расширение и контексты определения.
Предоставляет обзор и семантику для подхода к макросам в схеме Racket/PLT. Не так много примеров, но я думаю, что в документе есть что-то, что вы ищете.
Ответ 3
ReadScheme! Не забудьте проверить обширную библиографию на ReadScheme.
http://library.readscheme.org/page3.html
Один пример, который, я думаю, вы пропустили, - это встраивание синтаксиса SQL в Scheme.
http://repository.readscheme.org/ftp/papers/sw2002/schemeunit-schemeql.pdf
Макросы также используются для записи носителей для автоматического тестирования.
Ответ 4
Не схема, а несколько похожий диалект Lisp с очень широким использованием макросов: http://www.meta-alternative.net/mbase.html
Существуют макросы, реализующие различные типы сопоставлений шаблонов, списки, различные генераторы парсеров (включая реализацию PEG/Packrat), встроенный Prolog, вывод посетителей ADT (например, лома вашего шаблона в Haskell), расширяемые синтаксические макросы, Hindley-Milner Scheme-подобный макрос синтаксиса и многие другие. Части этой функциональности могут быть потенциально перенесены на Схему, другие части нуждаются в расширенной макросистеме с явным контекстом.
Ответ 5
Я бы добавил в список "Стандартную библиотеку Схемы". Посмотрите файл boot-9.scm
в дистрибутиве guile. Многие из наиболее часто используемых форм схемы - case
, and
и т.д. - определяются там как макросы.
Ответ 6
Это не особенно точно, поскольку он распространяется по большому количеству очень старых публикаций, большинство из которых я никогда не читал, но большие фрагменты IIRC общей системы Lisp Object и Meta- Объектный протокол *, может быть; находятся; или были изначально построены с макросами...
*, которые составляют IMHO, на сегодняшний день самое продвинутое системное программирование OO когда-либо видели
Ответ 7
Ниже приведен пример довольно впечатляющего использования макросов схемы для создания эффективных систем робототехники, написанных на схеме
Ответ 8
Проверьте одну из моих реализаций избранного REST API: клиент Slack api, который не написан на Схеме, но он находится в Racket.
octotep/racket-slack-api