Per l'inclusione nella versione di GCC 15, è stata proposta una serie di patch per migliorare il supporto del linguaggio Rust nel frontend gccrs. Il cambiamento più significativo è stata l'introduzione del controllo di prestito delle variabili (borrow checker), realizzato sulla base del componente Polonius, sviluppato dal team principale di sviluppatori di Rust come generazione successiva del Borrow checker.
L'implementazione proposta del Borrow checker si distingue per essere scritta nel linguaggio Rust e offre capacità avanzate di verifica del codice, consentendo in alcuni casi di considerare sicuro (safe) codice che in precedenza richiedeva di essere contrassegnato con la parola chiave Unsafe a causa delle limitazioni dell'implementazione predefinita del Borrow checker.
La soluzione preparata per GCC presenta delle limitazioni:
- Per Polonius sono note situazioni in cui un codice effettivamente esistente nei progetti porta a un incremento esponenziale della complessità dell'analisi.
- Nel caso di GCC, attualmente è necessario un compilatore Rust per completare la fase di bootstrap (iniziale) del compilatore gccrs (in futuro questa limitazione sarà rimossa).
La completa realizzazione di una build autonoma prevede un processo in due fasi, in cui prima GCC compilerà gccrs senza il Borrow checker, e poi compilerà l'implementazione del Borrow checker menzionata, scritta in Rust, utilizzando una versione ridotta del compilatore e considerando il codice come condizionatamente affidabile (ovvero non eseguendo la verifica del prestito). Dopo la compilazione del Borrow checker, verrà eseguita un'altra ricompilazione del compilatore, ma con la verifica dei prestiti.
Fonte: opennet.ru
