Rust 開發者必備:跨平臺工具庫精選

本文旨在爲您介紹一些在不同領域中表現突出的 Rust 庫。我們將深入探討這些庫的功能、優勢以及適用場景,並通過實際的代碼示例展示如何使用它們。

Rust 是一種備受讚譽的系統編程語言,以其卓越的性能、內存安全性和不斷壯大的生態系統而聞名。近年來,Rust 在開發者社區中迅速崛起,成爲構建高效、可靠軟件的首選工具之一。無論是開發操作系統、嵌入式系統,還是高性能網絡服務,Rust 都能提供強大的支持。然而,Rust 的真正魅力不僅在於語言本身,還在於其豐富的第三方庫(通常稱爲 “crates”),這些庫極大地擴展了 Rust 的應用範圍,幫助開發者更高效地完成各種任務。

無論您是 Rust 新手,還是已經有一定經驗的開發者,相信這些內容都能幫助您更好地利用 Rust 生態系統中的工具,提升開發效率並構建更強大的應用。接下來,讓我們一起探索這些優秀的 Rust 庫,開啓高效編程之旅!

核心實用程序

  1. serde

目的:序列化和反序列化。

用例:在 Rust 數據結構與 JSON、YAML 或二進制等格式之間進行轉換。

代碼示例:

use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, Debug)]
struct User {
    id: u32,
    name: String,
    active: bool,
}
fn main() {
    let user = User {
        id: 1,
        name: "Alice".to_string(),
        active: true,
    };
    let json = serde_json::to_string(&user).unwrap();
    println!("Serialized: {}", json);
    let deserialized: User = serde_json::from_str(&json).unwrap();
    println!("Deserialized: {:?}", deserialized);
}
  1. tokio

目的:Rust 生態系統的異步運行時。

用例:構建異步應用程序,例如 Web 服務器或網絡系統。

代碼示例:

use tokio::time::{sleep, Duration};
#[tokio::main]
async fn main() {
    println!("Start");
    sleep(Duration::from_secs(1)).await;
    println!("End");
}
  1. rayon

目的:Rust 中的數據並行計算。

用例:對集合進行並行操作以提高多核處理器的性能。

代碼示例:

use rayon::prelude::*;
fn main() {
    let nums: Vec<u32> = (1..10_000).collect();
    let sum: u32 = nums.par_iter().map(|x| x * 2).sum();
    println!("Sum: {}", sum);
}
  1. regex

目的:正則表達式。

用例:執行模式匹配和文本處理。

代碼示例:

use regex::Regex;
fn main() {
    let re = Regex::new(r"\w+@
\w+\.\w+").unwrap();
    let text = "Contact: alice@example.com";
    if let Some(mat) = re.find(text) {
        println!("Found email: {}", mat.as_str());
    }
}
  1. log and env_logger

目的:結構化日誌記錄。

用例:嚮應用程序和庫添加日誌記錄。

代碼示例:

use log::{info, warn};
fn main() {
    env_logger::init();
    info!("Application started");
    warn!("This is a warning");
}

Web 開發

  1. actix-web

目的:Web 框架。

用例:構建 Web 服務器、REST API 等。

代碼示例:

use actix_web::{web, App, HttpServer, Responder};
async fn hello() -> impl Responder {
    "Hello, world!"
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().route("/", web::get().to(hello)))
        .bind("127.0.0.1:8080")?
        .run()
        .await
}
  1. warp

目的:Web 框架。

用例:輕量級、可組合的 Web 應用程序框架。

代碼示例:

use warp::Filter;
#[tokio::main]
async fn main() {
    let hello = warp::path!("hello" / String).map(|name| format!("Hello, {}!", name));
    warp::serve(hello).run(([127, 0, 0, 1], 3030)).await;
}
  1. hyper

目的:低級 HTTP 實現。

用例:自定義 HTTP 客戶端和服務器。

代碼示例:

use hyper::{Body, Request, Response, Server};
use hyper::service::{make_service_fn, service_fn};
async fn handle(_req: Request<Body>) -> Result<Response<Body>, hyper::Error> {
    Ok(Response::new(Body::from("Hello, world!")))
}
#[tokio::main]
async fn main() {
    let addr = ([127, 0, 0, 1], 3000).into();
    let make_svc = make_service_fn(|_| async {
        Ok::<_, hyper::Error>(service_fn(handle))
    });
    let server = Server::bind(&addr).serve(make_svc);
    server.await.unwrap();
}
  1. salvo

