Racket (langage de programmation)

Racket est un langage de programmation multi-paradigmes à usage général et une distribution multi-plateforme qui comprend le langage Racket, un compilateur , une grande bibliothèque standard, un IDE , des outils de développement et un ensemble de langages supplémentaires, notamment Typed Racket (un langage frère de Racket avec un vérificateur de type statique), Swindle, FrTime, Lazy Racket, R5RS & R6RS Scheme , Scribble, Datalog, Racklog, Algol 60 et plusieurs langages d’enseignement.

Raquette
DrRacket sous Linux
Paradigme Multi-paradigme : fonctionnel , impératif , logique , méta , modulaire , orienté objet , réflexif
Famille Zézayer
Conçu par PLT inc.
Développeur PLT inc.
Première apparition 1995 ; il y a 27 ans (1995)
Version stable 8.5 [1] / 1 mai 2022 ; il y a 15 jours (1 May 2022)
Discipline de frappe Dynamique , statique , fort
Plateforme x86 , PowerPC , SPARC , MIPS , ARM
SE Multiplateforme
Licence MIT ou Apache 2.0 [2]
Extensions de nom de fichier .rkt [3]
Site Internet racket-lang .org
Dialectes
Raquette typée, FrTime, Raquette paresseuse, Scribble
Influencé par
Eiffel , [4] Schéma
Influencé
Clojure , [5] Rouille , [6] [7] Schéma [8]

Le langage Racket est un dialecte moderne de Lisp et un descendant de Scheme . Il est conçu comme une plate-forme pour la conception et la mise en œuvre de langages de programmation . [9] En plus du langage de base Racket, Racket est également utilisé pour désigner la famille de langages de programmation [10] et un ensemble d’outils prenant en charge le développement sur et avec Racket. [11] Racket est également utilisé pour la scénarisation , l’enseignement de l’informatique et la recherche.

La plate-forme Racket fournit une implémentation du langage Racket (y compris un système d’exécution , [12] bibliothèques et un compilateur prenant en charge plusieurs modes de Compilation : code machine, indépendant de la machine, interprété et JIT) ainsi que l’ environnement de développement intégré DrRacket (IDE) écrit en Racket. [13] Racket est utilisé par le programme de sensibilisation ProgramByDesign , qui vise à faire de l’informatique “un élément indispensable du programme d’ études en Arts libéraux “. [14] [15]

Le langage de base de Racket est connu pour son système de macros étendu qui permet de créer des langages intégrés et spécifiques à un domaine , des constructions de langage telles que des classes ou des modules , et des dialectes séparés de Racket avec une sémantique différente . [16] [17] [18] [19]

La distribution de la plate-forme est un logiciel gratuit et open-source distribué sous les licences Apache 2.0 et MIT . [20] Les extensions et les packages écrits par la communauté peuvent être téléchargés sur le catalogue de packages de Racket .

Histoire

Développement

Matthias Felleisen a fondé PLT Inc. au milieu des années 1990, d’abord en tant que groupe de recherche, peu après en tant que projet dédié à la production de matériel Pédagogique pour les programmeurs débutants (conférences, exercices/projets, logiciels). En janvier 1995, le groupe décide de développer un environnement de programmation Pédagogique basé sur Scheme . Matthew Flatt a bricolé MrEd, la machine virtuelle originale pour Racket, de libscheme, [21] wxWidgets et quelques autres systèmes libres. [22] Dans les années qui suivirent, une équipe comprenant Flatt, Robby Findler , Shriram Krishnamurthi, Cormac Flanagan et bien d’autres ont produit DrScheme, un environnement de programmation pour les programmeurs novices de Scheme et un environnement de recherche pour la saisie logicielle . [13] Le principal langage de développement pris en charge par DrScheme s’appelait PLT Scheme.

En parallèle, l’équipe a commencé à animer des ateliers pour les enseignants du secondaire, les formant à la conception de programmes et à la programmation fonctionnelle. Des tests sur le terrain avec ces enseignants et leurs élèves ont fourni des indices essentiels pour orienter le développement.

