"Rust è il futuro della programmazione di sistema, C è il nuovo assemblatore" - il discorso di uno dei principali ingegneri di Intel

Al recente Open Source Technology Summi (OSTS) Josh Triplett, un ingegnere senior presso Intel, ha affermato che la sua azienda è interessata a che Rust raggiunga la "parità" con il linguaggio C che ancora domina i sistemi e lo sviluppo di basso livello nel prossimo futuro. Nel suo discorso Con il titolo "Intel e Rust: il futuro della programmazione di sistema", ha parlato anche della storia della programmazione di sistema, di come il C sia diventato il linguaggio di programmazione di sistema predefinito, di quali caratteristiche di Rust gli danno un vantaggio rispetto al C e di come possa essere completamente sostituire C in questo campo della programmazione.

"Rust è il futuro della programmazione di sistema, C è il nuovo assemblatore" - il discorso di uno dei principali ingegneri di Intel

La programmazione di sistema è lo sviluppo e la gestione di software che funge da piattaforma per la creazione di applicazioni applicative, garantendo che queste interagiscano con il processore, la RAM, i dispositivi di input/output e le apparecchiature di rete. Il software di sistema crea un'astrazione speciale sotto forma di interfacce che aiutano a creare software applicativo senza approfondire i dettagli di come funziona l'hardware stesso.

Lo stesso Triplett definisce la programmazione dei sistemi come “tutto ciò che non è un’applicazione”. Include elementi come BIOS, firmware, bootloader e kernel del sistema operativo, vari tipi di codice incorporato di basso livello e implementazioni di macchine virtuali. È interessante notare che Triplett ritiene che un browser web sia anche un software di sistema, poiché il browser è diventato da tempo più di un “semplice programma”, diventando una “piattaforma autonoma per siti Web e applicazioni web”.

In passato, la maggior parte dei programmi di sistema, inclusi BIOS, bootloader e firmware, erano scritti in linguaggio assembly. Negli anni '1960 iniziarono gli esperimenti per fornire supporto hardware per linguaggi di alto livello, portando alla creazione di linguaggi come PL/S, BLISS, BCPL e ALGOL 68.

Poi, negli anni '1970, Dennis Ritchie creò il linguaggio di programmazione C per il sistema operativo Unix. Creato nel linguaggio di programmazione B, che non aveva nemmeno il supporto per la digitazione, C era pieno di potenti funzioni di alto livello che erano più adatte per scrivere sistemi operativi e driver. Diversi componenti di UNIX, compreso il kernel, furono infine riscritti in C. Successivamente, anche molti altri programmi di sistema, incluso il database Oracle, gran parte del codice sorgente di Windows e il sistema operativo Linux, furono scritti in C.

C ha ricevuto un enorme sostegno in questa direzione. Ma cosa ha spinto esattamente gli sviluppatori a passare ad esso? Triplett ritiene che per motivare gli sviluppatori a passare da un linguaggio di programmazione a un altro, questi ultimi debbano prima fornire nuove funzionalità senza perdere quelle vecchie.

Innanzitutto, il linguaggio deve offrire nuove funzionalità "ragionevolmente impressionanti". “Non potrebbe essere migliore. Deve essere significativamente migliore per giustificare lo sforzo e il tempo di progettazione necessari per effettuare la transizione”, spiega. Rispetto al linguaggio assembly, il C aveva molte cose da offrire. Supportava un comportamento in qualche modo indipendente dai tipi, forniva portabilità e prestazioni migliori con costrutti di alto livello e generava un codice molto più leggibile nel complesso.

In secondo luogo, il linguaggio deve fornire supporto per le vecchie funzionalità, il che significa che nella storia del passaggio al C, gli sviluppatori dovevano essere sicuri che non fosse meno funzionale del linguaggio assembly. Triplett spiega: “Una nuova lingua non può solo essere migliore, deve anche essere altrettanto buona”. Oltre ad essere più veloce e a supportare qualsiasi tipo di dati utilizzabile dal linguaggio assembly, il C aveva anche ciò che Triplett chiamava una "via di fuga", ovvero supportava l'inserimento di codice in linguaggio assembly al suo interno.

"Rust è il futuro della programmazione di sistema, C è il nuovo assemblatore" - il discorso di uno dei principali ingegneri di Intel

Triplett ritiene che il C stia diventando quello che era il linguaggio assembly molti anni fa. "C è il nuovo assemblatore", dichiara. Ora gli sviluppatori sono alla ricerca di un nuovo linguaggio di alto livello che non solo risolva i problemi accumulati in C che non possono più essere risolti, ma offra anche nuove interessanti funzionalità. Un linguaggio di questo tipo deve essere sufficientemente convincente da indurre gli sviluppatori a adottarlo, deve essere sicuro, fornire la gestione automatica della memoria e molto altro ancora.

