Collection d’applications et de programmes géniaux utilisant des macros

Je suis très intéressé par les macros et commence juste à comprendre son vrai pouvoir. Aidez-moi à rassembler un bon usage des systèmes macro.

Jusqu’à présent, j’ai ces constructions:

pattern matching:

Andrew Wright et Bruce Duba. Modèle correspondant à Scheme, 1995

Relations dans l’esprit de Prolog:

Dorai Sitaram. Programmation en schelog. http://www.ccs.neu.edu/home/dorai/schelog/schelog.html

Daniel P. Friedman, William E. Byrd et Oleg Kiselyov. Le schemer raisonné. La presse du MIT, juillet 2005

Matthias Felleisen. Transliterating Prolog dans Scheme. Rapport technique 182, Indiana University, 1985.

Constructions extensibles en boucle:

Sebastian Egner. Compréhension enthousiaste dans Scheme: La conception de SRFI-42. Dans Atelier sur la programmation schématique et fonctionnelle, pages 13-26, septembre 2005.

Olin Shivers. L’anatomie d’une boucle: une histoire de scope et de contrôle. Conférence internationale sur la functional programming, pages 2 à 14, 2005.

Systèmes de classes:

PLT. PLT MzLib: Manuel des bibliothèques. Rapport technique PLT-TR2006-4-v352, PLT Scheme Inc., 2006. http://www.plt-scheme.org/techreports/

Eli Barzilay. Escroquerie. http://www.barzilay.org/Swindle .

Systèmes de composants:

Ryan Culpepper, Scott Owens et Matthew Flatt. Abstraction syntaxique dans les interfaces de composants. Conférence internationale sur la programmation générative et l’ingénierie des composants, pages 373–388, 2005

Vérification du contrat logiciel

Matthew Flatt et Matthias Felleisen. Unités: modules cool pour les langages HOT Dans la conférence ACM SIGPLAN sur la conception et la mise en œuvre de langages de programmation, pages 236–248, 1998

Oscar Waddell et R. Kent Dybvig. Étendre le champ d’application de l’abstraction syntaxique. Au Symposium sur les principes des langages de programmation, pages 203-215, 199

Générateurs d’parsingurs

Scott Owens, Matthew Flatt, Olin Shivers et Benjamin McMullan. Générateurs Lexer et Analyseur dans Scheme. Atelier sur la programmation par schémas et functional programming, pages 41–52, septembre 2004.

Outils pour la sémantique d’ingénierie:

Matthias Felleisen, Robert Bruce Findler et Matthew Flatt. Ingénierie sémantique avec PLT Redex. MIT Press, août 2009.

Spéci fi cations des transformations du compilateur:

Dipanwita Sarkar, Oscar Waddell et R. Kent Dybvig. Un cadre nanopass pour la formation au compilateur. Journal of Functional Programming, 15 (5): 653–667, septembre 2005. Perle éducative.

Nouvelles formes d’exécution

Servlets avec continuations sérialisables Greg Pettyjohn, John Clements, Joe Marshall, Shriram Krishnamurthi et Matthias Felleisen. Continuations de l’inspection généralisée de la stack. Conférence internationale sur la functional programming, pages 216 à 227, 2005.

Théorème-Système de démonstration

Sebastian Egner. Compréhension enthousiaste dans Scheme: La conception de SRFI-42. Atelier sur la programmation schématique et fonctionnelle, pages 13-26, septembre 2005.

Extensions de la langue de base avec les types

Sam Tobin-Hochstadt et Matthias Felleisen.La conception et la mise en œuvre du schéma typé. Symposium sur les principes des langages de programmation, pages 395–406, 2008.

Paresse

Eli Barzilay et John Clements. La paresse sans tout le travail acharné: combiner des langages paresseux et ssortingcts pour l’enseignement. En functional programming et déclarative en éducation, pages 9-13, 2005.

Réactivité Fonctionnelle

Gregory H. Cooper et Shriram Krishnamurthi. Intégration d’un stream de données dynamic dans un langage appelant valeur. Symposium européen sur la programmation, 2006


Référence:

Recueilli de la dissertation de Ryan Culpepper

    Culpepper & Felleisen, Macros fortifiants, ICFP 2010

    Culpepper, Tobin-Hochstadt et Felleisen, Macrologie avancée et mise en œuvre d’un système typé, Scheme Workshop 2007

    Flatt, Findler, Felleisen, Schéma avec Classes, Mixins et Traits, APLAS 2006

    Herman, Meunier, Améliorer l’parsing statique des langues embarquées via l’évaluation partielle, ICFP 2004

    Shivers, Carlstrom, Gasbichler & Sperber (1994 et suivants) Le manuel de référence Scsh .

    Possède de nombreux exemples d’utilisation de macros pour intégrer des mini-langages dans Scheme. J’ai été initié à la technique de définition de macros qui cite implicitement leur argument. Examinez l’utilisation des formulaires de processus, des expressions régulières et des mini-langages similaires à awk. Scsh est ma recommandation comme sharepoint départ pour jouer avec des macros.

    Hilsdale & Friedman (2000) Écriture de macros dans un style de suivi continu .

    Montre comment les macros de règles de syntaxe faibles peuvent être rendues puissantes à l’aide du style de passage de continuation. Donne beaucoup d’exemples.

    Flatt, Culpepper, Darais & Findler (soumis) Macros fonctionnant ensemble – Liaisons à la compilation, extension partielle et définitions .

    Fournit une vue d’ensemble et une sémantique de l’approche des macros dans le schéma Racket / PLT. Pas beaucoup d’exemples, mais je pense que le papier a quelque chose que vous cherchez.

    ReadScheme! N’oubliez pas de vérifier la bibliographie complète sur ReadScheme.

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

    Un exemple que je pense que vous avez manqué est l’incorporation de la syntaxe SQL dans Scheme. http://repository.readscheme.org/ftp/papers/sw2002/schemeunit-schemeql.pdf

    Les macros sont également utilisées pour écrire des supports pour les tests automatisés.

    Pas un schéma, mais un dialecte Lisp assez similaire avec une utilisation très étendue des macros: http://www.meta-alternative.net/mbase.html

    Il existe des macros implémentant différents types de correspondance de modèles, des compréhensions de listes, divers générateurs d’parsingurs (y compris une implémentation PEG / Packrat), des prologs intégrés, des inférences ADT visiteurs Macros de syntaxe de type Scheme, et bien plus encore. Certaines parties de cette fonctionnalité peuvent être potentiellement scopes sur Scheme, d’autres parties nécessitent un système de macros étendu avec un contexte explicite.

    J’appendais “la bibliothèque standard Scheme” à la liste. Regardez le fichier boot-9.scm dans la dissortingbution guile. La plupart des formes de schémas les plus couramment utilisées – case , and , etc. – sont définies comme des macros.

    Ceci n’est pas particulièrement précis dans la mesure où il s’étend sur un grand nombre de publications très anciennes que je n’ai jamais lues, mais les gros morceaux du système d’objects Common Lisp et du protocole Meta-Object * d’IRRC peuvent être; sont; ou étaient initialement, construit avec des macros …

    * Qui composent IMHO de loin la programmation de système OO la plus avancée jamais vue

    Voici un exemple d’utilisation impressionnante de macros de schémas pour créer des systèmes robotiques efficaces écrits dans un schéma

    Vérifiez l’une de mes implémentations favorites d’une API REST: le client api Slack, qui n’est pas écrit dans Scheme mais dans Racket.

    octotep / raquette-mou-api