Au cours des années suivantes, PLT a ajouté des langages d’enseignement, un stepper algébrique, [23] une boucle de lecture-évaluation-impression transparente , une imprimante basée sur un constructeur et de nombreuses autres innovations à DrScheme, produisant un environnement de développement de programmes pédagogiques de qualité application. En 2001, l’équipe principale (Felleisen, Findler, Flatt, Krishnamurthi) avait également écrit et publié son premier manuel, How to Design Programs , basé sur sa philosophie d’enseignement.

Le Racket Manifesto [9] détaille les principes qui sous-tendent le développement de Racket, présente le cadre d’évaluation derrière le processus de conception et détaille les opportunités d’améliorations futures.

Historique des versions

La première génération de révisions du schéma PLT a introduit des fonctionnalités pour la programmation au sens large avec à la fois des modules et des classes . La version 42 a introduit des unités – un système de modules de première classe – pour compléter les classes pour le développement à grande échelle. [24] Le système de classe a gagné des fonctionnalités (par exemple , les interfaces de style Java ) et a également perdu plusieurs fonctionnalités (par exemple, l’héritage multiple ) tout au long de ces versions. [16]Le langage a évolué à travers un certain nombre de versions successives et a gagné en popularité dans la version 53, conduisant à un travail approfondi et à la version 100 suivante, qui équivaudrait à une version “1.0” dans les systèmes de version populaires actuels.

La prochaine révision majeure a été nommée Version 200, qui a introduit un nouveau système de module par défaut qui coopère avec les macros. [24] En particulier, le système de modules garantit que le calcul au moment de l’exécution et au moment de la Compilation est séparé pour prendre en charge une “tour de langages”. [25] Contrairement aux unités, ces modules ne sont pas des objets de première classe .

La version 300 a introduit la prise en charge d’ Unicode , la prise en charge des bibliothèques étrangères et des améliorations du système de classes. [24] Plus tard, la série 300 a amélioré les performances de l’exécution du langage avec l’ajout d’un compilateur JIT et le passage à un ramasse-miettes générationnel par défaut .

Lors de la prochaine version majeure, le projet était passé à une numérotation de version plus conventionnelle basée sur la séquence . La version 4.0 a introduit le #langraccourci pour spécifier le langage dans lequel un module est écrit. De plus, la révision a introduit des paires et des listes immuables , la prise en charge du parallélisme à grain fin et un dialecte à Typage statique . [26]

Le 7 juin 2010, PLT Scheme a été renommé Racket. [27] Le changement de nom a coïncidé avec la sortie de la version 5.0. Par la suite, le backend de l’ interface utilisateur graphique (GUI) a été réécrit dans Racket à partir de C++ dans la version 5.1 à l’aide de kits d’ outils d’interface utilisateur natifs sur toutes les plates-formes. [22] La version 5.2 comprenait un outil de vérification de la syntaxe en arrière-plan , une nouvelle bibliothèque de traçage, une bibliothèque de base de données et un nouveau REPL étendu. [28] La version 5.3 comprenait une nouvelle fonctionnalité de sous-module pour les modules chargés en option, [29] de nouveaux outils d’optimisation , une bibliothèque JSON et d’autres fonctionnalités. [30]La version 5.3.1 a introduit des améliorations majeures à DrRacket : le vérificateur de syntaxe en arrière-plan a été activé par défaut et un nouvel outil de prévisualisation de la documentation a été ajouté. [31]

Dans la version 6.0, Racket a publié son système de gestion de packages de deuxième génération. Dans le cadre de ce développement, le principal référentiel DrRacket et Racket a été réorganisé et divisé en un grand ensemble de petits packages, permettant d’installer une raquette minimale et d’installer uniquement les packages nécessaires. [32]

La version 7 de Racket a été publiée avec un nouvel extenseur de macro écrit en Racket dans le cadre des préparatifs pour la prise en charge du passage au système d’exécution Chez Scheme et la prise en charge de plusieurs systèmes d’exécution. [33] [34] Le 19 novembre 2019, Racket 7.5 est sorti. La licence de Racket 7.5 était moins restrictive. Ils utilisent désormais soit la Licence Apache 2.0, soit la Licence MIT. [35] [36]

