CodeSpeak - le nouveau langage du créateur de Kotlin : dialoguer avec les LLM via des specs plutôt qu’en anglais
(codespeak.dev)- Langage de programmation de nouvelle génération basé sur les LLM, capable de réduire la taille d’une codebase de 5 à 10 fois
- Au lieu d’écrire du code, le développeur rédige des specs concises, puis le code est généré automatiquement avec la commande
codespeak build - Quand une spec change, le système convertit automatiquement le diff de la spec en diff de code et l’applique
- Prend aussi en charge les projets mixtes où coexistent code écrit manuellement et code généré, avec une amélioration du taux de réussite des tests constatée sur des cas open source réels
- Met l’accent sur l’ingénierie en équipe pour gérer des logiciels complexes, et vise un environnement de développement plus humain grâce à une maintenance centrée sur les specs
Présentation de CodeSpeak
- CodeSpeak est un langage de programmation de nouvelle génération propulsé par les LLM, qui vise à réduire une codebase d’un facteur 5 à 10
- D’après la description du site, l’efficacité est mise en avant par la formule « Shrink your codebase 5–10x »
- Ce langage se présente comme un outil pour construire des systèmes de niveau production, conçu non pour de simples prototypes mais pour des projets de long terme
- Il cible principalement les équipes d’ingénieurs qui développent des logiciels complexes, avec une orientation vers le développement collaboratif plutôt que vers un codage expérimental centré sur un développeur seul
Développement piloté par les specs
- Le cœur de CodeSpeak repose sur la philosophie « Maintain Specs, Not Code »
- Le développeur rédige des specs concises, puis le code est généré automatiquement avec la commande
codespeak build - Quand une spec est modifiée, le système convertit automatiquement le diff de la spec en diff de code
- Le développeur rédige des specs concises, puis le code est généré automatiquement avec la commande
- Cette approche souligne qu’il est plus facile pour les humains de maintenir et gérer des specs que du code
Prise en charge des projets mixtes
- CodeSpeak prend en charge les projets où coexistent code manuel et code généré
- Un exemple présenté est un fork du dépôt MarkItDown de Microsoft
- Un guide tutoriel est proposé pour traiter pas à pas les projets mixtes
Fonction code → spec (à venir)
- CodeSpeak prépare une fonction de conversion de code existant en specs
- Cela permettrait de remplacer une partie du code existant par des specs 5 à 10 fois plus compactes
- Le projet insiste sur le fait que la maintenance des specs est plus adaptée aux humains que celle du code
Études de cas réelles
- CodeSpeak a testé la conversion en specs de plusieurs codes de projets open source
- Prise en charge des sous-titres WebVTT dans yt-dlp : 255 LOC → 38 LOC, réduction par 6,7, 37 tests ajoutés
- Générateur de SSN italien dans Faker : 165 LOC → 21 LOC, réduction par 7,9, 13 tests ajoutés
- Détection automatique d’encodage dans beautifulsoup4 : 826 LOC → 141 LOC, réduction par 5,9, 25 tests ajoutés
- Convertisseur EML→Markdown dans markitdown : 139 LOC → 14 LOC, réduction par 9,9, 27 tests ajoutés
- Dans chaque cas, le taux de réussite des tests a été maintenu ou amélioré, ce qui montre l’efficacité de l’approche fondée sur les specs
Résumé
- CodeSpeak est un langage de programmation IA centré sur les specs, qui combine génération automatique de code et efficacité de maintenance
- Ses principales caractéristiques sont la génération de code basée sur les LLM, la synchronisation spec-code et la prise en charge des projets mixtes
- Des cas concrets montrent une réduction du code et une amélioration des tests, ce qui laisse entrevoir un gain de productivité pour l’ingénierie logicielle en équipe
4 commentaires
Est-ce que c’est juste du buzz de qualifier ça de langage, ou est-ce simplement l’époque qui veut ça ?
Je suis d’accord sur le principe, mais ça me paraît évident : comme dans la démonstration de Gödel selon laquelle la perfection n’existe pas au départ, on dirait qu’on critique cette tentative en partant de l’hypothèse qu’un produit parfait pourrait exister.
Cela fait penser au MDD (Model Driven Dev.).
Réactions sur Hacker News
Comme l’a dit Joel Spolsky dans une conférence à Yale, les tentatives de « générer des programmes à partir d’une spec » ont toujours échoué
si la spec est assez détaillée pour définir entièrement le programme, alors l’écrire est en soi presque aussi difficile que programmer directement
Lien vers la conférence originale
aujourd’hui, on peut générer un programme même avec un prompt incomplet, et il est utile d’étudier des façons plus systématiques de gérer les prompts
l’évolutivité se déplace de l’ajout de fonctionnalités vers la définition de contraintes de comportement et d’invariants structurels
du genre « 1. demander des informations à l’utilisateur, 2. envoyer une requête HTTP, 3. signaler une erreur »,
alors qu’à ce compte-là, écrire directement un script est bien plus rapide et déterministe
Ce n’est pas un nouveau langage, mais plutôt un workflow et un ensemble d’outils pour le développement basé sur les LLM
au lieu du code, on maintient des fichiers de spec en Markdown, et
codespeakmodifie le code à partir des diff de specl’avantage, c’est que les prompts sont versionnés avec le code ; l’inconvénient, c’est que la spec ne reflète pas tous les détails du code
ils expérimentent avec un outil appelé
codespeak takeoverpour convertir le code en spec et y intégrer les prompts des sessions d’agentc’est présenté comme un passage d’un « mode sprint » de court terme à un « mode marathon » de long terme
Article de blog lié
l’idée est simple, donc n’importe qui peut la réimplémenter rapidement, et une version open source finira probablement par la remplacer
proposition : une politique autorisant les « petits changements »
dans l’ensemble, l’idée d’un compilateur de pseudocode incrémental est jugée intéressante
dans 5 ans, on n’écrira probablement plus le code comme ça, et une spec technique rédigée en anglais suffira sans doute
Cette approche ressemble plus à du tooling qui mappe une spec vers du code qu’à un langage
mais les modèles sont non déterministes, donc une même spec peut produire un résultat différent à chaque fois
une spec est fondamentalement un résumé avec beaucoup de perte d’information, ce qui rend la cohérence difficile à maintenir dans une grosse codebase
ce que certains aimeraient voir, c’est un pipeline vérifiable allant d’une spec textuelle vers une spec formelle, puis vers le code
ce qui compte, ce n’est pas le code lui-même, mais la cohérence du comportement produit
plus la spec est abstraite par rapport au code, plus elle autorise d’implémentations différentes ; la déterminisme n’est donc toujours pas garanti
et considèrent que les tests automatisés devraient jouer le rôle de véritable spec
avec une seed fixe, on devrait obtenir la même sortie pour la même entrée
là où Cursor ou Antigravity sont optimisés pour le « vibe coding » centré sur l’humain, Kiro est spécialisé dans le développement piloté par des specs centré sur les agents
il utilise des formats structurés comme EARS et INCOSE, et génère des contrôles automatiques de cohérence ainsi que des tests basés sur les propriétés (PBT)
quand la spec est solide, l’implémentation suit presque automatiquement
plusieurs agents CLI sont exécutés en parallèle pour obtenir un résultat plus abouti
Le problème d’un langage de prompt formel n’est pas l’ambiguïté, mais le manque de compréhension contextuelle du modèle
un même prompt peut donner des résultats différents selon le contexte
formaliser les prompts ne sert à rien si le modèle comprend mal la codebase
les modèles étant optimisés pour le langage conversationnel, il vaut mieux ne pas écrire directement en langage formel et ne l’utiliser qu’en cas de besoin
Souhait exprimé : pouvoir simplement transmettre son intention à l’ordinateur de manière déterministe et formelle
Ce concept partirait d’une mauvaise compréhension de la structure interne des LLM
selon des recherches récentes, les LLM disposent d’une étape de traitement distincte entre encodage et décodage,
et après l’apprentissage, la langue elle-même n’est peut-être plus si importante
Lien vers la recherche liée
son objectif est d’aider les humains à exprimer clairement ce qu’ils veulent
Certains ne voient pas l’intérêt d’un tel outil
il suffirait d’écrire directement une spec Markdown et de demander à l’agent de générer le code
Dans la section « Prerequisites » du tutoriel, il est indiqué qu’une clé API Anthropic est nécessaire
c’est peut-être une mesure provisoire liée à la version alpha, mais on peut se demander pourquoi passer par une API
injecter directement des prompts dans une session comme Claude Code semblerait suffire
Lien de référence
Ce projet est jugé intéressant car très proche d’une spec de langage d’exécution pour LLM en cours de développement
Mon projet AIL définit et exécute des chaînes de prompts en YAML
l’idée centrale est d’avoir un « moteur de raffinement de prompt » qui transforme le langage naturel de l’utilisateur en commandes structurées
par exemple, il analyse l’intention de l’utilisateur, la découpe en étapes, puis l’optimise selon les standards modernes de prompt engineering
avec un tel intercepteur, un flux du type « transforme ce que je viens de dire en format CodeSpeak » deviendrait possible
l’idée est jugée vraiment excellente et mérite d’être explorée en profondeur