Rust编程入门
简介
Rust是一种由Mozilla开发的系统级编程语言,专注于速度、内存安全和并行处理。它通过所有权模型、借用检查器及生命周期概念,在编译时确保内存安全,有效避免了空指针异常、悬挂指针和数据竞争等问题。Rust支持高效的并发编程,并提供了高层次抽象而无运行时开销,保证程序性能。其自带的包管理和构建工具Cargo简化了依赖管理和构建流程。Rust适用于多种场景,包括操作系统、嵌入式系统、WebAssembly、游戏开发及高性能网络服务。凭借现代化的语法、强大的工具链支持(如rustfmt和clippy)以及跨平台兼容性,Rust在追求高效和安全的项目中展现出色。活跃的开源社区和丰富的学习资源进一步增强了它的吸引力,使其成为开发下一代可靠软件的理想选择。
创建Rust项目
安装Rust: 各种系统中Rust的安装,请参考Rust官网说明. 在ArchLinux环境下,安装命令为
1
sudo pacman -S rust
创建新项目
1
2cargo new hello_world
cd hello_world运行
cargo new hello_world
后,会建立一个文件夹hello_world
, 其内部包含:Cargo.lock
,Cargo.toml
,src
,target
.编辑
src/main.rs
: 打开src/main.rs
文件,并添加一些简单的Rust代码,比如打印斐波那契数列的前10项:1
2
3
4
5
6
7
8
9
10
11
12
13fn fibonacci(n: u32) -> u32 {
match n {
0 => 0,
1 => 1,
_ => fibonacci(n - 1) + fibonacci(n - 2),
}
}
fn main() {
for i in 0..10 {
println!("fibonacci({}) = {}", i, fibonacci(i));
}
}编译并运行项目:
1
cargo run
运行上述命令后,将输出斐波那契数列的前10项。
使用EVCXR进行交互式探索
为了能够更灵活地试验代码片段而不必每次都通过cargo run
执行整个程序,我们可以使用evcxr
,这是一个为Rust
设计的Jupyter
内核,也可以作为独立的REPL
使用。
安装
EVCXR
:1
cargo install evcxr
启动
EVCXR
1
evcxr
在
EVCXR
中试验代码:一旦进入了evcxr
环境,您可以直接输入Rust
表达式或小段代码进行试验,例如尝试上面定义的斐波那契函数:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 定义斐波那契函数
:dep num_traits
fn fibonacci(n: u32) -> u32 {
match n {
0 => 0,
1 => 1,
_ => fibonacci(n - 1) + fibonacci(n - 2),
}
}
// 测试斐波那契函数
for i in 0..10 {
println!("fibonacci({}) = {}", i, fibonacci(i));
}请注意,在
evcxr
中,您可能需要先声明对外部依赖项(如果有的话)使用:dep
命令。在这个特定的例子中,我们实际上不需要额外的依赖项,所以可以忽略:dep num_traits
这一行。 通过这种方式,您可以在不离开终端的情况下快速测试Rust
代码片段,这对于学习语言特性、调试问题或简单地验证想法都非常有用。此外,由于evcxr
支持类似Jupyter notebook
的交互方式,它也适合用于教学和演示目的。
Rust代码编译
确保处于正确的目录: 请确保您位于包含
Cargo.toml
文件的项目根目录下。这个文件定义了项目的配置、依赖和其他相关信息。在上述例子中,就是位于目录hello_world
下.编译项目:
1
cargo build
这将根据当前环境(调试或发布)编译项目。默认情况下,
cargo build
会在调试模式下进行编译,生成的二进制文件会位于target/debug/
目录下。编译优化版本(发布模式):
编译优化后的版本(适用于生产环境) 1
cargo build --release
这将在
target/release/
目录下生成经过优化的二进制文件。相比调试模式,发布模式下的编译会花费更多时间,但是生成的二进制文件通常更小且执行速度更快。直接运行可执行文件:
- 对于调试模式编译的二进制文件,可以直接从
target/debug/
目录下运行:1
./target/debug/your_project_name
- 对于发布模式编译的二进制文件,则从
target/release/
目录下运行:1
./target/release/your_project_name
这里的
your_project_name
是指您Cargo
项目的名称,也就是Cargo.toml
文件中的[package] name
字段所指定的名字。