為什么要選Rust?學(xué)習(xí)Rust從零開始配置和實(shí)現(xiàn)第一個(gè)簡(jiǎn)單項(xiàng)目
一、為什么要學(xué)習(xí)Rust?——理解Rust的核心價(jià)值與應(yīng)用場(chǎng)景
1.1 新手最關(guān)心的三個(gè)問題
作為Rust聯(lián)合創(chuàng)作人,我接觸過大量剛?cè)腴T或想轉(zhuǎn)Rust的開發(fā)者,他們問得最多的三個(gè)問題是:
- Rust難學(xué)嗎?
?? 客觀講,Rust有一定學(xué)習(xí)門檻(主要是內(nèi)存安全機(jī)制和所有權(quán)系統(tǒng)),但只要遵循循序漸進(jìn)的學(xué)習(xí)路徑,有其他語言基礎(chǔ)(哪怕是Python這種非系統(tǒng)語言),通常1-2個(gè)月就能上手開發(fā)簡(jiǎn)單項(xiàng)目,3-6個(gè)月能熟練寫生產(chǎn)級(jí)代碼。 - Rust適合做什么?
? 系統(tǒng)級(jí)開發(fā):操作系統(tǒng)內(nèi)核(如Redox)、驅(qū)動(dòng)程序、嵌入式系統(tǒng)(ESP32/STM32等支持Rust)
? 網(wǎng)絡(luò)編程:高性能服務(wù)器(如Tokio框架的異步服務(wù)器)、區(qū)塊鏈(如Solana)
? 工具開發(fā):Docker Desktop、GitLab CI Runner、GitHub Copilot的后端引擎
? WebAssembly:前端性能瓶頸優(yōu)化(如Yew/Tauri框架開發(fā)桌面Web混合應(yīng)用) - Rust比C/C++好在哪?
?? 內(nèi)存安全:通過所有權(quán)、借用、生命周期三大核心機(jī)制,在編譯期就杜絕了空指針、野指針、內(nèi)存泄漏等C/C++常見的安全問題,無需GC(垃圾回收)
?? 高性能:與C/C++旗鼓相當(dāng),無運(yùn)行時(shí)開銷
?? 生態(tài)系統(tǒng):Cargo包管理工具非常強(qiáng)大,crates.io(Rust的PyPI)有超過150萬個(gè)開源庫(kù)
?? 語法現(xiàn)代化:支持模式匹配、泛型、異步編程、迭代器等現(xiàn)代語言特性
1.2 真實(shí)案例:Rust在生產(chǎn)環(huán)境中的應(yīng)用
?? 案例1:Microsoft Azure用Rust重構(gòu)Sway防火墻
Microsoft Azure的Sway防火墻原來用C++開發(fā),存在大量安全漏洞和內(nèi)存泄漏問題。2021年,Azure團(tuán)隊(duì)用Rust重構(gòu)了核心模塊,安全漏洞減少了90%,性能提升了20%。
?? 案例2:Cloudflare用Rust開發(fā)Wrangler CLI工具
Cloudflare Workers的官方CLI工具Wrangler,原來用Node.js開發(fā),下載依賴慢、啟動(dòng)時(shí)間長(zhǎng)。2022年,Cloudflare團(tuán)隊(duì)用Rust重構(gòu)了Wrangler,啟動(dòng)時(shí)間從30秒縮短到1秒,下載依賴速度提升了5倍。

