目錄

Rust是什麼

系統級編程語言

設計目標

核心特點

1. 內存安全(無垃圾回收)

2. 所有權系統

3.  fearless Concurrency(無畏併發)

4. 高性能

5. 豐富的類型系統和模式匹配

6. 現代化的工具鏈

環境搭建

系統環境

安裝過程

驗證安裝

第一個程序經典時尚helloworld

前提

創建新項目

運行程序

Cargo常見命令

實用的一個項目

運行結果

項目結構


Rust是什麼

系統級編程語言

Rust 是一門專注於速度、內存安全和並行性的系統級編程語言。它由Mozilla研究院在2006年發起並開發,旨在創建一個能夠替代C++的、更安全、更現代的語言。

設計目標

在保證C/C++級別的高性能和底層控制能力的同時,通過其獨特的編譯時所有權系統,從根本上解決內存管理和併發編程中的常見錯誤。

核心特點

1. 內存安全(無垃圾回收)

傳統上,內存管理主要有兩種方式:

手動管理(C/C++): 性能極高,但極易出現內存泄漏、懸空指針等問題。

垃圾回收(Java, Go, Python): 自動管理內存,減少了錯誤,但會在運行時帶來性能開銷和不確定性暫停。

Rust採取了第三種方式:通過一套在編譯時強制執行的 “所有權系統” 來管理內存。編譯器會在編譯階段就檢查所有內存訪問是否安全,如果代碼違反了所有權規則,程序將無法通過編譯。這意味着:

零成本抽象: 內存管理沒有運行時開銷。

無懸空指針、無緩衝區溢出、無內存泄漏(在安全代碼中)。

2. 所有權系統

這是Rust的基石,由三個核心規則組成:

1.Rust中的每一個值都有一個被稱為其所有者的變量。

2.值在任一時刻有且只有一個所有者。

3.當所有者(變量)離開作用域,這個值將被丟棄(內存被自動釋放)。

為了實現所有權的靈活轉移和共享,Rust還提供了 “借用” 和 “生命週期” 的概念,它們與所有權系統協同工作,確保數據的引用始終有效。

3.  fearless Concurrency(無畏併發)

  Rust的所有權系統同樣適用於併發編程。編譯器會阻止數據競爭的發生。數據競爭通常發生在:

1.兩個或更多指針同時訪問同一數據。

2.至少有一個指針被用來寫入數據。

2.沒有同步數據訪問的機制。

  Rust在編譯時就能捕獲這些問題,迫使開發者在編寫併發代碼時就必須處理好數據訪問的同步與安全,從而寫出更可靠的多線程程序。

4. 高性能

由於沒有垃圾回收器和運行時,Rust的性能與C/C++在同一級別。它可以直接操作硬件,適合開發操作系統、遊戲引擎、瀏覽器組件(如Firefox的Stylo引擎就是用Rust重寫的)等對性能要求極高的領域。

5. 豐富的類型系統和模式匹配

Rust擁有強大而富有表現力的類型系統,並集成了功能強大的 match 模式匹配,能強制處理所有可能的情況,有效避免了空指針異常(在Rust中叫 Option<T> 類型)和其他常見的邏輯錯誤。

6. 現代化的工具鏈

Rust擁有一個非常出色的工具鏈,其中最著名的是 Cargo。

Cargo: 是Rust的構建系統和包管理器。它可以輕鬆地管理依賴、編譯項目、運行測試和生成文檔。

Rustfmt: 自動格式化工具,確保代碼風格一致。

Clippy: 代碼檢查工具,能發現常見的錯誤和可優化的代碼模式。

環境搭建

系統環境

Rust for Linux - Rust 中文教程_Rust

安裝過程

修改 ~/.bashrc (Bash) 或 ~/.zshrc (Zsh) 文件來添加常駐環境變量配置:

export RUSTUP_DIST_SERVER='https://mirror.xuanwu.openatom.cn'
export RUSTUP_UPDATE_ROOT='https://mirror.xuanwu.openatom.cn/rustup'

運行 source 命令使環境變量更改立即生效 (以 Bash shell 為例)。

source ~/.bashrc

運行以下命令獲取並運行 rustup-init:

curl --proto '=https' --tlsv1.2 -sSf https://mirror.xuanwu.openatom.cn/rustup-init.sh | sh

按回車鍵直接使用默認選項安裝或輸入 2 開始自定義安裝

選項

説明

默認

Default host triple

目標平台架構

(因平台而異)

Default toolchain

工具鏈版本

stable

Profile

安裝組件集

default

Modify PATH

是否將 Rust 添加到系統 PATH

y

驗證安裝

運行 source 命令使環境變量更改立即生效,並且驗證是否安裝成功

source ~/.bashrc
rustc --version
cargo --version

如果看到版本號輸出,説明安裝成功。

Rust for Linux - Rust 中文教程_數據_02

第一個程序經典時尚helloworld

前提

由於系統缺少 C 編譯器(鏈接器)。Rust 需要系統工具鏈來鏈接最終的可執行文件。

yum groupinstall "Development Tools"
yum install gcc

創建新項目

cargo new hello_world
cd hello_world

運行程序

# 編譯並運行
cargo run
# 只編譯不運行
cargo build
# 編譯發佈版本(優化)
cargo build --release

運行成功

Rust for Linux - Rust 中文教程_Rust_03

Cargo常見命令

# 構建項目
cargo build
# 構建發佈版本
cargo build --release
# 運行項目
cargo run
# 運行特定二進制目標
cargo run --bin variables
# 檢查代碼(不生成可執行文件)
cargo check
# 運行測試
cargo test
# 生成文檔
cargo doc --open
# 格式化代碼
cargo fmt
# 代碼檢查
cargo clippy
# 更新依賴
cargo update

實用的一個項目

創建一個更實用的命令行工具 src/word_counter.rs

使用vim創建word_counter.rs

use std::fs;
//從 Rust 標準庫中導入文件系統模塊,讓我們能夠進行文件操作
fn main() {
    let args: Vec = std::env::args().collect();
    if args.len() < 2 {
        eprintln!("Usage: {} ", args[0]);
        std::process::exit(1);
    }
    let filename = &args[1];
    // 讀取文件
    let content = match fs::read_to_string(filename) {
        Ok(text) => text,
        Err(e) => {
            eprintln!("Error reading file {}: {}", filename, e);
            std::process::exit(1);
        }
    };
    // 統計信息
    let lines = content.lines().count();
    let words = content.split_whitespace().count();
    let characters = content.chars().count();
    let bytes = content.len();
    println!("File: {}", filename);
    println!("Lines: {}", lines);
    println!("Words: {}", words);
    println!("Characters: {}", characters);
    println!("Bytes: {}", bytes);
}

將文件移動到正確位置

# 創建 bin 目錄(如果不存在)
mkdir -p src/bin
# 移動文件到正確位置
mv word_counter.rs src/bin/
# 創建一個測試文件
echo "Hello Rust World!
This is a test file.
We are learning Rust programming." > test.txt
# 運行我們的單詞計數工具
cargo run --bin word_counter test.txt

運行結果

Rust for Linux - Rust 中文教程_數據_04

項目結構

Rust for Linux - Rust 中文教程_數據_05

這個程序展示了 Rust 的安全特性,編譯器會確保我們處理了所有可能的錯誤情況,避免了運行時崩潰。