Lisette — un petit langage compilé vers le runtime Go à partir d’une syntaxe inspirée de Rust
(lisette.run)- Petit langage utilisant une syntaxe de style Rust tout en s’exécutant sur le runtime Go, avec l’ambition de combiner les atouts des deux langages
- Une architecture qui renforce la sûreté et la puissance d’expression grâce aux types de données algébriques, au pattern matching, au système de types Hindley-Milner et à l’immutabilité par défaut
- L’import direct de packages Go, l’opérateur de pipeline, les blocs
tryet la concurrence basée surtaskassurent l’interopérabilité avec l’écosystème Go - La détection d’erreurs à la compilation, des messages de diagnostic explicites et la prise en charge du LSP améliorent à la fois l’expérience développeur et la stabilité du code
- Point clé : le code Lisette est transformé en code Go clair et lisible, ce qui permet une intégration naturelle dans des projets Go existants
Présentation de Lisette
- Lisette est un petit langage basé sur une syntaxe Rust et compilé vers le runtime Go
- Il se caractérise par les types de données algébriques, le pattern matching, l’absence de
nil, le système de types Hindley-Milner, l’immutabilité par défaut et l’interopérabilité avec l’écosystème Go - Installation possible avec la commande
cargo install lisette, et utilisation directe de packages Go commefmt,ioouosvia import
Une syntaxe familière
- Il adopte une structure syntaxique proche de Rust
- prise en charge du pattern matching via
enumetmatch - définition de méthodes possible avec des blocs
structetimpl
- prise en charge du pattern matching via
- C’est un langage orienté expressions :
if,letet les blocs renvoient tous une valeur - Il prend en charge le chaînage et les lambdas, ce qui permet d’exprimer de manière concise le traitement des variables d’environnement ou la manipulation de chaînes
- Il gère les interfaces et les génériques, avec définition de
interfaceet écriture de fonctions génériques via des contraintesT: Trait - Les syntaxes if let et let else permettent de traiter simplement le type
Option
Sûreté
-
Détection à la compilation d’erreurs susceptibles de survenir dans le runtime Go
- une erreur est produite si tous les motifs ne sont pas couverts dans une instruction
match - l’usage de
nilest impossible, les valeurs manquantes étant représentées par Option<T> - un avertissement est émis si une valeur de retour Result est ignorée
- un avertissement est émis si un type privé est exposé dans une API publique
- une erreur survient si une variable immuable est transmise comme argument mutable
- l’oubli d’un champ de structure provoque une erreur de compilation
- les messages de diagnostic fournissent l’emplacement précis dans le code et des suggestions de correction
- la prise en charge du LSP (Language Server Protocol) permet l’utilisation dans les principaux éditeurs comme VSCode, Neovim ou Zed
- une erreur est produite si tous les motifs ne sont pas couverts dans une instruction
Utilisabilité
- Conçu avant tout pour l’interopérabilité avec Go
- L’opérateur de pipeline (
|>) permet d’exprimer simplement le chaînage de fonctions - Les blocs
trysimplifient la propagation des erreurs - La concurrence s’appuie sur
tasketChannel, dans un modèle proche des goroutines de Go - Des attributs de sérialisation permettent de définir les noms de champs JSON, leur omission, leur conversion en chaîne ou encore des tags de validation
- Un bloc
recoverest fourni pour la récupération aprèspanic, avec un traitement sûr des erreurs via le typeResult - La syntaxe
deferest prise en charge pour garantir le nettoyage des ressources ou le rollback de transactions
Un résultat de compilation transparent
- Le code Lisette est converti en code Go clair et facile à lire
- les types
OptionetResultsont respectivement transformés en structureslisette.Optionetlisette.Result - les instructions
matchsont converties en conditions Go traitant chaque branche - l’opérateur
?est remplacé en interne par du code de vérification deResult
- les types
- À titre d’exemple, la fonction
classifyreçoit unOption<int>puis est convertie en conditions Go explicites, tandis que la fonctioncombinedevient du code Go qui vérifieResult
Informations supplémentaires
- dépôt officiel : github.com/ivov/lisette
- publié sous licence MIT, le projet est développé par Iván Ovejero en 2026
Aucun commentaire pour le moment.