Rilasciata la Shell Fish 4.0 (beta): Completata la Transizione Verso Rust
Ho già scritto di questa shell Fish in questo blog, ma ecco un breve riassunto della storia ed evoluzione della shell Fish. La Friendly Interactive SHell (Fish) è stata creata nel 2005 da Axel Liljencrantz, con l’obiettivo di fornire un’interfaccia più amichevole e utilizzabile rispetto alle shell tradizionali come Bash. La shell Fish si è distinta fin dall’inizio per le sue funzionalità intuitive, tra cui il completamento automatico, l’evidenziazione della sintassi e una documentazione completa incorporata.
Negli ultimi 2 anni, il team di sviluppo della popolare shell Fish ha intrapreso un ambizioso progetto di riscrittura del codice, culminato nella versione beta della shell Fish 4.0, ora quasi completamente realizzata nel linguaggio di programmazione Rust. Questo passaggio rappresenta un cambiamento significativo rispetto al precedente codice scritto in C++, con un incremento che ha visto il passaggio da 57.000 linee di C++ a circa 75.000 linee di Rust. La transizione a Rust mira a migliorare la sicurezza del codice, le prestazioni e la manutenibilità.
Un Progetto Inaspettato
La storia della transizione della shell Fish inizia nel 2023, quando un pull request (una richiesta di modifica del codice proposta da un collaboratore a un progetto, che consente ai manutentori di rivedere e integrare le modifiche) scherzoso intitolato “Rewrite it in Rust” (Riscriviamola in Rust) ha dato il via a una serie di considerazioni più serie e ponderate. Inizialmente, l’idea non era stata presa sul serio, soprattutto considerando che la shell Fish aveva già subito una portabilità da C a C++ inizialmente durante il suo sviluppo prima della versione stabile definitiva, nel tentativo di sfruttare strutture dati più avanzate e funzionalità di programmazione moderne. Tuttavia, con il passare del tempo, le limitazioni del C++ sono diventate sempre più evidenti. Gli sviluppatori hanno iniziato a riconoscere che la complessità degli strumenti di sviluppo, le difficoltà nella gestione della concorrenza e i problemi legati alla comunità di sviluppo rendevano necessario un cambiamento.
Le motivazioni pratiche che hanno spinto i manutentori a trasformare questa proposta in un progetto concreto includono il desiderio di migliorare la sicurezza nella gestione della concorrenza. In particolare, la shell Fish ha sempre puntato su funzionalità avanzate come suggerimenti automatici e evidenziazione della sintassi, che richiedono un uso efficace dei thread (unità di esecuzione all’interno di un processo che consente l’esecuzione simultanea di più operazioni). Tuttavia, implementare queste funzionalità in C++ si è rivelato complicato e problematico. Rust, con il suo modello di proprietà e le sue capacità integrate di sicurezza nei thread, si è presentato come una soluzione ideale per affrontare queste sfide.Inoltre, la crescente popolarità di Rust nella comunità degli sviluppatori ha rappresentato un ulteriore incentivo. La transizione non solo avrebbe reso Fish più moderno e rilevante nel panorama delle distribuzioni GNU/Linux, ma avrebbe anche facilitato l’inserimento di nuovi contributori grazie a una comunità attiva e in espansione. Così, ciò che era iniziato come una semplice proposta umoristica si è evoluto in un ambizioso progetto di riscrittura che promette di migliorare notevolmente l’esperienza utente e le prestazioni complessive della shell Fish.
Vantaggi dell’Utilizzo di Rust
La scelta di Rust come linguaggio principale è stata dettata da diverse ragioni:
- Strumenti e Comunità: la comunità e gli strumenti associati al C++ possono risultare complessi, specialmente per progetti gestiti da volontari o hobbisti.
- Concorrenza: la shell Fish è noto per le sue avanzate funzionalità di suggerimento automatico e evidenziazione della sintassi, che richiedono un uso efficiente dei thread. Implementare ulteriori funzionalità multithreading in C++ si è rivelato complicato; Rust offre invece una gestione della concorrenza più sicura e intuitiva.
- Gestione delle Dipendenze: Rust fornisce una gestione delle dipendenze superiore e messaggi d’errore del compilatore più chiari. Gli sviluppatori possono semplicemente eseguire
rustup
per ottenere un ambiente coerente senza dover affrontare problemi di incompatibilità delle versioni.
Tuttavia, una sfortunata perdita dovuta al passaggio a Rust è il supporto di Cygwin (un livello di compatibilità che consente di eseguire strumenti e applicazioni GNU/Linux su Windows), ma gli sviluppatori sono fiduciosi che la principale base di utenti della shell Fish (principalmente utenti GNU/Linux, BSD e macOS) rimanga ben supportata.
Sviluppo Graduale e Funzionalità Migliorate
Durante lo sviluppo, il team ha adottato un approccio graduale, migrando un sottosistema alla volta da C++ a Rust. Hanno utilizzato uno strumento chiamato autocxx, che consente di chiamare componenti Rust all’interno del codice legacy in C++ (e viceversa). Questo ha permesso alla shell Fish di mantenere una base di codice parzialmente in Rust e parzialmente in C++ fino a quando l’ultima porzione di C++ non è stata rimossa all’inizio del 2024. Questa strategia ha mantenuto la shell Fish testabile e funzionale durante la riscrittura, consentendo così rilasci regolari, come la versione della shell Fish 3.7.0 basata ancora su C++ , mentre la migrazione complessiva al linguaggio Rust continuava.
La beta della shell Fish 4.0 presenta prestazioni generalmente migliori rispetto alle versioni precedenti. Sebbene l’utilizzo della memoria sia leggermente aumentato (da 7 MB a 8 MB a riposo), la gestione delle operazioni su grandi cartelle non provoca un aumento significativo dell’uso della memoria, il che è incoraggiante per un primo risultato.
In circa 14 mesi di sviluppo, i manutentori della shell Fish hanno prodotto oltre 2.600 commit (modifica salvata nel sistema di controllo del codice sorgente che registra un’istantanea del progetto con tutti gli aggiornamenti effettuati) da più di 200 autori, traducendo oltre 57.000 linee di codice C++ in circa 75.000 linee di codice Rust. Uno sforzo collettivo che dimostra l’impegno della comunità verso la crescita e l’evoluzione della shell Fish.
Futuro e Prossimi Passi
Guardando avanti, gli sviluppatori intendono perfezionare le funzionalità basate su Rust, ottimizzando le prestazioni e migliorando la sicurezza del codice. Potrebbero rivedere alcune delle vecchie peculiarità della shell Fish, come la gestione delle stringhe UTF-32, che è un formato di codifica in cui ogni carattere è rappresentato da 32 bit, garantendo la compatibilità con una vasta gamma di caratteri internazionali. Inoltre, continueranno a semplificare il processo di compilazione, o “build”, che è la serie di passi necessari per convertire il codice sorgente in un programma eseguibile. Rendendo il processo di build più veloce e riducendo le dipendenze esterne, contribuiranno a migliorare l’esperienza utente, permettendo agli sviluppatori di concentrarsi sulle funzionalità anziché sui dettagli tecnici. La comunità di utenti sarà coinvolta nel feedback continuo per affinare ulteriormente queste innovazioni.
Per maggiori informazioni, fare riferimento all’annuncio ufficiale.
Fonte: https://fishshell.com/blog/rustport/
Fonte: https://fishshell.com/docs/current/relnotes.html
Fonte: https://linuxiac.com/fish-shell-4-0-rust-is-coming/
Se vuoi sostenerci, puoi farlo acquistando qualsiasi cosa dai diversi link di affiliazione che abbiamo nel nostro sito o partendo da qui oppure alcune di queste distribuzioni GNU/Linux che sono disponibili sul nostro negozio online, quelle mancanti possono essere comunque richieste, e su cui trovi anche PC, NAS e il ns ServerOne. Se ti senti generoso, puoi anche donarmi solo 1€ o più se vuoi con PayPal e aiutarmi a continuare a pubblicare più contenuti come questo. Grazie!
Hai dubbi o problemi? Ti aiutiamo noi!
Se vuoi rimanere sempre aggiornato, iscriviti al nostro canale Telegram.Se vuoi ricevere supporto per qualsiasi dubbio o problema, iscriviti alla nostra community Facebook o gruppo Telegram.
Cosa ne pensi? Fateci sapere i vostri pensieri nei commenti qui sotto.
Ti piace quello che leggi? Per favore condividilo con gli altri.
Una risposta
[…] Source: Read More […]