2 points par GN⁺ 2025-12-14 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Les énigmes des 12 jours d’Advent of Code 2025 ont été résolues en Gleam, et les messages d’erreur au niveau de Rust ainsi que le style fonctionnel centré sur les pipelines ont été particulièrement impressionnants
  • Des fonctions intégrées comme echo, fold_until et list.transpose simplifient le débogage et la résolution de problèmes de composition, tandis que la sécurité fondée sur les types optionnels s’avère utile pour traiter les énigmes sur grille
  • L’absence de file IO et de fonctionnalités de regex dans la bibliothèque standard, les contraintes du pattern matching sur les listes et les syntaxes de comparaison explicites sont signalées comme des points inconfortables à l’usage répété
  • Les différences de gestion des entiers entre la machine virtuelle Erlang et la cible JavaScript ont rendu nécessaire l’usage de bigi, et certaines énigmes ont été résolues en appelant des outils externes (glpsol)
  • Globalement, le passage à une manière de penser fonctionnelle a rendu la résolution plus claire, et l’auteur exprime l’envie d’appliquer Gleam à de vrais projets (par exemple, le développement d’un serveur web)

Advent of Code 2025 et le choix de Gleam

  • L’auteur, qui termine Advent of Code chaque année, a choisi cette fois le langage Gleam pour résoudre les énigmes sur 12 jours
    • L’événement de cette année a été réduit à 12 jours au lieu de 25, et bien que chaque problème ait été difficile, la structure se prêtait bien à l’apprentissage
  • Le rythme des énigmes étant rapide et des problèmes complexes apparaissant avant que l’outillage ne soit complètement prêt, cela a constitué un environnement idéal pour apprendre un nouveau langage

Les atouts du langage Gleam

  • Il se distingue par une syntaxe concise, des messages d’erreur du compilateur utiles et un retour très pédagogique, au niveau de Rust
  • Le style fonctionnel centré sur l’opérateur de pipeline correspond bien à la structure des problèmes d’AoC (parsing → transformation → fold)
  • L’extension Gleam pour IntelliJ et le LSP ont fonctionné de manière stable, rendant l’environnement de développement agréable
  • La programmation fonctionnelle (FP), par rapport au code impératif, pousse à décrire l’essence du problème plutôt qu’à raisonner en étapes procédurales

Fonctions marquantes et exemples d’usage du code

  • echo : une simple fonction d’affichage qui permet de vérifier une valeur au milieu d’un pipeline, utile pour déboguer sans formatage de chaîne
    • L’absence d’interpolation de chaînes est toutefois mentionnée comme un inconvénient, car elle oblige à multiplier les opérations <>" lors de la génération de texte
  • Type optionnel (dict.get) : permet une exploration sûre des voisins dans les énigmes sur grille, sans vérifications manuelles de bordure
  • Utilitaires de liste
    • list.transpose : l’opération de transposition de matrice simplifie la structure de certaines énigmes
    • list.combination_pairs : génère des paires de points 3D en une ligne, sans boucles imbriquées
    • fold_until : une fonction de fold capable de s’arrêter dès qu’une condition est satisfaite, efficace pour les calculs itératifs des énigmes

Contraintes et points d’inconfort de Gleam

  • Pas de file IO dans la bibliothèque standard, remplacé par le package simplifile
  • Les fonctionnalités de regex nécessitent aussi une dépendance externe (gleam_regexp)
  • Contraintes du pattern matching sur les listes : la forme [first, ..middle, last] n’est pas possible
  • Gestion explicite des comparaisons : il faut utiliser le type order, ce qui alourdit la syntaxe pour des comparaisons simples

Usages avancés et cas par énigme

  • bigi : utilisé pour éviter les dépassements d’entiers sur la cible JavaScript
  • Bitmask XOR : dans le Day 10-1, le problème de basculement des lumières est modélisé avec une opération XOR pour une résolution efficace
  • Appel à glpsol : dans le Day 10-2, un fichier LP est généré puis une commande externe est exécutée pour résoudre un système d’équations linéaires
  • Clé de mémoïsation : dans le Day 11-2, nœud et état sont utilisés ensemble comme clé pour obtenir le résultat immédiatement
  • La dernière énigme dépendait d’hypothèses sur l’entrée et a été résolue par une simple comparaison d’aire (heuristic_area <= max_area)

Conclusion et suite

  • Malgré les limites de sa bibliothèque standard, Gleam montre de vraies forces en sécurité et en expressivité
  • Les pipelines, les types option/result, les fonctions de liste et fold_until rendent la résolution d’énigmes plus claire
  • L’auteur prévoit de l’utiliser dans de vrais projets comme le développement de serveurs web, et indique vouloir continuer à utiliser Gleam pour Advent of Code l’année suivante
  • L’intégralité du code source est publiée dans le dépôt GitHub (tymscar/Advent-Of-Code/2025/gleam/aoc/src)

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.