Sviluppo in Rust e migrazione da C/C++, un modulo alla volta
Scriviamo Rust da molto prima che diventasse di moda. Lo usiamo dove si guadagna il suo posto: servizi in cui contano la latenza e i costi infrastrutturali, codice sensibile per la sicurezza e C e C++ legacy che deve diventare sicuro senza fermare l’azienda. In tutti gli altri casi le diremo che un linguaggio più diffuso è la scelta migliore.
Perché lo scegliamo
Ragioni di ingegneria, non di moda: la stessa prova che ogni strumento del nostro stack deve superare.
Sicurezza della memoria senza garbage collector
Il compilatore esclude use-after-free, buffer overflow e data race prima che il codice vada in produzione: le classi di bug dietro la maggior parte delle correzioni di sicurezza nei grandi codebase C e C++.
Prestazioni da C, latenza prevedibile
Nessuna pausa del runtime e nessuna allocazione nascosta. I servizi Rust richiedono in genere una frazione della CPU e della memoria dei sistemi che sostituiscono, e la differenza si vede direttamente nella bolletta cloud.
Stabile da dieci anni, e ormai mainstream
Rust 1.0 è uscito nel 2015. Microsoft, Cloudflare, Meta e GitHub lo usano in produzione su larga scala: supera la stessa prova di affidabilità nel tempo di ogni altro strumento del nostro stack.
Refactoring di cui fidarsi
Un sistema di tipi rigoroso e un compilatore che spiega i propri errori fanno sì che anche le modifiche più ampie arrivino senza regressioni: la proprietà che rende meno costoso possedere sistemi destinati a durare.
Quando ne sconsigliamo l’uso
Uno strumento che consigliamo per tutto è uno strumento su cui abbiamo smesso di ragionare. Tre casi in cui la risposta è un’altra.
Un tipico prodotto CRUD o un portale
Form, dashboard e flussi di lavoro aziendali raramente toccano i limiti che Rust elimina. TypeScript o .NET li consegnano più in fretta e i suoi futuri assunti li conoscono già - veda Next.js e .NET.
Un sistema stabile che nessuno deve modificare
Riscrivere C++ funzionante fine a se stesso raramente rientra. Se il codice è stabile, abbastanza sicuro ed economico da far girare, lo lasci dov’è - e scriva in Rust i nuovi moduli solo quando c’è un motivo per mettere mano a quell’area.
Una riscrittura big-bang
Sostituire tutto in una volta è il modo in cui le migrazioni muoiono. Spostiamo un modulo alla volta dietro un’interfaccia stabile - lo stesso approccio del nostro lavoro di modernizzazione dei sistemi legacy.
Cosa costruiamo con Rust
Le forme che il lavoro in Rust prende più spesso: ognuna legata a un servizio che conosciamo bene.
Servizi backend ad alto throughput →
API, processori di eventi e pipeline di dati in cui contano la latenza e il costo per richiesta: costruiti in Rust e integrati con il resto del suo stack.
Migrazione incrementale da C/C++ →
Percorsi critici e moduli sensibili per la sicurezza riscritti in Rust dietro confini FFI, con i test esistenti a dimostrare che il comportamento resta identico.
Motori in tempo reale →
Motori di pricing, matching e regolamento in cui conta ogni millisecondo e ogni decimale corretto.
Infrastruttura AI →
Gateway di inferenza, elaborazione documentale e il collante attorno ai modelli self-hosted: veloci, con un uso della memoria prevedibile e sicuri sotto carico.
CLI e strumenti per sviluppatori →
Strumenti in un singolo binario per i suoi ingegneri e il team operativo: si avviano in fretta, si distribuiscono facilmente, nessun runtime da installare.
Conviene migrare a Rust? →
Il punto di vista del nostro fondatore dopo sette anni di Rust: che cosa insegnano le grandi migrazioni e come decidere per il suo sistema.
Come si svolge una migrazione
Si comincia con una diagnosi: mappiamo quali moduli causano crash, correzioni di sicurezza e costi cloud, e li ordiniamo per ritorno dell’investimento. Poi ogni modulo si sposta dietro un’interfaccia stabile, con i test esistenti - e quelli nuovi - a dimostrare che il comportamento non è cambiato prima di spostare il traffico. La traduzione assistita dall’AI accelera la parte meccanica; agli ingegneri restano le interfacce, i confini unsafe e la revisione. La fatturazione segue le milestone accettate, come per ogni progetto.
Domande frequenti
Dovremmo riscrivere in Rust il nostro codebase C++?
Di solito non tutto in una volta. Si parte dai moduli che causano più correzioni di sicurezza, crash o costi infrastrutturali, li si riscrive dietro un'interfaccia stabile e si lascia che siano i risultati a decidere fin dove spingersi.
Quanto dura una migrazione a Rust?
Un singolo modulo o servizio richiede in genere settimane, non anni. La traduzione assistita dall'AI ha reso molto più rapida la parte meccanica; il tempo va nei test, nelle interfacce e nella verifica che il comportamento non sia cambiato.
Rust può convivere con il nostro codice esistente?
Sì. Rust chiama ed è chiamato da C e C++ tramite FFI, e gira come servizio separato accanto a qualsiasi altra cosa. Gran parte del nostro lavoro in Rust vive dentro sistemi scritti per lo più in altri linguaggi.
Sarà difficile assumere sviluppatori Rust in futuro?
Il bacino è più piccolo di quello di TypeScript o Java, ma cresce in fretta, e da anni Rust è in cima ai sondaggi degli sviluppatori come linguaggio più apprezzato. Documentiamo tutto ciò che consegniamo, così che il suo team possa prenderlo in carico.
Si chiede se Rust valga la pena per il suo sistema?
La diagnosi è gratuita: guardiamo il codice, mettiamo in ordine i candidati e le diciamo con onestà se la risposta è lasciarlo com'è.