Python verso Rust: un futuro più sicuro per il linguaggio di programmazione
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.
L'articolo Python verso Rust: un futuro più sicuro per il linguaggio di programmazione proviene da Red Hot Cyber.