Come dimostrazione delle capacità di creare in autonomia grandi progetti utilizzando il nuovo modello AI Claude Opus 4.6, l'azienda Anthropic ha generato un compilatore per il linguaggio C — claudes-c-compiler, adatto per la compilazione del kernel Linux, PostgreSQL, SQLite, Redis, FFmpeg, GNU coreutils, Busybox, CPython, QEMU, LuaJIT e circa altri 150 progetti open source noti testati. Le build risultanti hanno superato con successo i set di test forniti dai progetti. Il kernel Linux compilato si avvia correttamente e consente di lanciare il gioco Doom. Il codice del compilatore è stato generato in Rust ed è stato pubblicato come dominio pubblico (CC0). È supportata la compilazione di progetti per le architetture x86_64, i686, AArch64 e RISC-V 64.
Tutto il codice e la documentazione del compilatore sono stati generati dal modello Claude Opus 4.6. Il coinvolgimento umano si è limitato alla definizione degli scenari di test che il prodotto finale doveva soddisfare. La modalità interattiva per lo sviluppo, il debug e il controllo qualità non è stata utilizzata; il modello Claude Opus ha svolto tutto il lavoro basandosi sulle richieste fornite. Non è stata effettuata una revisione manuale della correttezza del compilatore, pertanto non è consigliato per un uso al di fuori degli esperimenti. Il tasso di successo nei test del compilatore, compresi i GCC Torture Tests, è del 99%.
Per lo sviluppo di un compilatore sono stati coinvolti 16 agenti AI, che dopo due settimane di lavoro e circa duemila sessioni in Claude Code hanno generato 100.000 righe di codice in Rust, eseguendo il compito di assemblaggio del kernel Linux 6.9 per le architetture x86, ARM e RISC-V. Durante la generazione del codice è stata utilizzata una nuova modalità di lavoro "agent teams", che consente di organizzare il lavoro parallelo di più agenti AI Claude su una stessa base di codice comune, svolto in modo autonomo senza intervento umano. In termini di costi per l'accesso all'API, la creazione del compilatore è stata stimata in 20.000 dollari (sono stati elaborati 2 miliardi di token in ingresso e generati 140 milioni di token in uscita).
Il compilatore è autonomo e non richiede dipendenze esterne, ad eccezione della libreria standard di Rust. Tutti i componenti sono stati creati da zero, incluso il frontend, la rappresentazione intermedia (IR) basata su SSA, l'ottimizzatore, il generatore di codice, l'assemblatore, il linker e il generatore di informazioni di debug in formato DWARF. Il frontend è compatibile a livello di opzioni con GCC e può essere utilizzato come sostituto trasparente di GCC. In uscita vengono generati file eseguibili in formato ELF. È supportata solo la piattaforma Linux (non è stata prevista la compatibilità con macOS e Windows).
Tra i limiti si segnala l'assenza di livelli di ottimizzazione separati (i livelli da -O0 a -O3, -Os e -Oz portano alla stessa ottimizzazione), ci sono problemi con l'uso di _Atomic e _Complex, la parola chiave __attribute__ è supportata solo parzialmente e l'uso delle istruzioni NEON è implementato solo in parte. Oltre ai limiti descritti nella documentazione AI preparata per il compilatore, nell'articolo di annuncio del progetto vengono menzionati alcuni ulteriori problemi:
- Mancanza di supporto per la compilazione in modalità a 16 bit (il codice necessario per il caricamento del kernel a 16 bit è stato generato in GCC).
- Errori nelle implementazioni del linker e dell'assemblatore (per la preparazione della demo sono stati utilizzati GNU assembler e GNU linker).
- Claudes-c-compiler non è ancora pronto per sostituire compilatori reali, poiché non tutti i progetti si compilano con successo.
- Il livello di ottimizzazione del codice generato è inferiore rispetto a GCC con tutte le modalità di ottimizzazione disattivate.
- La qualità del codice Rust generato è accettabile, ma visibilmente inferiore rispetto al codice preparato da un programmatore professionista.
- Il progetto è vicino al limite delle capacità del modello Opus 4.6: tentativi di correggere errori o aggiungere ulteriori funzionalità portano generalmente a interruzioni della funzionalità esistente.

Fonte: opennet.ru
