极客时间 Rust 训练营
核心代码,注释必读
// download:
3w ukoou com
Rust介绍
Rust 是一种系统级编程语言,由 Mozilla 公司开发并于2010年首次发布。它旨在提供安全性、并发性和高性能,并可以用于开发各种类型的软件,从操作系统和嵌入式设备到 Web 应用程序和分布式服务。
Rust 的设计目标是在保持内存安全的同时提供更好的并发性能。它通过借用检查器(Borrow Checker)确保内存安全,防止数据竞争和空指针错误。Rust 还支持面向对象、函数式和命令式编程范式,使开发者可以选择最适合他们项目需求的编程风格。
Rust 的语法借鉴了 C 和 C++,但加入了一些现代编程语言的特性,如模式匹配、通道通信和所有权系统。这些特性使得 Rust 在开发高性能并发应用程序时表现出色,同时也为开发者提供了更安全的编程环境。
总的来说,Rust 是一种强大、安全、高性能的编程语言,适合广泛的应用场景,特别是需要高并发和内存安全性的领域。
极客时间 Rust 训练营-Rust元编程
Rust 支持元编程,即在运行时或编译时动态创建和操作代码。元编程可以帮助开发者通过在代码中生成代码来减少重复工作、提高抽象能力和简化复杂逻辑。在 Rust 中,元编程通常通过宏和泛型来实现。
宏(macro)是一种特殊的代码结构,允许开发者创建自定义的代码转换规则。Rust 中的宏可以在编译时将一段代码片段转换成另一段代码片段。开发者可以使用宏来创建领域特定语言(DSL)、简化重复代码、提供更具表现力的语法等。Rust 的宏系统在保证类型安全的同时提供了很大的灵活性,使得元编程变得相对容易和安全。
另一种元编程的方式是使用泛型。Rust 中的泛型允许编写参数化的代码,从而提高代码的复用和灵活性。通过泛型,开发者可以编写可以适用于多种数据类型的代码,而无需对每种类型都重复编写一份代码。
Rust 的元编程提供了强大的工具,使开发者能够通过创建自定义代码转换规则,或者编写参数化的代码来提高代码的可重用性和抽象能力。这为开发者在编写高性能、高安全性的代码时提供了更多的灵活性和便利。
极客时间 Rust 训练营 - 错误处理
Rust 将错误分为两大类:可恢复的(recoverable)和 不可恢复的(unrecoverable)错误。对于一个可恢复的错误,比如文件未找到的错误,我们很可能只想向用户报告问题并重试操作。不可恢复的错误总是 bug 出现的征兆,比如试图访问一个超过数组末端的位置,因此我们要立即停止程序。
大多数语言并不区分这两种错误,并采用类似异常这样方式统一处理它们。Rust 没有异常。相反,它有 Result<T, E> 类型,用于处理可恢复的错误,还有 panic! 宏,在程序遇到不可恢复的错误时停止执行。本章首先介绍 panic! 调用,接着会讲到如何返回 Result<T, E>。此外,我们将探讨在决定是尝试从错误中恢复还是停止执行时的注意事项。
当出现 panic 时,程序默认会开始 展开(unwinding),这意味着 Rust 会回溯栈并清理它遇到的每一个函数的数据,不过这个回溯并清理的过程有很多工作。另一种选择是直接 终止(abort),这会不清理数据就退出程序。
那么程序所使用的内存需要由操作系统来清理。如果你需要项目的最终二进制文件越小越好,panic 时通过在 Cargo.toml 的
[profile]部分增加panic = 'abort',可以由展开切换为终止。例如,如果你想要在 release 模式中 panic 时直接终止:[profile.release] panic = 'abort'
让我们在一个简单的程序中调用 panic!:
文件名:src/main.rs
fn main() {
panic!("crash and burn");
}
运行程序将会出现类似这样的输出:
$ cargo run
Compiling panic v0.1.0 (file:///projects/panic)
Finished dev [unoptimized + debuginfo] target(s) in 0.25s
Running `target/debug/panic`
thread 'main' panicked at 'crash and burn', src/main.rs:2:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
最后两行包含 panic! 调用造成的错误信息。第一行显示了 panic 提供的信息并指明了源码中 panic 出现的位置:src/main.rs:2:5 表明这是 src/main.rs 文件的第二行第五个字符。
在这个例子中,被指明的那一行是我们代码的一部分,而且查看这一行的话就会发现 panic! 宏的调用。在其他情况下,panic! 可能会出现在我们的代码所调用的代码中。错误信息报告的文件名和行号可能指向别人代码中的 panic! 宏调用,而不是我们代码中最终导致 panic! 的那一行。我们可以使用 panic! 被调用的函数的 backtrace 来寻找代码中出问题的地方。下面我们会详细介绍 backtrace 是什么。