14 points par GN⁺ 2026-02-10 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • CCC (Claude’s C Compiler), entièrement écrit par Claude Opus 4.6 d’Anthropic, a été publié en affirmant pouvoir compiler le noyau Linux
  • Ce compilateur autonome écrit en Rust implémente lui-même tous les composants, du frontend au linker, mais ses performances et la qualité de ses optimisations restent très inférieures à celles de GCC
  • Lors de benchmarks sur SQLite et le noyau Linux, CCC a compilé tous les fichiers C sans erreur, mais la compilation a échoué à l’étape du linker avec plus de 40 000 erreurs de référence
  • Les performances d’exécution de SQLite sont jusqu’à 158 000 fois plus lentes, la taille du binaire est plus de 3 fois supérieure, et les options d’optimisation (-O2, etc.) sont sans effet
  • Le fait qu’une IA ait généré un compilateur C complet est significatif sur le plan technique, mais le niveau d’efficacité et de compatibilité reste insuffisant pour un usage réel

Vue d’ensemble et architecture de CCC

  • CCC est un compilateur C entièrement écrit par une IA à l’aide de Claude par Anthropic, avec prise en charge de x86-64, i686, AArch64 et RISC-V 64
    • Écrit en Rust, il inclut un IR basé sur SSA, un optimiseur, un générateur de code, un assembleur, un linker et même la génération d’informations de débogage DWARF
  • L’article distingue les rôles du compilateur, de l’assembleur et du linker, en précisant que le linker est le plus complexe et le plus susceptible de provoquer des erreurs
  • Comme le noyau Linux utilise des extensions GCC et des scripts de linkage complexes, il n’était pas adapté comme première cible de test ; SQLite a donc été choisi comme benchmark principal

Environnement et méthode de test

  • Comparaison entre GCC 14.2.0 et CCC dans les mêmes conditions sur deux VM basées sur Debian (6 vCPU, 16 Go de RAM)
  • Éléments comparés : temps de compilation, taille du binaire, vitesse d’exécution, consommation mémoire, stabilité
  • CCC délègue uniquement le code de démarrage 16 bits à GCC via la fonctionnalité gcc_m16, et traite tout le reste lui-même
  • Le benchmark SQLite, centré sur le CPU, exécute 42 opérations SQL en 10 étapes

Résumé des principaux résultats

  • Noyau Linux 6.9 : CCC a compilé les 2 844 fichiers C, mais a échoué à l’étape du linker avec 40 784 erreurs d’undefined reference
    • Cause des erreurs : mauvaises relocations et génération de symboles dans les sections __jump_table et __ksymtab
  • Compilation de SQLite : CCC est 1,3 fois plus lent que GCC, avec un binaire 2,7 à 3 fois plus gros et une consommation mémoire 5,9 fois supérieure
  • Performances d’exécution de SQLite : 737 fois plus lent que GCC -O0, et 1 242 fois plus lent que GCC -O2
    • Les requêtes simples sont 1 à 7 fois plus lentes, tandis que les requêtes à boucles imbriquées peuvent être jusqu’à 158 000 fois plus lentes
  • Les 5 tests de crash ont tous été réussis, ce qui confirme la correction fonctionnelle

Causes de la dégradation des performances

  • Spilling excessif des registres : la plupart des variables locales sont stockées sur la pile, provoquant un excès d’accès mémoire
    • Dans la fonction sqlite3VdbeExec, plus de 100 variables sont gérées via la pile, ce qui triple la longueur du code
  • Options d’optimisation sans effet : les résultats de -O0 et -O2 sont strictement identiques, les 15 passes SSA étant exécutées de la même manière à tous les niveaux
  • Corruption du frame pointer, rendant le débogage avec GDB impossible
  • Gonflement de la taille du code : le binaire SQLite atteint 4,27 Mo, soit 2,78 fois la taille obtenue avec GCC, ce qui augmente les défauts de cache d’instructions
  • Absence de table des symboles : impossible de profiler faute de symboles pour les fonctions internes

Forces et limites de CCC

  • Forces
    • Compile sans erreur tous les fichiers C du noyau Linux
    • Garantit la justesse et la stabilité des résultats sur SQLite, sans segfault
    • Prend en charge une interface en ligne de commande compatible avec GCC
  • Limites
    • Vitesse d’exécution extrêmement dégradée (jusqu’à 158 000 fois plus lente)
    • Échec de la compilation du noyau en raison d’une incompatibilité du linker
    • Taille du binaire et consommation mémoire excessives
    • Absence d’optimisation et d’informations de débogage, options -O sans effet
    • Vitesse de compilation également inférieure à GCC, d’environ 25 %

Le problème du « Hello World »

  • Peu après la publication, un problème intitulé « Hello world does not compile » est apparu
    • Échec à l’étape de prétraitement faute de trouver stddef.h et stdarg.h
    • Le sujet a attiré l’attention sur GitHub avec plus de 288 réactions et environ 200 commentaires
    • Certains utilisateurs l’ont jugé « semblable à un projet de compilateur de niveau licence »

Conclusion

  • CCC constitue un cas concret montrant qu’une IA peut générer un compilateur C complet
    • Il traite sans erreur tous les fichiers C du noyau Linux et exécute SQLite avec une correction fonctionnelle
  • Cependant, il reste inadapté à un usage réel
    • Les performances d’exécution sont extrêmement faibles, et les fonctions de linkage, d’optimisation et de débogage restent inachevées
  • En tant que réussite de recherche, le projet a de l’intérêt, mais pour un compilateur de production, les outils existants comme GCC et Clang restent indispensables

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.