Due sviluppatori CPython hanno proposto di aggiungere il linguaggio di programmazione Rust al codice Python. Emma Smith e un suo collega hanno pubblicato una proposta preliminare di miglioramento di Python (Pre-PEP) che giustifica la necessità di questo passaggio. Attualmente, Rust è previsto per essere utilizzato solo per la scrittura di moduli di estensione opzionali, ma in futuro potrebbe diventare una dipendenza obbligatoria.
Il motivo principale per l’adozione di Rust è migliorare la sicurezza della memoria. Il linguaggio previene intere classi di errori a livello di compilazione: accessi fuori dai limiti degli array, accessi alla memoria liberata e conflitti di dati nel codice multithread.
Questo è particolarmente rilevante per Python, che utilizza thread liberi, dove la sicurezza dei thread è fondamentale. Il progetto RustBelt ha persino dimostrato formalmente la correttezza delle garanzie di sicurezza di Rust per il codice privo di costrutti non sicuri.
CPython riscontra regolarmente bug dovuti a una gestione impropria della memoria. Gli autori della proposta ritengono che Rust ridurrà radicalmente tali problemi. Anche se una parte del codice dovesse rimanere non sicura a causa delle interazioni con l’API C, la logica di base dei moduli sarà scritta in Rust, un linguaggio sicuro.
Rust è già attivamente utilizzato da grandi progetti C e C++. Il kernel Linux , Android , Firefox e molti altri sistemi stanno adottando il linguaggio per migliorarne l’affidabilità.
Google ha già segnalato risultati positivi dall’implementazione di Rust in Android. È interessante notare che dal 25% al 33% delle nuove estensioni Python sono scritte in Rust: l’integrazione del linguaggio in CPython potrebbe ulteriormente stimolare questa tendenza.
Oltre alla sicurezza, Rust offre strutture dati ad alte prestazioni provenienti dalla libreria standard . Vettori, tabelle hash e mutex sono tutti implementati con zero overhead e sono ben documentati.
Il sistema di macro di Rust è superiore alle macro del C: le macro dichiarative sono più pulite e non catturano accidentalmente le variabili, mentre le macro procedurali consentono potenti trasformazioni del codice. La libreria PyO3 fa ampio uso di macro procedurali per semplificare l’utilizzo dell’API Python.
Gli sviluppatori hanno già creato un prototipo di modulo _base64che dimostra i miglioramenti delle prestazioni ottenuti utilizzando Rust.
L’integrazione richiederà un nuovo crate cpython-syscon definizioni API C FFI. I binding vengono generati utilizzando bindgen, lo strumento ufficiale di Rust utilizzato anche nei progetti Linux e Android. Cargo può fornire dipendenze pronte all’uso, quindi non è necessario scaricare i pacchetti durante la compilazione.
Rust supporta tutte le piattaforme specificate in PEP 11 e successive. Tutte le piattaforme Python di livello 1 corrispondono alle piattaforme Rust di livello 1 o 2, con un set completo di strumenti di sviluppo. La compilazione incrociata è facile da configurare: basta impostare la destinazione desiderata e specificare il linker.
Gli autori hanno abbandonato l’idea di utilizzare la libreria PyO3 esistente all’interno di CPython. Ciò avrebbe creato un ulteriore livello di astrazione e rallentato lo sviluppo: ogni nuova API sarebbe stata prima aggiunta a PyO3, quindi aggiornata in CPython. Con bindgen, le nuove API sono disponibili automaticamente.
C’è un problema di dipendenza: il compilatore Rust usa Python per il bootstrap. Ma ci sono soluzioni. È possibile compilare una versione precedente di Python, poi Rust, quindi il nuovo CPython. Gli script di bootstrap di Rust sono persino compatibili con Python 2, quindi il problema è risolvibile. Le alternative sono usare PyPy o fare in modo che Rust si dissoci da Python durante il processo di compilazione.
Sono disponibili risorse di formazione per gli attuali sviluppatori CPython. Il Rust Book offre un’introduzione completa al linguaggio, oltre a Rust per programmatori C++ e materiali di formazione ufficiali.
Sono in corso i piani per creare un team di esperti Rust e aggiungere un tutorial alla devguide. Lavorare con gli argomenti delle funzioni potrebbe richiedere l’adattamento di Argument Clinic o la creazione di una macro procedurale in Rust.
Ti è piaciuto questo articolo? Ne stiamo discutendo nella nostra Community su LinkedIn, Facebook e Instagram. Seguici anche su Google News, per ricevere aggiornamenti quotidiani sulla sicurezza informatica o Scrivici se desideri segnalarci notizie, approfondimenti o contributi da pubblicare.

InnovazioneL’evoluzione dell’Intelligenza Artificiale ha superato una nuova, inquietante frontiera. Se fino a ieri parlavamo di algoritmi confinati dietro uno schermo, oggi ci troviamo di fronte al concetto di “Meatspace Layer”: un’infrastruttura dove le macchine non…
CybercrimeNegli ultimi anni, la sicurezza delle reti ha affrontato minacce sempre più sofisticate, capaci di aggirare le difese tradizionali e di penetrare negli strati più profondi delle infrastrutture. Un’analisi recente ha portato alla luce uno…
VulnerabilitàNegli ultimi tempi, la piattaforma di automazione n8n sta affrontando una serie crescente di bug di sicurezza. n8n è una piattaforma di automazione che trasforma task complessi in operazioni semplici e veloci. Con pochi click…
InnovazioneArticolo scritto con la collaborazione di Giovanni Pollola. Per anni, “IA a bordo dei satelliti” serviva soprattutto a “ripulire” i dati: meno rumore nelle immagini e nei dati acquisiti attraverso i vari payload multisensoriali, meno…
Cyber ItaliaNegli ultimi giorni è stato segnalato un preoccupante aumento di truffe diffuse tramite WhatsApp dal CERT-AGID. I messaggi arrivano apparentemente da contatti conosciuti e richiedono urgentemente denaro, spesso per emergenze come spese mediche improvvise. La…