Networking

Perché Rust?

Una piuma

Basso consumo di risorse

Tieni sotto controllo le risorse di sistema per tenere al minimo l'utilizzo di memoria e CPU. Fatti aiutare dal compilatore per scrivere codice corretto. Il tutto in un ecosistema produttivo e piacevole da usare.

Uno scudo

Sicuro e affidabile

Il potente type checker di Rust previene intere classi di bug. Hai la certezza di sapere esattamente dove e quando un certo stato è condiviso o modificato. Fatti aiutare a evidenziare possibili punti deboli - prima del deploy.

Ingranaggi connessi

Concorrenza e scalabilità

Usa l'approccio alla programmazione concorrente che si adatta meglio alle esigenze. Rust previene che thread o task concorrenti condividano gli stati. Rust ti permette di scalare fin dove possibile, senza alcuna preoccupazione.

Inizia!

Rust ha un ecosistema di librerie per il web in continua crescita. Questi sono solo un paio di esempi:

POST di un JSON

// This will POST a body of
//     `{"lang": "rust", "body": "json"}`
#[derive(Serialize)]
struct Body<'a> {
    lang: &'a str,
    body: &'a str,
}

let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
    .json(&Body {
        lang: "rust",
        body: "json",
    })
    .send()?;
Scopri di più su reqwest

Gestione della POST di un JSON

#[derive(Deserialize)]
struct Task { name: String, completed: bool }

#[post("/", data = "<task>")]
fn new(task: Json<Task>) -> Flash<Redirect> {
    if task.name.is_empty() {
        Flash::error(Redirect::to("/"),
            "Cannot be empty.")
    } else {
        Flash::success(Redirect::to("/"),
            "Task added.")
    }
}
Scopri di più su Rocket

Uso in produzione

firefox
La migrazione a Rust della nostra infrastruttura di invio notifiche push ci ha permesso di avere una base di codice più facile da mantenere, focalizzata sulla correttezza del codice e al tempo stesso con prestazioni incredbili. Con Rust, possiamo adesso gestire picchi fino a 20 milioni di connessioni websocket all'ora sui nostri server.

– Benjamin Bangert, Staff Engineer, Mozilla

Rust è un componente fondamentale nella roadmap dei progetti di Linkerd. Il suo type system ci permette di costruire sistemi modulari, testabili e componibili senza sacrificare le prestazioni. Ciò che è comunque sorprendente, è che il sistema di lifetime/borrow checking di Rust ci permette di evitare una grande fetta di sorgenti di leak di memoria. Dopo 2 anni, non riesco davvero a immaginare un altro linguaggio per questo compito.

– Oliver Gould, CTO, Buoyant

buoyant