温馨提示×

Linux中Rust编程入门指南

小樊
35
2025-11-02 09:28:56
栏目: 编程语言

Linux下Rust编程入门指南:从环境搭建到基础实践

一、Linux下Rust环境搭建

1.1 安装Rust工具链(推荐使用rustup)

Rust官方推荐通过rustup管理工具链(包含rustc编译器、Cargo包管理器等)。在终端执行以下命令:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装完成后,重启终端或运行以下命令使环境变量生效:

source $HOME/.cargo/env

验证安装:执行rustc --version(显示Rust编译器版本)、cargo --version(显示Cargo版本),若均返回版本号则说明安装成功。

1.2 配置开发工具(VS Code + Rust Analyzer)

为提升开发效率,推荐使用Visual Studio Code(VS Code)搭配Rust Analyzer插件:

  1. 安装VS Code:前往官网下载Linux版本(.deb/.rpm包),通过包管理器安装;
  2. 安装Rust Analyzer:打开VS Code,搜索“Rust Analyzer”插件并安装;
  3. (可选)安装代码格式化工具:通过rustup安装rustfmtrustup component add rustfmt),实现代码自动格式化。

二、Rust基础语法学习

2.1 变量与可变性

Rust变量默认不可变(防止意外修改),使用let声明;若需修改,需添加mut关键字:

let x = 5;       // 不可变变量
let mut y = 10;  // 可变变量
y = 20;          // 合法:可变变量可重新赋值
// x = 30;       // 错误:不可变变量不能修改

常量使用const声明,必须显式指定类型且值在编译时确定:

const MAX_SCORE: u32 = 1000; // 常量
println!("Max score: {}", MAX_SCORE);

遮蔽(Shadowing):同一作用域内可重新声明同名变量,覆盖之前的定义(常用于类型转换或数据清洗):

let x = 5;
let x = x + 1; // x现在是6
let x = x * 2; // x现在是12

2.2 数据类型

标量类型

  • 整数i8/u8(8位有符号/无符号)、i32/u32(32位)、isize/usize(与系统架构相关,用于数组索引);
  • 浮点数f32(单精度)、f64(双精度,默认);
  • 布尔值booltrue/false);
  • 字符char(4字节,支持Unicode,用单引号包裹)。

复合类型

  • 元组(Tuple):固定长度,元素类型可不同,通过.访问或解构:
    let tup: (i32, f64, char) = (42, 3.14, 'a');
    let (x, y, z) = tup; // 解构
    println!("x={}, y={}, z={}", x, y, z);
    
  • 数组(Array):固定长度,元素类型相同,通过索引访问(越界会引发编译错误):
    let arr: [i32; 3] = [1, 2, 3]; // 长度为3的i32数组
    println!("First element: {}", arr[0]); // 索引从0开始
    

2.3 函数

使用fn关键字定义函数,参数和返回值需显式声明类型。返回值由最后一个表达式隐式返回(无需分号):

fn greet(name: &str) { // 无返回值(返回Unit类型`()`)
    println!("Hello, {}!", name);
}

fn add(a: i32, b: i32) -> i32 { // 返回i32类型
    a + b // 无分号,隐式返回
}

调用函数:greet("Alice");let sum = add(5, 10);

2.4 控制流

条件语句(if)

if条件无需括号,但代码块需用{}包裹;可作为表达式返回值:

let number = 7;
if number > 5 {
    println!("Greater than 5");
} else if number == 5 {
    println!("Equal to 5");
} else {
    println!("Less than 5");
}

// if作为表达式
let result = if number > 0 { 10 } else { 20 };
println!("Result: {}", result);

循环

  • loop:无限循环,通过break退出;
  • while:条件循环,条件为true时执行;
  • for:遍历集合(如数组、范围),更安全(避免越界)。
// loop
let mut count = 0;
loop {
    println!("Loop: {}", count);
    count += 1;
    if count >= 3 { break; }
}

// while
let mut num = 3;
while num > 0 {
    println!("While: {}", num);
    num -= 1;
}

// for
let arr = [10, 20, 30];
for element in arr.iter() { // 使用iter()避免所有权问题
    println!("For: {}", element);
}

三、实战项目:创建第一个Rust程序

3.1 使用Cargo创建项目

Cargo是Rust的包管理与构建工具,可快速创建项目:

cargo new hello_rust # 创建名为hello_rust的项目
cd hello_rust        # 进入项目目录

项目结构:

hello_rust/
├── Cargo.toml   # 项目配置文件(依赖、元数据)
└── src/
    └── main.rs  # 主入口文件(默认生成Hello World代码)

3.2 编写与运行程序

编辑src/main.rs,替换为自定义代码(如打印“Hello, Rust!”):

fn main() {
    println!("Hello, Rust!");
}

运行程序:

cargo run # 编译并运行(自动生成可执行文件)

输出结果:

Hello, Rust!

编译与运行分离

  • 编译:cargo build(生成target/debug/hello_rust可执行文件);
  • 运行:./target/debug/hello_rust

四、进阶方向建议

掌握基础语法后,可尝试以下方向深化学习:

  • 内存安全:学习Rust的所有权(Ownership)、借用(Borrowing)机制,理解String&str的区别;
  • 并发编程:使用std::thread模块或tokio异步运行时,编写多线程程序;
  • 网络编程:通过std::net模块实现TCP/UDP服务器/客户端;
  • 生态工具:使用clippy(代码检查)、rustfmt(格式化)、cargo test(单元测试)提升代码质量。

0