目的: Web 框架。

用例:一個強大而靈活的 web 框架,設計簡單易於使用,關注性能和可擴展性。

代碼示例:

use salvo::prelude::*;
#[handler]
async fn hello_world() -> &'static str {
    "Hello, World!"
}
#[tokio::main]
async fn main() {
    let router = Router::new().get(hello_world);
    let acceptor = TcpListener::new("127.0.0.1:4000").bind().await;
    Server::new(acceptor).serve(router).await;
}
  1. axum

目的:Web 框架。

hyper 用例:基於和構建的異步優先 HTTP 服務器框架 tower。

代碼示例:

use axum::{handler::get, Router};
#[tokio::main]
async fn main() {
    let app = Router::new().route("/", get(|| async { "Hello, World!" }));
    axum::Server::bind(&"127.0.0.1:4000".parse().unwrap())
        .serve(app.into_make_service())
        .await
        .unwrap();
}

網絡

  1. reqwest

目的:HTTP 客戶端。

用例:在異步 Rust 應用程序中發出 HTTP 請求。

代碼示例:

use reqwest;
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    let response = reqwest::get("https://httpbin.org/get").await?.text().await?;
    println!("Response: {}", response);
    Ok(())
}
  1. tonic

目的:gRPC 框架。

用例:構建高性能 gRPC 客戶端和服務器。

代碼示例:

use tonic::{transport::Server, Request, Response, Status};
use tonic::transport::Channel;
pub mod hello_world {
    tonic::include_proto!("helloworld");
}
use hello_world::greeter_client::GreeterClient;
use hello_world::GreeterServer;
use hello_world::{HelloReply, HelloRequest};
#[derive(Debug, Default)]
pub struct MyGreeter;
#[tonic::async_trait]
impl hello_world::greeter_server::Greeter for MyGreeter {
    async fn say_hello(&self, request: Request<HelloRequest>) -> Result<Response<HelloReply>, Status> {
        let reply = hello_world::HelloReply {
            message: format!("Hello {}!", request.into_inner().name),
        };
        Ok(Response::new(reply))
    }
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let addr = "[::1]:50051".parse()?;
    let greeter = MyGreeter::default();
    println!("Server listening on {}", addr);
    Server::builder()
        .add_service(GreeterServer::new(greeter))
        .serve(addr)
        .await?;
    Ok(())
}

機器學習

  1. ndarray

目的:N 維數組操作。

用例:執行科學計算或機器學習任務。

代碼示例:

use ndarray::Array2;
fn main() {
    let a: Array2<f64> = Array2::zeros((3, 3));
    println!("Matrix: \n{:?}", a);
}
  1. tch-rs

目的:張量操作和深度學習。

用例:利用 Rust 中的 PyTorch 功能。

代碼示例:

use tch::{Tensor, kind::Kind};
fn main() {
    let a = Tensor::of_slice(&[1, 2, 3]).to_kind(Kind::Float);
    let b = Tensor::of_slice(&[4, 5, 6]).to_kind(Kind::Float);
    let c = a + b;
    c.print();
}

遊戲開發

  1. bevy

目的:遊戲引擎。

用例:構建遊戲、模擬和交互式體驗。

代碼示例:

use bevy::prelude::*;
fn main() {
    App::build()
        .add_plugins(DefaultPlugins)
        .add_startup_system(setup.system())
        .run();
}
fn setup(mut commands: Commands) {
    commands.spawn(Camera2dBundle::default());
    commands.spawn(SpriteBundle::default());
}

2.ggez

目的:簡單的遊戲框架。

用例:創建輕量級 2D 遊戲。

代碼示例:

use ggez::{Context, GameResult};
use ggez::event::{self, EventHandler};
struct MyGame;
impl EventHandler for MyGame {
    fn update(&mut self, _ctx: &mut Context) -> GameResult {
        Ok(())
    }
    fn draw(&mut self, ctx: &mut Context) -> GameResult {
        ggez::graphics::clear(ctx, ggez::graphics::WHITE);
        ggez::graphics::present(ctx)?;
        Ok(())
    }
}
fn main() -> GameResult {
    let (mut ctx, mut event_loop) = ggez::ContextBuilder::new("my_game""Author")
        .build()?;
    let game = MyGame;
    event::run(&mut ctx, &mut event_loop, game)
}

這些庫只是 Rust 多功能生態系統的一部分,展示了其在網絡、機器學習和遊戲開發方面的實力。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/DL6QInvmbmToSQjajnWU7A