ネットワーク

なぜRustか?

羽

省リソース

リソースの使用を制御しメモリとCPUにかかる負荷を最小限に抑えます。 コンパイラーの助けを借りて、正しく動作することを確認しましょう。 生産的で使い心地のよいエコシステムでこれを行います。

盾

安全性と信頼性

Rustの強力な型チェッカがあらゆる種類のバグを防ぎます。 状態がいつどこで共有および変更されたかを確実に把握できます。 障害点を突き止める検査をデプロイ前に行います。

つながった歯車

大規模な並行処理

最適な並行性アプローチを組み合わせて使用​​します。 Rustは、スレッドまたはタスク間で誤って状態を共有しないようにします。 スケーリングの最後のビットまで大胆に絞ることができます。

はじめましょう!

Rustにはウェブのための使いやすいライブラリのエコシステムがあり成長を続けています。ここでは例として二つ紹介します。

JSONをPOSTする

// 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()?;
reqwestについてもっと知る

JSON POSTをハンドルする

#[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.")
    }
}
Rocketについてもっと知る

本番環境での利用

firefox
私たちはPush接続インフラストラクチャをRustに移行することで、非常に高いパフォーマンスを実現しながらも、正確性に重点を置いた保守しやすいコードベースを手にしました。私たちは現在、ピーク時には2,000万件のwebsocket同時接続をRustサーバーで捌いています。

– Benjamin Bangert, スタッフエンジニア, Mozilla

Linkerdプロジェクトの技術ロードマップにおいて、Rustは土台となるものです。その型システムによって、モジュール性がありテスト可能で組み合わせ可能なユニットを、実行時性能を犠牲にすることなく作れます。その一方で最も驚かされる点として、Rustのライフタイム/借用チェックシステムにより大部分のリソースリークを避けられることが挙げられます。二年経ちましたが、他の言語を業務で使うことは全くもって想像できないですね。

– Oliver Gould, CTO, Buoyant

buoyant