二、Rust開發(fā)環(huán)境搭建全流程——Windows/macOS/Linux通用方案
2.1 統(tǒng)一安裝工具:rustup
?? rustup是Rust官方唯一推薦的安裝工具,它可以:
- 安裝和管理多個(gè)Rust版本(如穩(wěn)定版、測(cè)試版、 nightly版)
- 安裝和管理不同的工具鏈(如x86_64-unknown-linux-gnu、wasm32-unknown-unknown)
- 配置Rust的環(huán)境變量和鏡像源
2.1.1 Windows安裝
?? 注意:Windows用戶需要先安裝Visual Studio Build Tools(C++編譯器),否則無法編譯Rust程序。
- 訪問Rust官方網(wǎng)站:https://www.rust-lang.org/zh-CN/
- 點(diǎn)擊“下載Rust安裝程序”,選擇“Windows (64-bit)”
- 運(yùn)行下載的
rustup-init.exe,選擇默認(rèn)選項(xiàng)(按1鍵) - 安裝完成后,驗(yàn)證安裝:
打開PowerShell或命令提示符,輸入以下命令:? 成功標(biāo)志:顯示rustc --version cargo --version
rustc 1.78.0 (9b00956e5 2024-04-29)和cargo 1.78.0 (54d8815d0 2024-03-26)類似的版本信息
2.1.2 macOS安裝
- 打開終端(Terminal)
- 輸入以下命令下載并運(yùn)行rustup安裝腳本:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 按1鍵選擇默認(rèn)選項(xiàng)
- 驗(yàn)證安裝:
rustc --version cargo --version
2.1.3 Linux安裝(以Ubuntu/Debian為例)
- 打開終端
- 更新系統(tǒng)軟件源并安裝依賴:
sudo apt update sudo apt install -y build-essential curl git
- 下載并運(yùn)行rustup安裝腳本:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 驗(yàn)證安裝:
rustc --version cargo --version
2.2 配置國(guó)內(nèi)鏡像源——加速依賴下載
?? 警告:由于網(wǎng)絡(luò)原因,直接從crates.io下載依賴可能會(huì)非常慢,甚至失敗。建議配置國(guó)內(nèi)鏡像源。
- 創(chuàng)建或編輯
~/.cargo/config.toml文件(Windows用戶路徑是C:\Users\你的用戶名\.cargo\config.toml) - 輸入以下內(nèi)容:
[source.crates-io] replace-with = 'ustc' [source.ustc] registry = "git://mirrors.ustc.edu.cn/crates.io-index" # 如果git協(xié)議訪問慢,可以嘗試https協(xié)議 # registry = "https://mirrors.ustc.edu.cn/crates.io-index"
- 保存并退出
2.3 配置開發(fā)工具
推薦使用VS Code作為Rust開發(fā)IDE,因?yàn)樗蟹浅?qiáng)大的Rust插件支持。
2.3.1 安裝VS Code
訪問VS Code官方網(wǎng)站:https://code.visualstudio.com/,下載并安裝對(duì)應(yīng)系統(tǒng)的版本。
2.3.2 安裝Rust相關(guān)插件
打開VS Code,點(diǎn)擊左側(cè)的插件圖標(biāo)(Extensions),搜索并安裝以下插件:
- Rust Analyzer:由Rust官方團(tuán)隊(duì)主導(dǎo)開發(fā),提供代碼補(bǔ)全、語法檢查、定義跳轉(zhuǎn)、重構(gòu)等核心功能
- CodeLLDB:用于Rust程序的調(diào)試
- Cargo:Cargo命令的集成支持
- Even Better TOML:用于格式化Cargo.toml等TOML配置文件
三、第一個(gè)Rust項(xiàng)目:從Hello, World!到可發(fā)布的CLI工具
3.1 使用Cargo創(chuàng)建標(biāo)準(zhǔn)項(xiàng)目
?? 操作步驟:
- 打開終端(或VS Code的終端)
- 進(jìn)入你想存放項(xiàng)目的目錄,比如
~/projects - 輸入以下命令創(chuàng)建項(xiàng)目:
cargo new hello_rust_cli
- 進(jìn)入項(xiàng)目目錄:
cd hello_rust_cli
3.2 項(xiàng)目目錄結(jié)構(gòu)解析
?? 項(xiàng)目目錄結(jié)構(gòu):
hello_rust_cli/
├── Cargo.lock # 項(xiàng)目依賴的精確版本鎖定文件(自動(dòng)生成,不要手動(dòng)修改)
├── Cargo.toml # 項(xiàng)目配置文件(手動(dòng)編輯)
└── src/
└── main.rs # 主源碼文件(入口函數(shù)所在位置)
3.2.1 Cargo.toml內(nèi)容解析
[package] name = "hello_rust_cli" # 項(xiàng)目名稱(必須符合Rust的命名規(guī)范:小寫字母+下劃線) version = "0.1.0" # 項(xiàng)目版本(遵循語義化版本控制:MAJOR.MINOR.PATCH) edition = "2021" # Rust的版本(目前最新穩(wěn)定版是2021) [dependencies] # 項(xiàng)目依賴的庫(kù)(可以手動(dòng)添加,也可以用cargo add命令)
3.2.2 src/main.rs內(nèi)容解析
// src/main.rs - Hello, Rust!的標(biāo)準(zhǔn)寫法
fn main() {
println!("Hello, Rust World!");
}
fn main():Rust程序的入口函數(shù),Rust會(huì)自動(dòng)執(zhí)行這個(gè)函數(shù)println!():Rust的宏(不是函數(shù),注意后面的感嘆號(hào)),用于向控制臺(tái)輸出內(nèi)容
3.3 編譯、運(yùn)行、測(cè)試項(xiàng)目
3.3.1 編譯項(xiàng)目
cargo build # 編譯為debug版本(默認(rèn),用于開發(fā)和調(diào)試) cargo build --release # 編譯為release版本(優(yōu)化后的,用于生產(chǎn)環(huán)境)
? 成功標(biāo)志:編譯完成后,會(huì)在target/debug/或target/release/目錄下生成可執(zhí)行文件。
3.3.2 運(yùn)行項(xiàng)目
cargo run # 同時(shí)完成編譯和運(yùn)行debug版本 cargo run --release # 同時(shí)完成編譯和運(yùn)行release版本
? 成功標(biāo)志:輸出Hello, Rust World!。
3.3.3 測(cè)試項(xiàng)目
Rust的測(cè)試功能非常強(qiáng)大,我們可以在src/main.rs中添加測(cè)試代碼,也可以創(chuàng)建專門的測(cè)試文件。
?? 測(cè)試代碼示例:
在src/main.rs的末尾添加以下代碼:
#[cfg(test)]
mod tests {
#[test]
fn test_hello_world() {
assert_eq!(1 + 1, 2); // 簡(jiǎn)單的測(cè)試斷言
}
}
運(yùn)行測(cè)試:
cargo test # 運(yùn)行所有測(cè)試
? 成功標(biāo)志:顯示test tests::test_hello_world ... ok。
3.4 擴(kuò)展項(xiàng)目:添加命令行參數(shù)支持
現(xiàn)在,我們要將Hello, Rust!擴(kuò)展為一個(gè)支持命令行參數(shù)的CLI工具,比如:
cargo run -- --name "張三"
輸出:Hello, 張三!
?? 操作步驟:
- 添加依賴:我們需要使用
clap庫(kù)來處理命令行參數(shù)cargo add clap --features derive
- 修改src/main.rs:
use clap::Parser; /// 一個(gè)簡(jiǎn)單的Hello, Rust! CLI工具 #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] struct Args { /// 你的名字 #[arg(short, long)] name: String, } fn main() { let args = Args::parse(); println!("Hello, {}!", args.name); } - 運(yùn)行擴(kuò)展后的項(xiàng)目:? 成功標(biāo)志:輸出
cargo run -- --name "張三"
Hello, 張三!。
3.5 調(diào)試項(xiàng)目
我們可以使用VS Code的CodeLLDB插件來調(diào)試Rust程序。
?? 操作步驟:
- 在VS Code中打開項(xiàng)目
- 在src/main.rs的
println!()一行設(shè)置斷點(diǎn)(點(diǎn)擊行號(hào)左側(cè)的空白處) - 點(diǎn)擊左側(cè)的運(yùn)行圖標(biāo)(Run and Debug)
- 點(diǎn)擊“創(chuàng)建launch.json文件”,選擇“LLDB: Launch”
- 修改launch.json文件:
{ "version": "0.2.0", "configurations": [ { "name": "(lldb) Launch", "type": "lldb", "request": "launch", "program": "${workspaceFolder}/target/debug/hello_rust_cli", "args": ["--name", "張三"], "cwd": "${workspaceFolder}", "preLaunchTask": "cargo build" } ] } - 點(diǎn)擊“運(yùn)行”按鈕
- 程序會(huì)在斷點(diǎn)處停止,我們可以查看變量值、調(diào)用棧等信息
3.6 發(fā)布項(xiàng)目
我們可以使用Cargo將項(xiàng)目發(fā)布到crates.io上,供其他開發(fā)者使用。
?? 注意:發(fā)布項(xiàng)目之前,你需要先在crates.io上注冊(cè)賬號(hào),并配置API密鑰。
?? 操作步驟:
在crates.io上注冊(cè)賬號(hào):https://crates.io/users/sign_up
配置API密鑰:
在終端中輸入以下命令:cargo login
然后輸入你在crates.io上獲得的API密鑰。
修改Cargo.toml文件:
添加作者、描述、倉(cāng)庫(kù)地址等信息:[package] name = "hello_rust_cli" version = "0.1.0" edition = "2021" authors = ["你的名字 <你的郵箱>"] description = "一個(gè)簡(jiǎn)單的Hello, Rust! CLI工具" repository = "https://github.com/你的用戶名/hello_rust_cli" readme = "README.md" license = "MIT" [dependencies] clap = { version = "4.5.4", features = ["derive"] }創(chuàng)建README.md文件:
# hello_rust_cli 一個(gè)簡(jiǎn)單的Hello, Rust! CLI工具。 ## 安裝 ```bash cargo install hello_rust_cli
使用
hello_rust_cli --name "張三"
輸出:
Hello, 張三!許可證
MIT
發(fā)布項(xiàng)目:
cargo publish
? 成功標(biāo)志:顯示
Updating crates.io index和Published hello_rust_cli v0.1.0。
四、Rust新手常見陷阱與避坑指南
4.1 混淆變量的可變性與不可變性
?? 陷阱:在Rust中,變量默認(rèn)是不可變的(immutable),如果你嘗試修改一個(gè)不可變變量,會(huì)導(dǎo)致編譯錯(cuò)誤。
?? 錯(cuò)誤示例:
fn main() {
let x = 5;
x = 6; // 編譯錯(cuò)誤:x is declared as immutable
}
? 避坑方法:如果你需要修改一個(gè)變量,必須在聲明時(shí)添加mut關(guān)鍵字:
fn main() {
let mut x = 5;
x = 6;
println!("x = {}", x); // 輸出x = 6
}
4.2 忘記處理Result類型
?? 陷阱:Rust中的很多函數(shù)會(huì)返回Result類型,它表示操作成功或失敗。如果你忘記處理Result類型,會(huì)導(dǎo)致編譯錯(cuò)誤。
?? 錯(cuò)誤示例:
use std::fs::File;
fn main() {
let file = File::open("test.txt"); // 返回Result<File, io::Error>
}
? 避坑方法:有三種方法處理Result類型:
- 使用match表達(dá)式:
use std::fs::File; use std::io::ErrorKind; fn main() { let file = File::open("test.txt"); match file { Ok(f) => println!("文件打開成功"), Err(e) => match e.kind() { ErrorKind::NotFound => println!("文件不存在"), _ => println!("文件打開失?。簕}", e), }, } } - 使用if let表達(dá)式:
use std::fs::File; fn main() { if let Ok(f) = File::open("test.txt") { println!("文件打開成功"); } else { println!("文件打開失敗"); } } - 使用?運(yùn)算符:
use std::fs::File; use std::io; fn read_file() -> io::Result<()> { let _file = File::open("test.txt")?; Ok(()) } fn main() { if let Err(e) = read_file() { println!("文件操作失?。簕}", e); } }
4.3 混淆引用與所有權(quán)
?? 陷阱:Rust的所有權(quán)系統(tǒng)是它最核心的內(nèi)存安全機(jī)制,也是最容易讓新手困惑的地方。簡(jiǎn)單來說,每個(gè)值都有且僅有一個(gè)所有者,當(dāng)所有者離開作用域時(shí),值會(huì)被自動(dòng)釋放。
?? 錯(cuò)誤示例:
fn main() {
let s = String::from("hello");
takes_ownership(s); // s的所有權(quán)轉(zhuǎn)移到takes_ownership函數(shù)
println!("{}", s); // 編譯錯(cuò)誤:s已經(jīng)沒有所有權(quán)了
}
fn takes_ownership(s: String) {
println!("{}", s);
}
? 避坑方法:如果我們不想轉(zhuǎn)移所有權(quán),可以使用引用(reference):
fn main() {
let s = String::from("hello");
borrows_ownership(&s); // 傳遞s的引用
println!("{}", s); // 編譯成功:s的所有權(quán)還在
}
fn borrows_ownership(s: &String) {
println!("{}", s);
}
4.4 忘記處理生命周期
?? 陷阱:Rust的生命周期系統(tǒng)用于確保引用的有效性,防止出現(xiàn)懸垂引用。如果我們忘記處理生命周期,會(huì)導(dǎo)致編譯錯(cuò)誤。
?? 錯(cuò)誤示例:
fn main() {
let r;
{
let x = 5;
r = &x; // 編譯錯(cuò)誤:x的生命周期比r短
}
println!("{}", r);
}
? 避坑方法:確保引用的生命周期不超過所有者的生命周期:
fn main() {
let x = 5;
let r = &x;
println!("{}", r);
}
五、總結(jié)與展望
5.1 總結(jié)
? 完成了Rust開發(fā)環(huán)境的完整搭建(Windows/macOS/Linux),配置了國(guó)內(nèi)鏡像源加速依賴下載
? 理解了Cargo作為Rust標(biāo)準(zhǔn)構(gòu)建系統(tǒng)和包管理器的核心功能
? 成功創(chuàng)建了第一個(gè)Rust項(xiàng)目Hello, Rust!,并將其擴(kuò)展為支持命令行參數(shù)的CLI工具
? 掌握了Rust程序的編譯、運(yùn)行、測(cè)試、調(diào)試、發(fā)布流程
? 了解了Rust新手常見的陷阱與避坑方法
到此這篇關(guān)于為什么要選Rust?學(xué)習(xí)Rust從零開始配置和實(shí)現(xiàn)第一個(gè)簡(jiǎn)單項(xiàng)目的文章就介紹到這了,更多相關(guān)Rust配置和實(shí)現(xiàn)第一個(gè)項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust中實(shí)例化動(dòng)態(tài)對(duì)象的示例詳解
這篇文章主要為大家詳細(xì)介紹了Rust中實(shí)例化動(dòng)態(tài)對(duì)象的多種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
Rust捕獲全局panic并記錄進(jìn)程退出日志的方法
本文提供了捕獲全局panic并記錄進(jìn)程退出日志的方法,首先使用 panic::set_hook 注冊(cè)異常處理及panic 觸發(fā)異常,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-04-04
使用cargo install安裝Rust二進(jìn)制工具過程
cargoinstall是一個(gè)用于安裝包含可執(zhí)行目標(biāo)的Rust包的命令行工具,類似于系統(tǒng)軟件包管理器,但它為Rust開發(fā)者提供了一種簡(jiǎn)潔的方式來安裝和管理命令行工具,安裝后,二進(jìn)制文件會(huì)存儲(chǔ)在$HOME/.cargo/bin目錄中,需要將該目錄添加到$PATH環(huán)境變量中才能在命令行中直接運(yùn)行2025-02-02
Rust中用enum實(shí)現(xiàn)多參數(shù)Hook機(jī)制完整代碼
在 Rust 中,如果想為enum實(shí)現(xiàn)一個(gè)帶多參數(shù)的 Hook 機(jī)制,可以結(jié)合模式匹配和枚舉來處理,這種方式可以擴(kuò)展到支持不同類型的輸入?yún)?shù)和邏輯處理,下面通過示例代碼介紹Rust中用enum實(shí)現(xiàn)多參數(shù)Hook機(jī)制,感興趣的朋友一起看看吧2024-12-12
Rust實(shí)現(xiàn)構(gòu)建器模式和如何使用Bon庫(kù)中的構(gòu)建器
這篇文章主要介紹了Rust實(shí)現(xiàn)構(gòu)建器模式和如何使用Bon庫(kù)中的構(gòu)建器,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08

