Créez votre langage avec Racket !

Welcome to Racket

Racket est un langage généraliste multi-paradigme, dialecte de Lisp et plus précisément dérivant de Scheme. C’est un langage dynamique pouvant être interprété ou compilé. Il est orienté objet et est principalement connu pour ses fonctionnalités de création de langage. Depuis 30 ans, l’équipe Racket développe et tient à jour un environnement de programmation, des outils et librairies dans une tradition d’étude et de création. Ce framework permet au programmeur de se concentrer sur la praticité et la sémantique de son langage plutôt que sur l’écosystème “vital” à son fonctionnement.

Les Bases

Pour profiter au mieux de l’expérience Racket, les débutants se tourneront vers l’EDI associé DrRacket. Créé à but purement éducationnel, il est utilisé dans certaines universités pour découvrir l’algèbre.

La théorie

Fort d’une communauté active et d’un staff ultra réactif, Racket possède de nombreuses librairies créées par des développeurs indépendants. Ceux ci partagent leur code sur divers réseaux sociaux, faisant de Racket un laboratoire collaboratif très diversifié.

@rocketlang retweete fréquemment les créations de sa communauté

Par où commencer ?
Contrairement à Lisp/Scheme, Racket n’est généralement pas abordé en présentant les notations préfixes, les symboles, les listes… Les créateurs ayant expliqué que “même si ces éléments sont une part de Racket, ils ne constituent pas les ingrédients principaux de ce qui est réellement utilisé en Racket”. Les programmeurs Racket codent avant tout en se basant sur les fonctions, les objets, les exceptions, les threads et les expressions régulières.

Le plus de Racket: Création de langage
Comme précisé plus tôt, une des caractéristiques atypique de Racket est la possibilité de concevoir ses propres langages. Ceux-ci doivent obligatoirement comporter un reader et un expander :

  1. Le reader convertit le code source de notre langage vers un style Racket S-expressions
  2. L’expander détermine pour chaque élément du langage les expressions Racket correspondantes. Ces dernières sont alors évaluées pour produire le résultat.

La pratique, #Lang

Il serait malhonnête de vous présenter ce langage sans l’avoir testé, n’est-ce pas ? Voici donc un petit aperçu, en utilisant l’EDI DrRacket.

Échauffement
La première étape est de spécifier le langage d’écriture via #lang dans la fenêtre de définition (1). On charge ainsi une librairie d’éléments. On créé ensuite des définitions de fonctions, via define, qui peuvent être appelées dans la fenêtre d’instruction (2).

Et enfin ! La création d’un nouveau langage
Nous allons créer un langage d’évaluation de calculs en notation polonaise inversée. On aura quelques fonctionnalités supplémentaires pour la démonstration. Commençons par le reader :

Nous mettons en place une structure de données stacker qui va sauvegarder les éléments à calculer, sous forme de pile.

Maintenant que le reader a transformé le source code en S-expressions, on peut créer notre expander :

Enfin, on paramètre la fonction handle appelée par l’expander pour évaluer les cas :

Il ne reste plus qu’à tester notre langage dans un fichier .rkt :

Test de notre langage

Vous venez de créer votre premier langage de programmation !

--

--