文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

因为 Rust,代码更智能而不是更难!

2024-11-30 01:22

关注

Rust 简介

Rust 以其内存安全和速度的保证而闻名。它独特地通过所有权、借用和生命周期来管理内存。

内存安全原则

Rust 编译器检查确保内存安全,防止诸如缓冲区溢出之类的常见错误。

所有权系统

所有权是核心特性。当变量超出作用域时,Rust 会自动清理其资源。

fn main() {
    let s = String::from("hello"); // s 拥有字符串
} // s 超出作用域,内存被释放

借用和引用

Rust 使用引用来借用,确保数据不会被同时修改和读取。

fn main() {
    let s1 = String::from("hello");
    let len = calculate_length(&s1);
    println!("The length of '{}' is {}.", s1, len);
}

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

切片

切片允许您引用集合的一部分,而不需要获取所有权。

fn first_word(s: &String) -> &str {
    let bytes = s.as_bytes();
    for (i, &item) in bytes.iter().enumerate() {
        if item == b' ' {
            return &s[0..i];
        }
    }
    &s[..]
}

使用结构体

结构体用于创建自定义数据类型。

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

枚举和模式匹配

枚举通过列举其可能的变体来定义类型。

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

错误处理:Result 和 Option 类型

Rust 使用 Result 和 Option 进行显式错误处理。

fn divide(numerator: f64, denominator: f64) -> Option {
    if denominator == 0.0 {
        None
    } else {
        Some(numerator / denominator)
    }
}

集合:Vec, HashMap

向量和哈希映射存储值的集合。

let v: Vec = Vec::new();
let mut scores: HashMap = HashMap::new();

迭代器和闭包

迭代器处理集合,闭包是匿名函数。

let v1 = vec![1, 2, 3];
let v2: Vec<_> = v1.iter().map(|x| x + 1).collect();

智能指针:Box, Rc, Arc

智能指针,如 Box,允许复杂的数据结构。

let b = Box::new(5);
println!("b = {}", b);

并发:线程, Send 和 Sync 特征

Rust 支持安全的并发,确保线程安全。

use std::thread;
let handle = thread::spawn(|| {
    for _ in 1..10 {
        println!("Hi from the thread!");
    }
});

使用 Cargo 和 Crates.io

Cargo 管理 Rust 项目,处理编译和依赖。

[dependencies]
serde = "1.0"

特征和特征边界

特征定义了类型之间的共享行为。

pub trait Summary {
    fn summarize(&self) -> String;
}

泛型

泛型抽象了类型,实现了代码复用。

fn largest(list: &[T]) -> T {
    let mut largest = list[0];
    for &item in list.iter() {
        if item > largest {
            largest = item;
        }
    }
    largest
}

宏和编译器插件

宏在编译时生成代码,提供了元编程能力。

macro_rules! say_hello {
    () => {
        println!("Hello!");
    };
}

编写测试

和文档** Rust 支持测试和文档作为一等特性。

/// 将两个数字相加。
fn add(a: i32, b: i32) -> i32 {
    a + b
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_add() {
        assert_eq!(add(2, 2), 4);
    }
}

异步编程:async 和 await

Rust 的异步编程是高效且非阻塞的。

async fn fetch_data() -> Result<(), Box> {
    // 异步获取数据
}

使用 Cargo.toml 和 Cargo.lock 管理依赖

依赖在 Cargo.toml 中管理,而 Cargo.lock 确保可复现性。

[dependencies]
futures = "0.3"

Rust 版本和过渡

Rust 版本允许语言的增量、兼容升级。

// 在 Cargo.toml 中指定 Rust 版本
edition = "2018"

很多没有学过 Rust 或只听别人说比较难,心里就觉得很难。首先 Rust 使用先进的内存管理机制,如所有权和借用规则,确保了代码的安全性,同时避免了垃圾回收的开销。这些特性使得 Rust 代码在编译时就能捕捉到潜在的错误,从而减少了运行时的不确定性。

虽然,这些概念是使用细节增加了学习的曲线,但长远来看,它提高了代码质量和系统的可靠性,使得编程变得更加智能和高效,而不是认为它很难,从而放弃,然后每天自己修复 Bug 到凌晨1点钟。

来源:码农渔夫内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