HyperAIHyperAI

Command Palette

Search for a command to run...

LLM crée un nouvel AWK fonctionnel : FAWK, un langage de programmation moderne inspiré par l’ancien classique

Après avoir lu The AWK Programming Language, l’auteur s’est lancé dans une tentative d’aborder un problème de l’Advent of Code en AWK, dans le cadre d’un moment de détente. Bien que la partie 1 ait été abordable, la partie 2 — une recherche de plus court chemin avec une contrainte particulière — l’a poussé à adopter une approche fonctionnelle classique (comme un BFS fonctionnel), qu’il a rapidement trouvé impossible à mettre en œuvre efficacement dans AWK. Le langage, bien que puissant pour les traitements de texte et les scripts courts, manque cruellement de fonctionnalités modernes : pas de types algébriques, pas de correspondance exhaustive, pas d’immutabilité, pas de portée lexicale, pas de fonctions d’ordre supérieur, ni de gestion native des tableaux. Les tentatives de simuler ces fonctionnalités ont rapidement conduit à un code complexe, difficile à maintenir et sujet à des erreurs d’implémentation. C’est alors qu’il a imaginé un AWK « évolué » — qu’il appelle FAWK (Functional AWK) — intégrant des fonctionnalités modernes : tableaux premiers de classe avec littéraux, fonctions anonymes et lambdas, portée lexicale, variables globales explicites, et même des pipelines fonctionnels (comme dans les langages fonctionnels modernes). Il a même envisagé des fonctionnalités avancées comme les tableaux multidimensionnels ou les opérations arithmétiques à précision arbitraire. Au lieu de développer tout cela lui-même, il a utilisé un agent LLM (Cursor Agent avec Sonnet 4.5) pour concevoir et implémenter un interpréteur FAWK en Python. À sa grande surprise, l’agent a produit un code fonctionnel, avec des exemples intégrés et une suite de tests complète. Il a également généré des versions en C, Haskell et Rust, toutes compilables. Malgré quelques difficultés avec les opérations à précision arbitraire (où l’LLM a tenté une série de Taylor sans succès), une simple commande uv add mpmath a résolu le problème immédiatement. Ce qui impressionne le plus, c’est que l’agent a correctement implémenté des fonctionnalités complexes comme print à la fois comme expression et instruction (avec redirection), les tableaux multidimensionnels, les chaînes multi-lignes, la compatibilité descendante avec GAWK, ainsi que la gestion subtile des fermetures et de la portée lexicale — sans que l’auteur ait besoin de fournir des détails complexes. Ce succès remet en question ses convictions sur les limites des LLM en développement logiciel. Il réalise désormais que concevoir un langage de programmation personnalisé peut être fait en quelques heures grâce à une interaction intelligente avec un modèle. Toutefois, cette approche pose des problèmes : il n’a aucune connaissance du code généré, ce qui rend toute modification manuelle difficile. Il se demande alors si cette méthode ne risque pas de le rendre dépendant, au détriment de sa capacité à comprendre et à améliorer les projets qu’il a conçus. Il envisage d’ailleurs d’appliquer cette méthode à d’autres projets, comme son langage personnel Cara, basé sur le système de types de Hindley-Milner, qu’il a laissé en suspens. Mais il hésite : il ne veut pas perdre le contrôle de son code. Peut-être que l’avenir réside dans une approche hybride : laisser l’LLM produire le squelette, puis passer du temps à lire, comprendre et affiner le code. Enfin, il souligne que la performance de FAWK n’est pas un objectif pour le moment, puisqu’il vise surtout à écrire des scripts jetables pour des défis comme l’Advent of Code. Mais il imagine déjà pouvoir demander à l’LLM de réécrire FAWK en Rust pour une version plus performante. Pour l’instant, il va « déguster » son nouveau langage en résolvant les puzzles de l’Advent of Code 2025, en cherchant les imperfections — qui seront probablement dues à des fonctionnalités non encore implémentées ou à des interactions inattendues entre les nouvelles fonctionnalités et les comportements classiques d’AWK. Le projet FAWK est disponible sur GitHub (Janiczek/fawk), et bien que non encore mature, il illustre une nouvelle ère du développement logiciel : celle où les idées de langages peuvent être rapidement incarnées grâce à l’assistance des LLM, même si la maîtrise du code final reste un défi.

Liens associés

LLM crée un nouvel AWK fonctionnel : FAWK, un langage de programmation moderne inspiré par l’ancien classique | Articles tendance | HyperAI