Rust语言学习笔记

Rust 是一种系统编程语言,由 Mozilla 研究院于2010年开始开发,并在2015年首次发布了1.0版本。Rust 旨在提供与 C 和 C++ 类似的性能,同时解决这些语言中常见的内存安全问题。它通过所有权、生命周期和借用检查等概念来实现这一点,从而在编译时就能防止许多常见的错误,如空指针异常、数据竞争和缓冲区溢出。

Rust 的主要特点

  1. 内存安全性

    • 所有权系统:Rust 使用一套独特的所有权系统来管理内存。每个值都有一个所有者,当所有者离开作用域时,该值将被自动释放。
    • 借用检查器:Rust 编译器通过借用检查器确保引用的生命周期是正确的,从而避免悬垂指针和其他内存安全问题。
  2. 并发性

    • Rust 的设计特别考虑了并发编程的安全性。它允许开发者编写没有数据竞争的并发代码,同时保持高性能。
  3. 零成本抽象

    • Rust 支持高级抽象,如泛型、函数式编程特性(如闭包)和模式匹配,但这些抽象不会带来运行时开销。
  4. 跨平台支持

    • Rust 可以编译成多种架构的机器码,包括 x86, x86-64, ARM 等,并且可以用于嵌入式系统。
  5. 包管理和构建工具

    • Rust 提供了一个强大的包管理系统 Cargo,它不仅管理依赖项,还提供了构建、测试和文档生成等功能。
  6. 社区和支持

    • Rust 拥有一个活跃且友好的社区,提供了大量的资源和库支持。

安装 Rust

要开始使用 Rust,你需要安装 Rust 工具链。以下是安装步骤:

  1. 访问 Rust 官方网站https://www.rust-lang.org/

  2. 下载并安装 Rust

    • 打开终端或命令提示符。
    • 运行以下命令来安装 Rust:
      curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
      
    • 或者在 Windows 上,你可以从 Rust 安装页面 下载安装程序。
  3. 验证安装

    • 安装完成后,打开一个新的终端窗口并运行:
      rustc --version
      
    • 你应该能看到类似 rustc 1.54.0 的版本号。

第一个 Rust 程序

让我们从一个经典的“Hello, World!”程序开始。

  1. 创建新项目

    • 在终端中运行以下命令来创建一个新的项目:
      cargo new hello_world
      cd hello_world
      
  2. 编辑源代码

    • 打开 src/main.rs 文件,你会看到以下内容:
      fn main() {
          println!("Hello, world!");
      }
      
  3. 运行程序

    • 在终端中运行以下命令来编译并运行程序:
      cargo run
      
    • 你应该会看到输出 Hello, world!

基本语法

变量
  • 使用 let 关键字声明变量。
  • 默认情况下,变量是不可变的,可以使用 mut 关键字使其可变。
let x = 10; // 不可变变量
let mut y = 20; // 可变变量
y = 30;
数据类型
  • 标量类型:整型 (i32, u32 等)、浮点型 (f32, f64)、布尔型 (bool) 和字符型 (char)。
  • 复合类型:数组 ([T; N])、元组 ((T1, T2, T3, ...) ) 和结构体 (struct)。
let a: i32 = 10;
let b: f64 = 3.14;
let c: bool = true;
let d: char = 'A';

let arr: [i32; 3] = [1, 2, 3];
let tuple: (i32, f64, bool) = (1, 2.0, true);

struct Point {
    x: i32,
    y: i32,
}

let p = Point { x: 10, y: 20 };
控制结构
  • 条件语句ifelse
  • 循环loopwhilefor
let x = 10;

if x > 0 {
    println!("x is positive");
} else if x < 0 {
    println!("x is negative");
} else {
    println!("x is zero");
}

let mut i = 0;
while i < 5 {
    println!("{}", i);
    i += 1;
}

for j in 0..5 {
    println!("{}", j);
}
函数
  • 使用 fn 关键字定义函数。
  • 函数可以有参数和返回值。
fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let result = add(3, 4);
    println!("Result: {}", result); // 输出: Result: 7
}

所有权和借用

所有权
  • 每个值都有一个所有者。
  • 当所有者离开作用域时,该值将被释放。
{
    let s = String::from("hello"); // s 是字符串的所有者
} // s 离开作用域,字符串被释放
借用
  • 使用引用 & 来借用值。
  • 引用必须始终有效。
fn main() {
    let s = String::from("hello");

    let len = calculate_length(&s); // 借用 s 的引用

    println!("The length of '{}' is {}.", s, len);
}

fn calculate_length(s: &String) -> usize {
    s.len()
}

结构体和枚举

结构体
  • 使用 struct 关键字定义结构体。
  • 结构体可以包含字段。
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle { width: 30, height: 50 };
    println!("Area: {}", rect.area()); // 输出: Area: 1500
}
枚举
  • 使用 enum 关键字定义枚举。
  • 枚举可以表示一组相关的值。
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

fn main() {
    let msg = Message::Write(String::from("Hello, Rust!"));
    match msg {
        Message::Quit => println!("Quitting..."),
        Message::Move { x, y } => println!("Moving to ({}, {})", x, y),
        Message::Write(text) => println!("Writing: {}", text),
        Message::ChangeColor(r, g, b) => println!("Changing color to RGB({}, {}, {})", r, g, b),
    }
}

货物管理

创建项目
  • 使用 cargo new 创建新项目。
cargo new my_project
cd my_project
添加依赖
  • Cargo.toml 文件中添加依赖。
[dependencies]
rand = "0.8"
  • 更新依赖。
cargo build
构建和运行
  • 使用 cargo build 构建项目。
  • 使用 cargo run 运行项目。
  • 使用 cargo test 运行测试。
  • 使用 cargo doc 生成文档。

总结

Rust 是一种现代的系统编程语言,具有强大的内存安全性和并发支持。通过其独特的所有权系统和借用检查器,Rust 可以在编译时防止许多常见的错误。Rust 的生态系统也非常丰富,提供了大量的库和工具支持。如果你希望深入学习 Rust,可以参考以下资源:

  • 官方文档Rust 官方文档 提供了详细的教程和示例。
  • 在线课程:Coursera、Udemy 等平台上有许多关于 Rust 的在线课程。
  • 社区分享:访问 Rust 论坛GitHub 查看其他用户的作品和分享经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值