14 Punkte von GN⁺ 2026-02-10 | Noch keine Kommentare. | Auf WhatsApp teilen
  • CCC (Claude’s C Compiler), vollständig von Anthropic's Claude Opus 4.6 geschrieben, wurde mit der Behauptung veröffentlicht, den Linux-Kernel kompilieren zu können
  • Der eigenständige Compiler in Rust implementiert alle Komponenten vom Frontend bis zum Linker selbst, bleibt aber bei Leistung und Optimierungsqualität deutlich hinter GCC zurück
  • In Benchmarks mit SQLite und dem Linux-Kernel kompilierte CCC zwar alle C-Dateien fehlerfrei, doch der Build scheiterte in der Linker-Phase an über 40.000 Referenzfehlern
  • Die Ausführung von SQLite ist bis zu 158.000-mal langsamer, die Binärdatei ist mehr als dreimal so groß, und Optimierungsoptionen (-O2 usw.) haben keine Wirkung
  • Dass eine KI einen vollständigen C-Compiler erzeugt hat, ist technisch bedeutsam, doch Effizienz und Kompatibilität reichen für den praktischen Einsatz noch nicht aus

Überblick und Struktur von CCC

  • CCC ist ein von Anthropic mit Claude erstellter vollständig KI-geschriebener C-Compiler und unterstützt x86-64, i686, AArch64, RISC-V 64
    • In Rust geschrieben, mit SSA-basierter IR, Optimierer, Codegenerator, Assembler, Linker und Erzeugung von DWARF-Debuginformationen
  • Es wird die Rollen von Compiler, Assembler und Linker getrennt erklärt, wobei der Linker als am komplexesten und fehleranfälligsten beschrieben wird
  • Da der Linux-Kernel GCC-Erweiterungen und komplexe Linker-Skripte nutzt, ist er als früher Testfall ungeeignet; stattdessen wurde SQLite als zentraler Benchmark gewählt

Testumgebung und Methode

  • Vergleich von GCC 14.2.0 und CCC unter identischen Bedingungen auf zwei Debian-basierten VMs (6 vCPU, 16 GB RAM)
  • Verglichene Punkte: Kompilierzeit, Binärgröße, Ausführungsgeschwindigkeit, Speichernutzung, Stabilität
  • CCC delegiert über die gcc_m16-Funktion nur 16-Bit-Boot-Code an GCC und verarbeitet den Rest selbst
  • Der SQLite-Benchmark ist CPU-zentriert aufgebaut und führt 42 SQL-Operationen in 10 Schritten aus

Zusammenfassung der wichtigsten Ergebnisse

  • Linux-Kernel 6.9: CCC kompilierte alle 2.844 C-Dateien, scheiterte aber in der Linker-Phase an 40.784 undefined reference-Fehlern
    • Fehlerursache: fehlerhafte Relocations und Symbolerzeugung in den Abschnitten __jump_table und __ksymtab
  • SQLite-Kompilierung: CCC ist 1,3-mal langsamer als GCC, bei 2,7- bis 3-mal größerer Binärdatei und 5,9-mal höherem Speicherverbrauch
  • SQLite-Ausführungsleistung: 737-mal langsamer als GCC -O0 und 1.242-mal langsamer als GCC -O2
    • Einfache Abfragen sind 1- bis 7-mal langsamer, verschachtelte Schleifenabfragen bis zu 158.000-mal langsamer
  • Alle 5 Crash-Tests bestanden, die funktionale Korrektheit ist also gegeben

Ursachen des Leistungsabfalls

  • Übermäßiges Register-Spilling: Die meisten lokalen Variablen werden auf dem Stack gespeichert, was zu übermäßig vielen Speicherzugriffen führt
    • In der Funktion sqlite3VdbeExec werden über 100 Variablen über den Stack verarbeitet, wodurch sich die Codelänge verdreifacht
  • Optimierungsoptionen wirkungslos: Die Ergebnisse von -O0 und -O2 sind vollkommen identisch; alle 15 SSA-Passes laufen auf jeder Stufe gleich ab
  • Beschädigter Frame Pointer macht Debugging mit GDB unmöglich
  • Aufgeblähte Codegröße: Die SQLite-Binärdatei ist mit 4,27 MB 2,78-mal größer als bei GCC, was mehr Instruction-Cache-Misses verursacht
  • Keine Erzeugung einer Symboltabelle: Ohne interne Funktionssymbole ist Profiling nicht möglich

Stärken und Grenzen von CCC

  • Stärken
    • Kompiliert alle C-Dateien des Linux-Kernels fehlerfrei
    • Korrektheit und Stabilität der SQLite-Ergebnisse sind gegeben, keine Segmentation Faults
    • Unterstützung einer GCC-kompatiblen Kommandozeilenschnittstelle
  • Grenzen
    • Extremer Einbruch der Ausführungsgeschwindigkeit (bis zu 158.000-mal)
    • Linker-Inkompatibilität führt zum Fehlschlag des Kernel-Builds
    • Zu große Binärdateien und zu hoher Speicherverbrauch
    • Fehlende Optimierung und Debuginformationen, -O-Optionen ohne Wirkung
    • Auch die Kompiliergeschwindigkeit ist 25 % langsamer als bei GCC

Das „Hello World“-Problem

  • Kurz nach der Veröffentlichung trat das Problem „Hello world does not compile“ auf
    • In der Präprozessor-Phase scheiterte es daran, stddef.h und stdarg.h nicht zu finden
    • Das Thema sorgte auf GitHub mit über 288 Reaktionen und rund 200 Kommentaren für Aufmerksamkeit
    • Einige Nutzer bewerteten es als „eine Compiler-Aufgabe auf Bachelor-Niveau“

Fazit

  • CCC ist ein Beleg dafür, dass eine KI einen vollständigen C-Compiler erzeugen kann
    • Alle C-Dateien des Linux-Kernels werden fehlerfrei verarbeitet, und SQLite läuft funktional korrekt
  • Für den praktischen Einsatz ist CCC jedoch ungeeignet
    • Die Ausführungsleistung ist extrem schwach, und Linker-, Optimierungs- und Debugging-Funktionen sind unvollständig
  • Als Forschungsleistung ist es bedeutend, doch für produktive Compiler bleiben bestehende Werkzeuge wie GCC und Clang weiterhin unverzichtbar

Noch keine Kommentare.

Noch keine Kommentare.