Contribuire a Rust — linguaggio, compilatore e la libreria standard

Il sorgente della libreria standard e del compilatore sono nel repository principale ed essendo la loro manutenzione uno degli obiettivi primari di quel repository la maggior parte dei problemi riportati nel tracciatore delle problematiche li riguardano. Alcune tra le etichette interessanti includono A-codegen per la traduzione di Rust in rappresentazione intermedia LLVM; A-debuginfo, la generazione di metadati utilizzata per la risoluzione dei problemi; A-diagnostics per gli errori mostrati dal compilatore; A-libs per i problemi con la libreria standard; A-macros e A-syntaxext, entrambi dedicati all’espansione della sintassi e A-typesystem per parlare dei tipi.

Non esiste alcuna guida ben mantenuta all’architettura del compilatore ma ne esiste una piccola carrellata nel repository principale. La documentazione delle API che compongono il compilatore possono aiutarti a navigare il codice, come può farlo anche il navigatore di codice Rust DXR. La guida per Rust e la sua piattaforma di controllo ti insegnerà come utilizzare al meglio il sistema di compilazione di Rust, come farebbe anche il comando make tips da riga di comando.

Per il futuro prossimo, una delle maggiori spinte per il compilatore Rust è convertire le sue componenti interne per lavorare direttamente dall’Albero di Sintassi Astratto, per elaborare su una rappresentazione intermedia chiamata MIR. Questo lavoro si preannuncia come l’inizio di molte nuove possibilità per semplificare il compilatore ed è richiesto dell’aiuto per esempio creare una fase di traduzione basata su MIR, ottimizzare la MIR e implementare la compilazione incrementale. Non esiste una fonte unica per informazioni sul lavoro richiesto ma chiedi su internals.rust-lang.org o su #rust-internals per ulteriori informazioni.

È imbarazzante se il nostro compilatore si blocca — il nefasto ‘errore interno di compilazione’ (‘internal compiler error’ ICE). L’etichetta I-ICE tiene traccia di questi problemi e spesso sono molti. Questi sono usualmente degli ottimi problemi per iniziare a contribuire perché è facile comprendere quando vengono riparati e sono relativamente isolati dal resto del codice.

Le prestazioni di Rust è uno dei suoi più grossi vantaggi; e quella del suo compilatore è uno dei suoi più grossi problemi. Ogni miglioramento della prestazione degli eseguibili or — specialmente — delle prestazioni del compilatore sono largamente celebrati. Le etichette I-slow e A-optimization si occupano delle prestazioni degli eseguibili e I-compiletime di quella del compilatore. Abbiamo un sito che tiene traccia delle prestazioni del compilatore durante alcuni carichi di lavoro. L’opzione da riga di comando -Z time-passes può aiutare a ispezionare le prestazioni del compilatore e il codice di Rust può essere profilato da tutti i profilatori standard come perf su Linux.

Funzionalità importanti passano attraverso il processo di Request for Comments (RFC) dal quale ci si accorda sul design. Anche se aperto a tutti è un’interazione tra sviluppatori che già hanno un discreto quantitivo di esperienza in comune ed è consigliato prendere parte al processo lentamente — inviare una RFC ostica senza comprendere il contesto storico, tecnico o sociale è un modo facile per dare una cattiva impressione e andarsene delusi. Leggi il collegamento sopra per comprendere al meglio come tutto il sistema funziona. Molte idee sono già state discusse durante il passato di Rust, alcune sono state rifiutate, altre rimandate al futuro e la portale delle RFC elenca alcune idee desiderate che non sono ancora riuscite a entrare nel linguaggio. Poco prima che una RFC venga accettata per l’implementazione, entra in una ‘fase finale di commento’ indicata dall’etichetta final-comment-period sul repository rust-lang/rfcs. Similarmente, prima che una funzionalità venga abilitata nel compilatore stabile (procedura definita ‘ungating’) essa entra nella final-comment-period sul repository rust-lang/rust. Entrambe le fasi di commento finale sono momenti critici per essere coinvolti ed esprimere opinioni sulla direzione del linguaggio e sono indicate nei report settimanali dei vari gruppi di lavoro su internals.rust-lang.org.

Incontra altri progettisti di compilatori su #rustc, progettisti del linguaggio su #rust-lang e progettisti di librerie su #rust-libs.