«Rust è il futuro della programmazione di sistema, C è il nuovo Assembly» — intervento di uno degli ingegneri di punta di Intel

Al recente Summit sulle tecnologie open source (Open Source Technology Summit — OSTS) Josh Triplett, ingegnere di punta di Intel, ha parlato del fatto che la sua azienda è interessata a far sì che Rust raggiunga a breve «parità» con il linguaggio C, ancora dominante nel campo dello sviluppo systemico e low-level. Nel suo intervento intitolato «Intel e Rust: il futuro della programmazione sistemica», ha anche discusso la storia della programmazione sistemica, di come C sia diventato il linguaggio di programmazione sistemica «per difetto», delle opportunità offerte da Rust che gli conferiscono un vantaggio su C e di come nel prossimo futuro possa sostituire completamente C in questo campo della programmazione.

«Rust è il futuro della programmazione di sistema, C è il nuovo Assembly» — intervento di uno degli ingegneri di punta di Intel

La programmazione sistemica è lo sviluppo e la gestione di software che funge da piattaforma per la creazione di applicazioni, consentendo l'interazione delle ultime con il processore, la memoria RAM, i dispositivi di input/output e l'hardware di rete. Il software di sistema crea un'astrazione speciale sotto forma di interfacce, che aiutano a creare software applicativo senza entrare nei dettagli di come funziona direttamente l'hardware.

Lo stesso Triplett definisce la programmazione sistemica come «tutto ciò che non è un'applicazione». Include cose come BIOS, firmware, bootloader e kernel dei sistemi operativi, vari tipi di codice low-level incorporato, nonché implementazioni di macchine virtuali. È interessante notare che Triplett considera anche il browser web un software di sistema, poiché il browser è diventato molto più di «semplice programma», trasformandosi in una vera e propria «piattaforma 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 '60, iniziarono esperimenti per fornire supporto hardware per linguaggi di alto livello, che portarono alla creazione di linguaggi come PL/S, BLISS, BCPL e ALGOL 68.

Nel 1970, Dennis Ritchie ha creato il linguaggio di programmazione C per il sistema operativo Unix. Sviluppato a partire dal linguaggio B, che non supportava nemmeno la tipizzazione, C era ricco di potenti funzionalità di alto livello, ideali per scrivere sistemi operativi e driver. Diversi componenti di UNIX, incluso il suo kernel, sono stati alla fine riscritti in C. Successivamente, molti altri programmi di sistema, inclusa la base dati Oracle, gran parte del codice sorgente di Windows e il sistema operativo Linux, sono stati anch'essi scritti in C.

C ha ricevuto un enorme supporto in questo ambito. Ma cosa ha spinto gli sviluppatori a passare a questo linguaggio? Triplet ritiene che, per motivare gli sviluppatori a cambiare linguaggio di programmazione, il nuovo linguaggio debba innanzitutto offrire nuove funzionalità senza perdere quelle vecchie.

Innanzitutto, il linguaggio deve offrire funzionalità "sufficientemente impressionanti". "Non può essere leggermente migliore. Deve essere significativamente migliore per giustificare gli sforzi e il tempo degli ingegneri necessari per il passaggio", spiega. Rispetto al linguaggio assembly, C aveva molto da offrire. Supportava in certa misura una tipizzazione sicura, garantiva una migliore portabilità e prestazioni con costrutti di alto livello e generava in generale codice molto più leggibile.

In secondo luogo, il linguaggio deve fornire supporto per le funzionalità vecchie, il che significa che gli sviluppatori dovevano essere sicuri che C fosse altrettanto funzionale del linguaggio assembly. Triplet chiarisce: "Un nuovo linguaggio non può essere solo migliore, deve anche essere almeno paragonabile". Oltre al fatto che C fosse più veloce e supportasse tutti i tipi di dati utilizzabili dal linguaggio assembly, aveva anche ciò che Triplet definiva "finestra di emergenza", ovvero supportava l'inserimento di codice in linguaggio assembly.

«Rust è il futuro della programmazione di sistema, C è il nuovo Assembly» — intervento di uno degli ingegneri di punta di Intel

Triplett crede che il C stia diventando ciò che era il linguaggio assembly molti anni fa. «Il C è il nuovo Assembly», afferma. Ora gli sviluppatori stanno cercando un nuovo linguaggio di alto livello che non solo risolva i problemi irrisolti del C, ormai impossibili da correggere, ma offra anche nuove e straordinarie possibilità. Tale linguaggio deve essere abbastanza convincente da indurre gli sviluppatori a passare a esso, deve essere sicuro, fornire una gestione automatica della memoria e molto altro.