“Qualsiasi linguaggio che voglia essere migliore del C deve offrire molto di più della semplice protezione dal buffer overflow se vuole davvero essere un’alternativa convincente. Gli sviluppatori sono interessati all'usabilità e alle prestazioni, scrivendo codice che sia autoesplicativo e svolga più lavoro in meno righe. Occorre affrontare anche le questioni relative alla sicurezza. Facilità d'uso e prestazioni vanno di pari passo. Meno codice devi scrivere per ottenere qualcosa, minori sono le possibilità di commettere errori, legati alla sicurezza o meno”, spiega Triplett.

Confronto tra Rust e C

Nel 2006, Graydon Hoare, un dipendente di Mozilla, iniziò a scrivere Rust come progetto personale. E nel 2009, Mozilla ha iniziato a sponsorizzare lo sviluppo di Rust per le proprie esigenze e ha anche ampliato il team per sviluppare ulteriormente il linguaggio.

Uno dei motivi per cui Mozilla era interessato al nuovo linguaggio è che Firefox era scritto con oltre 4 milioni di righe di codice C++ e presentava numerose vulnerabilità critiche. Rust è stato creato pensando alla sicurezza e alla concorrenza, rendendolo la scelta ideale per riscrivere molti dei componenti di Firefox come parte del progetto Quantum per riprogettare completamente l'architettura del browser. Mozilla sta utilizzando Rust anche per sviluppare Servo, un motore di rendering HTML che alla fine sostituirà l'attuale motore di rendering di Firefox. Molte altre aziende hanno iniziato a utilizzare Rust per i loro progetti, tra cui Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu e molte altre.

Rust risolve uno dei problemi più importanti del linguaggio C. Offre la gestione automatica della memoria in modo che gli sviluppatori non debbano allocarla manualmente e poi liberarla per ogni oggetto nell'applicazione. Ciò che rende Rust diverso dagli altri linguaggi moderni è che non dispone di un garbage collector che rimuove automaticamente gli oggetti inutilizzati dalla memoria, né dell'ambiente runtime necessario per farlo funzionare, come Java Runtime Environment per Java. Rust invece ha i concetti di proprietà, prestito, referenze e durata. “Rust ha un sistema per dichiarare le chiamate a un oggetto per indicare se il proprietario lo sta utilizzando o se lo sta semplicemente prendendo in prestito. Se prendi semplicemente in prestito un oggetto, il compilatore ne terrà traccia e garantirà che l'originale rimanga al suo posto finché ne fai riferimento. Rust garantirà inoltre che l'oggetto venga rimosso dalla memoria non appena il suo utilizzo sarà completato, inserendo una chiamata corrispondente nel codice in fase di compilazione senza tempo aggiuntivo", afferma Triplett.

Anche la mancanza di un runtime nativo può essere considerata una caratteristica positiva di Rust. Triplett ritiene che i linguaggi su cui gira siano difficili da utilizzare come strumenti di programmazione dei sistemi. Come spiega: "Devi inizializzare questo runtime prima di poter chiamare qualsiasi codice, devi usare questo runtime per chiamare funzioni e il runtime stesso potrebbe eseguire codice aggiuntivo alle tue spalle in momenti imprevisti."

Rust si impegna inoltre a fornire una programmazione parallela sicura. Le stesse funzionalità che lo rendono sicuro per la memoria tengono traccia di cose come quale thread possiede quale oggetto e quali oggetti possono essere passati tra thread e quali necessitano di un blocco.

Tutte queste funzionalità rendono Rust abbastanza avvincente da consentire agli sviluppatori di sceglierlo come nuovo strumento per la programmazione dei sistemi. Tuttavia, in termini di calcolo parallelo, Rust è ancora un po’ indietro rispetto a C.

Triplett intende creare uno speciale gruppo di lavoro che si concentrerà sull'introduzione delle funzionalità necessarie in Rust in modo che possa eguagliare, superare e sostituire completamente il C nel campo della programmazione dei sistemi. IN discussione su Reddit, dedicato al suo discorso, ha detto che "il gruppo FFI/C Parity è in fase di creazione e non ha ancora iniziato i lavori", per ora è pronto a rispondere a qualsiasi domanda, e in futuro pubblicherà sicuramente i piani immediati per lo sviluppo di Rust come parte della sua iniziativa per tutte le parti interessate.

Si può presumere che il gruppo FFI/C Parity si concentrerà innanzitutto sul miglioramento del supporto multi-threading in Rust, sull'introduzione del supporto per BFLOAT16, un formato in virgola mobile apparso nei nuovi processori Intel Xeon Scalable, nonché sulla stabilizzazione dell'assemblaggio inserimenti di codice.



Fonte: 3dnews.ru

Aggiungi un commento