Rust入门第一个课之环境搭建

Rust环境安装和编写hello world

Posted by dushenzhi on January 24, 2024

1.环境安装

在linux系统(或者MacOS)上安装rust,在终端输入如下命令:

$ curl https://sh.rustup.rs -sSf | sh

通过上述命令安装好rust之后会自动将rust工具添加到环境变量PATH中,并在下次登陆系统自动生效,为了想立即生效开始使用Rust而不用重启,需要了执行以下命令使环境配置立即生效:

$ source "$HOME/.cargo/env"

更新rust版本:

$ rustup update

卸载rust:

$ rustup self uninstall

查看系统当前rust版本:

$ rustc --version

Windows系统安装Rust以及更多详情请参见官方网站:(https://www.rust-lang.org/learn/get-started)[https://www.rust-lang.org/learn/get-started]

2.编写第一个rust程序:hello world

本地创建一个项目文件夹:

$ mkdir -p ~/projects/hello_world
$ cd ~/projects/hello_world

在当前文件夹下新建一个源文件:hello_world.rs,Rust源文件命名规则总是以.rs拓展名结尾,文件名多个单词通常建议以下划线_进行分割。 hello_world.rs文件内容如下:

fn main() {
    println!("hello world!");
}

用如下命令编译这个源文件:

$ rustc hello_world.rs

可以编译得到一个可以执行文hello_world,可以用ls命令查看如下:

$ ls

hello_world  hello_world.rs

执行编译出来的程序:

$ ./hello_world

hello world!

回过头来看看这个程序,程序里面道理发生了什么:

  • fn是函数定义关键字,声明定义了一个名为main函数,该函数没有任何参数和返回值,如果函数有参数则放在圆括号()中,花括号{}用来标记函数体
  • main函数比较特殊,当你运行一个可执行的rust程序时,所有代码会从这个入口函数开始执行
  • 函数体中的代码为:println!("hello world!");, 将字符串输出到终端,rust是采用4个空格方s式进行缩进。这里调用了一个被叫println!做的宏,如果是调用一个普通函数将没有这里的感叹号!,rust中所有以感叹号!结尾的调用都是一个宏而不是普通函数,注意加以区分

3.Rust依赖管理工具Cargo

Cargo是Rust工具链中内置的一个系统构建和包管理工具,在复杂的系统中是必要的,所以绝大多数用户会选择用它来管理自己的rust项目 检查cargo是否以安装:

$ cargo --version

创建cargo项目

本地创建一个cargo项目:

$ cargo new hello_cargo

会自动生成一个hello_cargo文件夹,查看生成的cargo项目文件结构目录如下:

$ tree hello_cargo/
hello_cargo/
├── Cargo.toml
└── src
    └── main.rs

核心文件Cargo.toml使用TOML (Tom’s Obvious, Minimal Language)作为标准的配置格式,定义了相关项目信息和依赖,内容如下:

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

rust代码源文件放在src目录下,里面默认初始化生成了一个源文件src/main.rs,内容如下跟hello_world.rs文件一样:

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

此外,Cargo还会自动初始化生成一个新的git仓库并默认生成.gitignore文件

构建Cargo项目

在当前项目hello_cargo文件夹下,通过如下命名来构建项目:

$ cargo build
   Compiling hello_cargo v0.1.0 (/xxx/xxx/xxx/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.09s

可执行程序生存在目录target/debug下,执行命令:

$ ./target/debug/hello_cargo 
Hello, world!

我们也可以简单的用cargo run命令来一次完成编译和原型任务:

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/hello_cargo`
Hello, world!

cargo还提供了一个cargo check的命令用来快速检查当前代码是否可以通过编译,而不需要花费大的代价去真正生成可执行文件

$ cargo check
    Checking hello_cargo v0.1.0 (/xxx/xxx/xxx/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s

如果是发布项目(或者进行基准测试)需要使用命令cargo build --release在优化模式下生存可执行文件,生存的可执行文件会被放在target/release目录下,而不知之前的target/debug下,这种模式编译器会花费更多的编译时间为代价带来优化的代码,生存的可以执行文件运行时具有更好的性能,通常用于发布生产环境和进行基准测试。

$ cargo build --release
   Compiling hello_cargo v0.1.0 (/xxx/xxx/xxx/hello_cargo)
    Finished release [optimized] target(s) in 0.10s
$ ./target/release/hello_cargo 
Hello, world!