«Qualsiasi linguaggio che vuole essere migliore del C deve offrire molto di più della semplice protezione contro il buffer overflow, se vuole davvero diventare un'alternativa convincente. Gli sviluppatori sono interessati alla facilità d'uso e alla performance, a scrivere codice che non richieda spiegazioni e svolga più lavoro con meno righe. È anche necessario affrontare i problemi di sicurezza. La semplicità d'uso e la performance sono inseparabili da essa. Meno codice è necessario scrivere per raggiungere un obiettivo, minori sono le possibilità di commettere errori di sicurezza o simili», spiega Triplett.

Confronto tra Rust e C

Nel 2006, Graydon Hoare, dipendente di Mozilla, iniziò a scrivere Rust come progetto personale. Nel 2009, Mozilla iniziò a sponsorizzare lo sviluppo di Rust per le proprie esigenze e arruolò un team per continuare a sviluppare il linguaggio.

Una delle ragioni per cui Mozilla si è interessata a un nuovo linguaggio è che Firefox è stato scritto in oltre 4 milioni di righe di codice C++ e presentava molte vulnerabilità critiche. Rust è stato creato tenendo a mente i requisiti di sicurezza e parallelismo, il che lo rende la scelta ideale per riscrivere molti componenti di Firefox nell'ambito del progetto Quantum per una completa revisione dell'architettura del browser. Mozilla utilizza anche Rust per sviluppare Servo, il motore di rendering HTML che in futuro sostituirà l'attuale motore di rendering di Firefox. Molte altre aziende hanno iniziato a utilizzare Rust per i propri progetti, tra cui Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu e molte altre.

Rust affronta uno dei problemi più importanti del linguaggio C. Offre una gestione automatica della memoria, quindi gli sviluppatori non devono allocarla e poi deallocarla manualmente per ogni oggetto nell'applicazione. Ciò che distingue Rust da altri linguaggi moderni è che non dispone di un garbage collector che rimuove automaticamente dalla memoria oggetti non utilizzati, né di un ambiente di esecuzione necessario per il suo funzionamento, come il Java Runtime Environment per Java. Invece, Rust possiede concetti di proprietà, prestito, riferimenti e durata. "In Rust c'è un sistema di dichiarazione delle chiamate a oggetti, che permettono di specificare se il proprietario lo sta utilizzando o se si tratta solo di un prestito. Se stai solo prestando un oggetto, il compilatore lo monitorerà e garantirà che l'originale rimanga al suo posto finché lo stai riferendo. Inoltre, Rust si assicurerà che l'oggetto venga eliminato dalla memoria subito dopo il termine del suo utilizzo, inserendo la chiamata appropriata nel codice durante la compilazione senza costi aggiuntivi di tempo," spiega Triplett.

L'assenza di un proprio ambiente di esecuzione può essere considerata anche un aspetto positivo di Rust. Triplett ritiene che i linguaggi che vengono eseguiti con esso siano difficili da utilizzare come strumenti per la programmazione di sistema. Come spiega: "Devi inizializzare l'ambiente di esecuzione prima di poter chiamare qualsiasi codice, devi utilizzare questo ambiente per chiamare funzioni e l'ambiente stesso può eseguire codice aggiuntivo alle tue spalle in momenti imprevisti."

Inoltre, Rust mira a garantire una programmazione concorrente sicura. Le stesse funzioni che rendono sicura la gestione della memoria monitorano aspetti come a quale thread appartiene un determinato oggetto e quali oggetti possono essere trasferiti tra i thread e quali necessitano di blocchi.

Tutte queste caratteristiche rendono Rust abbastanza convincente perché gli sviluppatori scelgano questo linguaggio come nuovo strumento per la programmazione di sistema. Tuttavia, dal punto di vista del calcolo parallelo, Rust è ancora un po' indietro rispetto a C.

Triplet sta creando un gruppo di lavoro speciale che si occuperà di implementare in Rust le funzionalità necessarie affinché possa competere, superare e sostituire C nel campo della programmazione di sistema. In un thread su Reddit, dedicato al suo intervento, ha dichiarato che «il gruppo FFI/ C Parity è in fase di creazione e non ha ancora iniziato a lavorare», per ora è pronto a rispondere a qualsiasi domanda e in futuro pubblicherà necessariamente i suoi piani di sviluppo per Rust nell'ambito della sua iniziativa per tutte le parti interessate.

Si può supporre che, in primo luogo, il gruppo FFI/ C Parity si concentrerà sul miglioramento del supporto per la multithreading in Rust, sull'introduzione del supporto per BFLOAT16, un formato di rappresentazione dei numeri in virgola mobile apparso nei nuovi processori Intel Xeon Scalable, e sulla stabilizzazione delle inserzioni di codice in Assembly.



Fonte: 3dnews.ru
Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster