Elo – Quand une IA écrit un langage de programmation complet sans intervention humaine
Vous connaissez probablement les prouesses de Claude Code pour décompiler du code , ou encore son utilisation pour automatiser la création d'outils , mais là, on a passé un cap.
Bernard Lambeau, un développeur belge avec plus de 25 ans d'expérience et un doctorat en informatique, a décidé de pousser le concept jusqu'au bout à savoir utiliser Claude Code non pas pour écrire quelques scripts, mais pour générer un langage de programmation complet.
Carrément ! Il est chaud Bernard, car quand je dis complet, je parle d'un compilateur entier avec analyseur lexical, un parseur, un système de typage, des backends multiples...etc. Voilà, comme ça, en full pair-programming avec une IA.
Ça s'appelle Elo et l'idée, c'est de proposer un langage tellement sécurisé by design qu'on peut le confier à des non-développeurs… ou à des IA. Pas de variables mutables, pas d'effets de bord, pas de références qui traînent dans tous les sens. Bref, un langage où il est quasi impossible de faire une bêtise, même en essayant très fort.
Alors pourquoi créer un énième langage alors qu'on en a déjà des centaines ?
Hé bien le truc, c'est que la plupart des langages existants partent du principe que vous savez ce que vous faites. JavaScript, Python, Ruby… Ils vous font confiance. Trop, parfois.
Elo, lui, adopte l'approche inverse... le "zero-trust". Le langage ne fait confiance à personne, ni au développeur, ni à l'IA qui pourrait l'utiliser. Ainsi, chaque expression est pure, chaque fonction est déterministe, et le compilateur vérifie tout avant d'exécuter quoi que ce soit.
Et surtout Elo est un langage d'expressions portables, ce qui veut dire que vous écrivez votre logique une fois, et vous pouvez la compiler vers JavaScript, Ruby ou même du SQL PostgreSQL natif. Oui, oui, le même code peut tourner dans votre navigateur, sur votre serveur Ruby, ou directement dans votre base de données. Et là, y'a de quoi faire des trucs sympas pour peu qu'on ait besoin de partager de la logique métier entre différents environnements.
Le typage est volontairement minimaliste mais costaud et se compose de 10 types de base : Int, Float, Bool, String, DateTime, Duration, Tuple, List, Null et Function. Pas de classes, pas d'héritage, pas d'objets au sens classique mais juste des valeurs et des fonctions, ce qui peut paraître limité dit comme ça, mais c'est justement cette contrainte qui rend le langage sûr.
Moins de features, c'est moins de façons de se planter !
L'opérateur pipe |> est le cœur du langage car au lieu d'imbriquer des appels de fonctions comme des poupées russes, vous chaînez les transformations de gauche à droite. Par exemple, pour récupérer tous les clients actifs et compter combien il y en a, vous écrivez quelque chose comme customers |> filter(active: true) |> size. C'est lisible, c'est fluide, et même quelqu'un qui n'a jamais codé comprend ce qui se passe.
Et il y a aussi l'opérateur alternative |. Comme ça, si une expression peut retourner null, vous pouvez prévoir un fallback avec ce simple pipe. Genre user.nickname | user.firstname | "Anonymous". Ça essaie dans l'ordre et ça prend la première valeur non-nulle.
Comme ça, fini les cascades de if/else pour gérer les cas où une donnée manque ! Youpi !
Voilà pour le langage...
Maintenant parlons un peu du bonhomme car Bernard Lambeau n'est pas un inconnu dans le monde du développement. Il est derrière Bmg (une implémentation de l'algèbre relationnelle), Finitio (un langage de schémas de données), Webspicy (pour tester des APIs), et Klaro Cards (une app no-code). Tout cet écosystème partageait déjà une certaine philosophie, et Elo vient unifier le tout. Son langage est d'ailleurs utilisé en production dans Klaro Cards pour exprimer des règles métier que les utilisateurs non-techniques peuvent modifier.
Ce qui m'a intéressé dans toute cette histoire, c'est surtout la méthode de développement de Bernard qui a travaillé en pair-programming avec Claude Code pendant des semaines, voire des mois. L'IA générait du code, et lui relisait, corrigeait, guidait, et l'IA apprenait de ces corrections pour les itérations suivantes. Sur l'ensemble du projet, chaque ligne de code, chaque test, chaque doc a été écrit par Claude et croyez le ou non, le code est clean car Bernard est un pro !
D'ailleurs, il a enregistré une démo de 30 minutes où il montre le processus en live .
En regardant cette démo, on découvre une vraie méthodologie de travail avec l'IA car il n'a pas juste balancé des prompts au hasard en espérant que ça marche. Au contraire, il a mis en place tout un système pour que la collaboration soit efficace et sécurisée.
Premier truc : le "safe setup". Bernard a configuré un environnement Docker sandboxé dans un dossier .claude/safe-setup afin de laisser Claude Code exécuter du code dans un conteneur Alpine isolé, sans risquer de faire des bêtises sur la machine hôte. En entreprise, c'est exactement le genre de garde-fou qu'on veut quand on laisse une IA bidouiller du code. Le conteneur a ainsi accès aux fichiers du projet, mais pas au reste du système.
Ensuite, il y a la documentation projet via un fichier CLAUDE.md à la racine. Ce fichier décrit l'architecture du langage avec le parser, l'AST, le système de typage, les différents backends, comme ça, quand Claude démarre une session, il lit ce fichier et comprend la structure du projet.
La gestion des tâches est aussi bien pensée puisqu'il utilise un système de dossiers façon Kanban : to-do, hold-on, done, et analyze. Chaque tâche est un fichier Markdown qui ressemble à une user story.
Ainsi, quand il veut ajouter une feature, il crée un fichier dans to-do avec la description de ce qu'il veut. Claude lit le fichier, implémente, et Bernard déplace le fichier dans done une fois que c'est validé. Le dossier analyze sert pour les trucs à creuser plus tard, et hold-on pour ce qui attend des décisions.
Ce qui est bien trouvé aussi, c'est qu'il utilise trois modes d'interaction selon les situations. Le mode "accept-it" pour les trucs simples où Claude propose et Bernard dispose. Le "plan mode" quand la tâche est complexe avec Claude qui pose des questions de design avant d'écrire du code. Et le mode autonome avec --dangerously-skip-permissions quand il a parfaitement confiance pour une série de modifications.
Bernard a aussi créé plusieurs personas spécialisés (des agents) que Claude peut invoquer. Un agent "security" qui analyse le code du point de vue sécurité. Un agent "DDD" (Domain-Driven Design) qui vérifie la cohérence du vocabulaire métier. Un agent "skeptic" qui cherche les cas limites et les bugs potentiels. Et un agent "Einstein" qui détecte quand le code devient trop complexe et suggère des simplifications.
En gros, 4 cerveaux virtuels qui relisent chaque modification.
Et là où ça devient vraiment ouf, c'est que Elo se teste lui-même. Les tests d'acceptance sont écrits en Elo, avec une syntaxe d'assertions qui se compile vers JavaScript, Ruby et SQL. Comme ça quand Bernard ajoute une feature, il écrit d'abord le test en Elo, puis Claude implémente jusqu'à ce que le test passe. Le langage valide sa propre implémentation.
Comme je vous l'avais dit, c'est propre !
Bernard n'a fait que valider et refuser et ne retouche jamais le code lui-même. C'est Claude qui fait tout le reste et ça c'est un sacré changement dans la façon de développer.
Il évoque aussi l'idée que quand on délègue une compétence à quelqu'un (ou quelque chose) qui la maîtrise, on peut se concentrer sur le reste. Comme ça, Bernard ne s'occupe donc plus d'écrire du code mais s'occupe plutôt de définir ce que le code doit faire, de valider les résultats, et de guider l'architecture.
C'est vraiment le métier de développeur nouvelle génération et c'est très inspirant si vous cherchez votre place de dev dans ce nouveau monde.
En tout cas, même si ce n'est pas la première fois qu'on voit Claude Code produire des résultats impressionnants là c'est carrément autre chose.
Maintenant si vous voulez tester, l'installation est simple. Un petit
`npm install -g @enspirit/elo`
Et vous aurez ensuite accès à deux outils :
elopour évaluer des expressions à la volée, etelocpour compiler vers la cible de votre choix.
Et si vous voulez du JavaScript ?
eloc -t js votre_fichier.elo.
Du Ruby ?
eloc -t ruby.
Du SQL ?
eloc -t sql.
Le site officiel propose également un tutoriel interactif plutôt bien fichu pour découvrir la syntaxe. On commence par les bases (les types, les opérateurs), on passe aux fonctions, aux gardes, et on finit par les trucs plus avancés comme les closures et les comparaisons structurelles. En une heure ou deux, vous avez fait le tour.
Alors bien sûr, Elo n'est pas fait pour remplacer votre langage préféré car ce n'est pas un langage généraliste. Vous n'allez pas écrire une app mobile ou un jeu vidéo avec... Par contre, pour exprimer des règles métier, des validations, des transformations de données… C'est pile poil ce qu'il faut.
Peut-être qu'un jour on verra une équipe où les product managers écrivent directement les règles de pricing ou d'éligibilité en Elo , (j'ai le droit de rêver) et où ce code est automatiquement validé par le compilateur avant d'être déployé.
Plus de traduction approximative entre le métier et les devs, plus de bugs parce que quelqu'un a mal interprété une spec.
Le dépôt GitHub est ouvert , la documentation est dispo, et le langage est sous licence MIT donc vous avez de quoi explorer, tester, et pourquoi pas contribuer si le cœur vous en dit.
Voilà, avec Claude Code (ou d'autres comme Gemini CLI, Codex CLI...etc) on n'est clairement plus sur des outils qui complètent du code ou qui génèrent des snippets. On est carrément sur un système IA capable de créer des outils complets et des langages entiers, avec son humain préféré qui joue le rôle de chef d'orchestre.
Steve Klabnik a d'ailleurs fait quelque chose de similaire avec son langage Rue, lui aussi développé avec Claude, si vous voulez jeter un œil !
Voilà les amis ! La tendance est claire j'crois... les développeurs expérimentés commencent à utiliser l'IA comme un multiplicateur de force, et pas comme un remplaçant et je pense vraiment que vous devriez vous y mettre aussi pour ne pas vous retrouver à la ramasse dans quelque années...
Amusez-vous bien et un grand merci à Marc d'avoir attiré mon attention là dessus !



