Le 13 février 2021, Racket 8.0 est sorti. Racket 8.0 marque la première version où Racket avec le système d’exécution Chez Scheme , connu sous le nom de Racket CS, est l’implémentation par défaut. Racket CS est plus rapide, plus facile à entretenir et à développer, rétrocompatible avec les programmes Racket existants et offre une meilleure collecte parallèle des ordures. [37]

Caractéristiques

Le langage de base de Racket comprend des macros , des modules , des fermetures lexicales , des appels de queue , des continuations délimitées , [38] des paramètres (variables fluides), des contrats logiciels , [39] des threads verts et des threads OS , [40] [41] [42] et plus. Le langage est également livré avec des primitives, telles que des espaces d’événements et des dépositaires, qui contrôlent la gestion des ressources et permettent au langage d’agir comme un système d’exploitation pour charger et gérer d’autres programmes. [12]D’autres extensions du langage sont créées avec le puissant système de macros qui, avec le système de modules et les analyseurs personnalisés, peut contrôler tous les aspects d’un langage. [43] La plupart des constructions de langage dans Racket sont implémentées sous forme de macros dans le langage de base. Ceux-ci incluent un système de classes mixin , [16] un système de composants (ou de modules) aussi expressif que l’attribution opaque dans le système de modules ML , [17] et la correspondance de modèles .

De plus, le langage comporte le premier système de contrat pour un langage de programmation d’ordre supérieur . [44] Le système de contrat de Racket est inspiré du travail de conception par contrat pour Eiffel et l’étend pour fonctionner avec des valeurs d’ordre supérieur telles que des fonctions de première classe , des objets, des cellules de référence , etc. Par exemple, un objet qui est vérifié par un contrat peut être assuré d’effectuer des vérifications de contrat lorsque ses méthodes sont finalement appelées.

Racket comprend à la fois des compilateurs de bytecode et JIT (JIT). Le compilateur de bytecode produit un format de bytecode interne exécuté par la machine virtuelle Racket et le compilateur JIT traduit le bytecode en code machine au moment de l’exécution.

Depuis 2004, le langage est également livré avec PLaneT, un gestionnaire de packages intégré au système de modules afin que les bibliothèques tierces puissent être importées et utilisées de manière transparente. En outre, PLaneT dispose d’une politique de gestion des versions intégrée pour empêcher l’enfer des dépendances . [45]

À la fin de 2014, une grande partie du code de Racket a été déplacée dans un nouveau système d’emballage distinct de la base de code principale. Ce nouveau système d’emballage est desservi par un programme client nommé raco . Le nouveau système de package offre moins de fonctionnalités que PLaneT ; un article de blog de Jay McCarthy sur le blog Racket explique la raison du changement et comment dupliquer l’ancien système. [46]

Extensibilité de langage et macros intégrées

Les fonctionnalités qui distinguent le plus clairement Racket des autres langages de la famille Lisp sont ses fonctionnalités d’ extensibilité de langage intégrées qui prennent en charge la création de nouveaux langages spécifiques à un domaine et à usage général . Les fonctionnalités d’extensibilité de Racket sont intégrées au système de modules pour permettre un contrôle contextuel et au niveau du module sur la syntaxe. [18] Par exemple, la #%appforme syntaxique peut être remplacée pour modifier la sémantique de la fonction application . De même, le #%module-beginformulaire permet une analyse statique arbitraire de l’ensemble du module. [18] Comme n’importe quel module peut être utilisé comme langage, via le#langnotation, cela signifie effectivement que pratiquement n’importe quel aspect du langage peut être programmé et contrôlé.

Les fonctionnalités d’extensibilité au niveau du module sont combinées avec un système de macros hygiéniques de type Scheme , qui fournit plus de fonctionnalités que le système de manipulation d’expression s de Lisp , [47] [48] les macros hygiéniques d’ extension de syntaxe de Scheme 84 ou les règles de syntaxe de R5RS . En effet, il est juste de dire que le système de macros est une interface de programmation d’application (API) soigneusement réglée pour les extensions de compilateur . À l’aide de cette API de compilateur, les programmeurs peuvent ajouter des fonctionnalités et des langages entiers spécifiques à un domaine d’une manière qui les rend complètement indiscernables des constructions de langage intégrées.

