3 points par GN⁺ 23 일 전 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • 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 try et la concurrence basée sur task assurent 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 comme fmt, io ou os via import

Une syntaxe familière

  • Il adopte une structure syntaxique proche de Rust
    • prise en charge du pattern matching via enum et match
    • définition de méthodes possible avec des blocs struct et impl
  • C’est un langage orienté expressions : if, let et 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 interface et écriture de fonctions génériques via des contraintes T: 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 nil est 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

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 try simplifient la propagation des erreurs
  • La concurrence s’appuie sur task et Channel, 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 recover est fourni pour la récupération après panic, avec un traitement sûr des erreurs via le type Result
  • La syntaxe defer est 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 Option et Result sont respectivement transformés en structures lisette.Option et lisette.Result
    • les instructions match sont converties en conditions Go traitant chaque branche
    • l’opérateur ? est remplacé en interne par du code de vérification de Result
  • À titre d’exemple, la fonction classify reçoit un Option<int> puis est convertie en conditions Go explicites, tandis que la fonction combine devient du code Go qui vérifie Result

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.

Aucun commentaire pour le moment.