Le système de macros de Racket a été utilisé pour construire des dialectes linguistiques entiers . Cela inclut Typed Racket, qui est un dialecte progressivement typé de Racket qui facilite la migration du code non typé vers le code typé, [49] Lazy Racket – un dialecte avec évaluation paresseuse , [50] et Hackett, qui combine Haskell et Racket. [51] Le langage de programmation Pédagogique Pyret a été initialement implémenté dans Racket. [52] [53]

D’autres dialectes incluent FrTime ( programmation réactive fonctionnelle ), Scribble (langage de documentation), [54] Slideshow ( langage de présentation ), [55] et plusieurs langages pour l’éducation. [56] [57]

La distribution principale de Racket fournit des bibliothèques pour aider au développement de langages de programmation. [18] Ces langages ne sont pas limités à la syntaxe basée sur l’expression s . En plus des extensions de syntaxe classiques basées sur des tables de lecture, la directive #langpermet l’invocation d’analyseurs arbitraires, qui peuvent être implémentés à l’aide de la bibliothèque d’outils d’analyseur. [58] Voir la programmation logique Racket pour un exemple d’un tel langage.

Environnement de programmation

La plate-forme linguistique fournit un IDE auto-hébergé [13] nommé DrRacket, un serveur Web basé sur la continuation , [59] une interface utilisateur graphique , [22] et d’autres outils. En tant qu’outil de script viable avec des bibliothèques telles que les langages de script courants , il peut être utilisé pour scripter le shell Unix. Il peut analyser les arguments de la ligne de commande et exécuter des outils externes.

DrRacket IDE

DrRacket (anciennement DrScheme) est largement utilisé parmi les cours d’introduction à l’informatique qui enseignent Scheme ou Racket et est loué pour sa simplicité et son attrait pour les programmeurs débutants. L’IDE a été conçu à l’origine pour être utilisé avec le TeachScheme ! projet (maintenant ProgramByDesign ), un effort de sensibilisation de la Northeastern University et d’un certain nombre d’universités affiliées pour attirer des élèves du secondaire vers des cours d’informatique au niveau collégial.

L’éditeur fournit la mise en surbrillance des erreurs de syntaxe et d’exécution, la correspondance des parenthèses, un débogueur et un stepper algébrique. Ses fonctionnalités adaptées aux étudiants incluent la prise en charge de plusieurs “niveaux de langue” (étudiant débutant, étudiant intermédiaire, etc.). Il dispose également d’un support de bibliothèque intégré et d’ outils d’ analyse sophistiqués pour les programmeurs avancés. De plus, la programmation orientée module est prise en charge avec le navigateur de modules, une vue de contour, des tests intégrés et des mesures de couverture et une prise en charge de la refactorisation . Il fournit un accès intégré et contextuel à un vaste système d’aide hyperlié appelé “Help Desk”.

DrRacket est disponible pour Windows , macOS , Unix et Linux avec le système X Window et les programmes se comportent de la même manière sur toutes ces plateformes.

Exemples de codes

Voici un programme trivial hello world :

#lang raquette “Hello, World!”

L’exécution de ce programme produit la sortie :

“Bonjour le monde!”

Voici un programme un peu moins trivial :

Le résultat de ce programme, comme le montre DrRacket #lang racket ( nécessite 2htdp/image ) ( let sierpinski ([ n 8 ]) ( if ( zero? n ) ( triangle 2 ‘ solid ‘ red ) ( let ([ t ( sierpinski ( – n 1 ))]) ( fige ( au- dessus de t ( à côté de t t )) ))))

Ce programme, tiré du site Racket, dessine un triangle de Sierpinski , imbriqué à la profondeur 8.

En utilisant la #langdirective, un fichier source peut être écrit dans différents dialectes de Racket. Voici un exemple du programme factoriel dans Typed Racket, un dialecte statiquement typé de Racket :

#lang tapé/raquette ( : fait ( Entier -> Entier )) ( définir ( fait n ) ( si ( zéro? n ) 1 ( * n ( fait ( – n 1 )))))

Applications et utilisation pratique

En plus d’avoir une base dans la théorie des langages de programmation , Racket a été conçu comme un langage à usage général pour les systèmes de production. Ainsi, la distribution Racket propose une vaste bibliothèque qui couvre la programmation système et réseau, le développement Web, [59] une interface uniforme avec le système d’exploitation sous-jacent, une interface de fonction étrangère dynamique , [60] plusieurs types d’ expressions régulières , des générateurs lexer/parser , [58] programmation logique et un framework GUI complet.

Racket possède plusieurs fonctionnalités utiles pour un langage commercial, parmi lesquelles la possibilité de compiler des exécutables autonomes sous Windows, macOS et Unix, un profileur et un débogueur inclus dans l’ environnement de développement intégré (IDE) et un cadre de test unitaire .

Racket a été utilisé pour des projets commerciaux et des applications Web. Un exemple notable est le site Web Hacker News , qui fonctionne sur Arc , qui est développé dans Racket. Naughty Dog l’a utilisé comme langage de script dans plusieurs de leurs jeux vidéo. [61]

Racket est utilisé pour enseigner l’algèbre aux étudiants par le biais de la conception de jeux dans le programme Bootstrap . [62]

Références

  1. ^ “Raquette v8.5” . 1 mai 2022 . Récupéré le 1er mai 2022 .
  2. ^ Tobin Hochstadt, Sam; Gérard, Sage; Dueck, Joël; Flatt, Matthieu ; Conservatoire de la liberté du logiciel ; Chestek, Paméla (2019-11-15). “Compléter l’effort de renouvellement de licence de Racket” . Récupéré le 27/12/2019 .
  3. ^ “Fichiers DrRacket” . Récupéré le 21 juillet 2019 . L’extension de fichier standard pour un fichier de programme Racket est “.rkt”. Les extensions “.ss”, “.scm” et “.sch” sont également historiquement populaires.
  4. ^ Strickland, TS; Fellesisen, Matthias (2010). “DLS 2010 : Contrats pour les classes de première classe” (PDF) .
  5. ^ Bonnaire-sergent, Ambrose (2012). Un système pratique de type optionnel pour Clojure (thèse). L’Université d’Australie-Occidentale.
  6. ^ “Questions Planet2” .
  7. ^ “Bibliographie de rouille” .
  8. ^ Sperber, Michael; Dybvig, R. Kent; Flatt, Matthieu ; Van Straaten, Anton; et coll. (Août 2007). “Rapport révisé 6 sur le schéma de langage algorithmique (R6RS)” . Comité de pilotage du régime . Récupéré le 13/09/2011 .
  9. ^ un b Felleisen, M.; Findler, RB; Flatt, M.; Krishnamurthi, S.; Barzilay, E.; McCarthy, J.; En ligneTobin-Hochstadt, S. (2015). “Le Manifeste de la raquette” (PDF) . Actes du premier sommet sur les progrès des langages de programmation : 113–128.
  10. ^ “Dialectes de Racket et Scheme” . Récupéré le 15/08/2011 .
  11. ^ “Bienvenue à Racket” . Récupéré le 15/05/2019 .
  12. ^ un Flatt b ; Findler ; Krishnamurthi; Fellisen (1999). Langages de programmation en tant que systèmes d’exploitation (ou Revenge of the Son of the Lisp Machine) . Conférence internationale sur la programmation fonctionnelle.
  13. ^ un bc Findler ; Clément ; Flanagan ; Flatt ; Krishnamurthi; Steckler; Fellisen (2001). “DrScheme : un environnement de programmation pour Scheme” (PDF) . Journal de programmation fonctionnelle .
  14. ^ Fellisen; Findler ; Flatt ; Krishnamurti (2004). “Le projet TeachScheme ! : Informatique et programmation pour chaque étudiant” . Journal de l’enseignement de l’informatique .
  15. ^ “Aperçu” . Programme par conception . Récupéré le 17/08/2011 .
  16. ^ un bc Flatt , M.; Findler, RB; En ligneFelleisen, M. (2006). “Schéma avec classes, mixins et traits” (PDF) . Symposium asiatique sur les langages et les systèmes de programmation .
  17. ^ un b Flatt, M.; En ligneFelleisen, M. (1998). “Unités : Modules sympas pour les langages chauds” . Conception et implémentation d’un langage de programmation .
  18. ^ un bcd Tobin – Hochstadt , S.; St-Amour, V.; Culpepper, R.; Flatt, M.; En ligneFelleisen, M. (2011). “Langues comme bibliothèques” (PDF) . Conception et implémentation d’un langage de programmation .
  19. ^ Felleisen, Matthias; Findler, Robert Bruce; Flatt, Matthieu ; Krishnamurthi, Shriram; Barzilay, Eli; McCarthy, Jay; Tobin-Hochstadt, Sam (2018). “Un langage de programmation programmable” . Communications de l’ACM . 61 (3): 62–71. doi : 10.1145/3127323 . S2CID 3887010 .
  20. ^ “Racket : Licence de logiciel” . Récupéré le 20/10/2015 .
  21. ^ Benson, Brent W. Jr. (26-28 octobre 1994). “libscheme : schéma en tant que bibliothèque C” . Écrit à Santa Fe, NM. Actes du Symposium USENIX sur les langages de très haut niveau . Berkeley, Californie : Association USENIX. p. 7–19. ISBN 978-1880446652. Récupéré le 7 juillet 2013 .
  22. ^ un bc “la Reconstruction de la Couche de Graphiques de la Raquette” . 2010-12-08 . Récupéré le 11/12/2017 .
  23. ^ Clements, J.; Flatt, M.; En ligneFelleisen, M. (2001). “Modélisation d’un stepper algébrique” (PDF) . Symposium européen sur les langages de programmation .
  24. ^ un bc “Notes de mise à jour de noyau de raquette . Archivé de l’original le 2013-05-23 . Récupéré le 15/04/2012 .
  25. ^ Flatt, M. (2002). ” Macros composables et compilables “. Conférence internationale sur la programmation fonctionnelle .
  26. ^ “Schéma PLT version 4.0” . 2008-06-12. Archivé de l’original le 2013-05-23 . Récupéré le 07/08/2012 .
  27. ^ “Du schéma PLT à la raquette” . Racket-lang.org . Récupéré le 17/08/2011 .
  28. ^ “Raquette 5.2” . PLT, Inc. 2011-11-09 . Récupéré le 16/06/2012 .
  29. ^ “Sous-modules” . 2012-06-03 . Récupéré le 07/08/2012 .
  30. ^ “Raquette 5.3” . PLT, Inc. 2012-08-07 . Récupéré le 07/08/2012 .
  31. ^ “Raquette 5.3.1” . PLT, Inc. 2012-11-07 . Récupéré le 07/11/2012 .
  32. ^ “Raquette 6.0” . PLT, Inc. 2014-02-26 . Récupéré le 23/02/2016 .
  33. ^ “Statut Racket-on-Chez: janvier 2018” . 2018-01-05. Archivé de l’original le 2018-04-13 . Récupéré le 13/04/2018 .
  34. ^ “Construire Racket sur Chez Scheme (Rapport d’expérience)” (PDF) . 2019-08-01 . Récupéré le 25/07/2019 .
  35. ^ “La version 7.5 de Racket” . Hub Packt . Récupéré le 28/11/2019 .
  36. ^ “Raquette v7.5” . Raquette | Blogue . Récupéré le 28/11/2019 .
  37. ^ “Raquette v8.0” .
  38. ^ Flatt, M.; Yu, G.; Findler, RB; En ligneFelleisen, M. (2007). “Ajout d’un contrôle délimité et composable à un environnement de programmation de production” (PDF) . Conférence internationale sur la programmation fonctionnelle .
  39. ^ “Contrats” .
  40. ^ “Fils” .
  41. ^ “Avenirs” .
  42. ^ “Lieux” .
  43. ^ Flatt, Matthieu (2012). “Créer des langues en racket” . Communications de l’ACM . Récupéré le 08/04/2012 .
  44. ^ Findler, RB; En ligneFelleisen, M. (2002). “Contrats pour les fonctions supérieures” (PDF) . Conférence internationale sur la programmation fonctionnelle .
  45. ^ Matthews, J. (2006). “Déploiement de composants avec PLaneT : vous le voulez où ?”. Atelier de programmation schématique et fonctionnelle .
  46. ^ “Le système de package Racket et Planet” .
  47. ^ Flatt, Matthieu (2002). “Des macros composables et compilables, vous le voulez quand ?” (PDF) . Conférence internationale sur la programmation fonctionnelle .
  48. ^ Flatt, Culpepper, Darais, Findler, Macros qui fonctionnent ensemble ; Liaisons au moment de la Compilation, expansion partielle et contextes de définition
  49. ^ Tobin-Hochstadt, S.; En ligneFelleisen, M. (2008). “La conception et la mise en œuvre du schéma typé”. Principes des langages de programmation .
  50. ^ Barzilay, E.; En ligneClements, J. (2005). “La paresse sans tout le travail acharné: combiner des langues paresseuses et strictes pour l’enseignement”. Programmation fonctionnelle et déclarative en éducation .
  51. ^ “Le langage de programmation Hackett” . Blog d’Alexis King . Récupéré le 16 juin 2019 .
  52. ^ L’équipage Pyret (24 mai 2011). “Le code Pyret ; ou une justification du langage de programmation Pyret” . Pyret . Récupéré le 16 juin 2019 .
  53. ^ “Langages de programmation et de programmation” . Index de / . 20 septembre 2017 . Récupéré le 16 juin 2019 .
  54. ^ Flatt, M.; Barzilay, E.; Findler, RB (2009). “Scribble : fermer le livre sur les outils de documentation ad hoc”. Conférence internationale sur la programmation fonctionnelle .
  55. ^ Findler, RB; En ligneFlatt, M. (2004). « Diaporama : Présentations fonctionnelles ». Conférence internationale sur la programmation fonctionnelle .
  56. ^ Felleisen, M.; Findler, RB; Flatt, M.; En ligneKrisnamurthi, S. (2009). “Un système d’E / S fonctionnel (ou amusant pour les enfants de première année)” (PDF) . Conférence internationale sur la programmation fonctionnelle .
  57. ^ Felleisen, M.; Findler, RB; Flatt, M.; En ligneKrisnamurthi, S. (2004). “La structure et l’interprétation du programme d’études en informatique” (PDF) . Journal de programmation fonctionnelle . 14 (4): 365–378. doi : 10.1017/S0956796804005076 .
  58. ^ un b “Outils d’analyseur : analyse de style lex et yacc” . Récupéré le 16/08/2011 .
  59. ^ un b Krishnamurthi, Hopkins; McCarthy ; Graunke ; petitjean ; Fellisen (2007). “Mise en œuvre et utilisation du serveur Web du schéma PLT” (PDF) . Journal de programmation d’ordre supérieur et symbolique . 20 (4): 431–460. doi : 10.1007/s10990-007-9008-y . S2CID 17731194 .
  60. ^ Barzilay, E.; En ligneOrlovsky, D. (2004). “Interface étrangère pour le schéma PLT” (PDF) . Schéma et programmation fonctionnelle .
  61. ^ “DSL mzScheme fonctionnels dans le développement de jeux” . Récupéré le 08/05/2012 .
  62. ^ “Bootstrap” . bootstrapworld.org . Récupéré le 11/08/2015 .

Lectures complémentaires

  • Fellisen et al. , 2013. Royaume de Racket . Pas de presse à amidon.
  • Fellisen et al. , 2003. Comment concevoir des programmes . Presse du MIT.

Liens externes

  • Site officiel
Chronologie des dialectes Lisp
  • v
  • t
  • e
1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
LISP 1, 1.5, LISP 2 (abandonné)
Maclisp
Interlisp
LMD
Lisp Machine Lisp
Schème R5RS R6RS R7RS petit
NÉANT
ZIL (Langage d’implémentation de Zork)
Franz Lisp
Lisp commun
Le Lisp
Programme MIT
J
Chez Scheme
Emacs LispComment
AutoLISP
PicoLisp
EuLisp
ILISISP
OpenLisp
Régime PLT Raquette
Ruse GNU
LISP visuel
Clojure
Arc
LFE
Hy
Langagelangage RacketprogrammationracketRécupéré
Comments (0)
Add Comment