主要内容:
- 在 macOS 中装置 Rust
- 编写 Hello World 程序
- 运用 Rust 包办理和构建东西 cargo
装置 Rust
在 macOS 中,运用 rustup
进行装置。
$ curl https://sh.rustup.rs -sSf | sh
这条指令会下载并履行一个脚本来装置 rustup 东西,来装置最新的 Rust 安稳版别。
成功后会看到如下输出:
Rust is installed now. Great!
这个装置会主动把 Rust 东西链添加到环境变量中,在下次翻开终端时收效,假如想要在当时终端立即收效,能够输入下面指令:
source "$HOME/.cargo/env"
查看 Rust 是否正确装置:
rustc --version
正确装置的话,会输出如下格式的信息:最新安稳版别的版别号,版别的哈希码,版别提交日期
rustc x.y.z (abcabcabc yyyy-mm-dd)
// 比方
rustc 1.67.1 (d5a82bbd2 2023-02-07)
装置东西履行时会在本地生成一份离线文档,能够经过以下指令在浏览器中翻开:
rustup doc
当不清楚某个函数的用处和运用方法时,能够经过该文档进行查询。
Rust 的 Hello World
这节来编写第一个 Rust 程序,典中典的 Hello World。
能够运用 VS Code 这个 IDE 来编写 Rust,在扩展中搜索 Rust,挑选 「rust-analyzer」这个插件,装置并启用。
创立一个文件夹,比方叫做 rust_learning
,在 VS Code 中翻开,并在这个文件夹下新建一个 Rust 程序文件,Rust 文件的后缀是 .rs
,比方 hello.rs
,假如姓名运用多个单词,规范是在单词间用下划线 _
分隔,比方 hello_world.rs
。
在 hello.rs
中写下如下代码:
fn main() {
println!("Hello World!");
}
经过下面的指令来编译并运转这个程序:
// 编译
rustc hello.rs
// 运转
./hello
// 运转成果
Hello World!
分析这个程序
-
fn main() {}
定义了一个 Rust 的函数,main
函数是 Rust 程序的进口函数 - 花括号
{}
用来包裹函数体,Rust 要求一切的函数都要被花括号包裹,引荐把左花括号和函数声明写在同一行,并用空格分隔。 -
println!
是调用了一个宏,Rust 中一切以!
结尾的调用都是在调用宏而不是普通函数。 - 规范 Rust 风格运用 4 个空格而不是 Tab 来缩进
- 大部分 Rust 代码行会以分号
;
来结尾
编译和运转
编译和运转是两个不同的步骤。
在运转 Rust 程序之前,需求运用 rustc
指令及源文件名作为参数来编译它:
rustc hello.rs
这和 C 或 C++ 的编译十分相似,一旦编译成功,会取得一个二进制的可履行文件。
查看生成的可履行文件:
$ ls
hello hello.rs
接下来,经过如下方法运转可履行文件:
./hello
仅仅运用 rustc
编译简单的程序不费事,但随着项目规模的变大,开发成员变多,咱们最好运用构建东西来简化这些复杂的作业。也便是 cargo
。
cargo
cargo
是 Rust 东西链中内置的构建系统及包办理器。它能够用来构建代码,下载依靠库等。
运用 rustup
东西下载装置 Rust,cargo 已经内置了。
能够经过下面指令来查看 cargo 是否正确装置:
$ cargo --version
当输出是形如 cargo 1.67.1 (8ecd4f20a 2023-01-10)
这样的一串版别号时,阐明 cargo 能够正常运用,假如输出是相似 command not found
这样的错误信息,则需求独自装置 cargo。
运用 cargo 创立项目
$ cargo new hello_cargo
// 输出
Created binary (application) `hello_cargo` package
$ cd hello_cargo
创立出来的项目结构如下所示:
├── hello_cargo
│ ├── .gitignore // cargo 会初始化 Git 仓库,生成默许的 .gitignore 文件
│ ├── Cargo.toml // 包括程序包装备及依靠等信息
│ └── src // 放置源代码的目录
│ └── main.rs // 源码文件
Cargo.toml 的内容
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ""
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
Cargo 运用 TOML(Tom's Obvious, Minimal Language)
作为规范装备格式。
package
是个区域标签,表明接下来的句子是装备当时的程序包
-
name
程序名 -
version
版别号 -
authors
作者信息 edition
dependencies
也是个区域标签,声明项目的依靠。在 Rust 中,把代码的调集称为 包(create)。
依照惯例,Cargo 会默许把一切源代码文件放在 src
目录下,项目根目录只用来放置 README 文档
、许可声明
、装备文件
等与源码无关的文件。
运用 Cargo 构建和运转项目
cargo build
Cargo 能够经过如下指令完结构建:
$ cargo build
// 运转成果
Compiling hello_cargo v0.1.0 (/Users/owen/Workspace/VSCodeProjects/rust_learning/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.78s
这个指令会将可履行程序生成在路径 ./target/debug/hello_cargo
下,能够用下面的指令来运转:
$ ./target/debug/hello_cargo
// 运转成果
Hello, world!
cargo build
还会在项目根目录下创立一个名为 Cargo.lock
的新文件,这个文件记载了当时项目一切依靠库的详细版别号。不要手动编辑其中的内容,Cargo 会主动维护。
cargo run
也能够直接运用 cargo run
指令来一次性完结编译和运转:
$ cargo run
// 运转成果
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/hello_cargo`
Hello, world!
这次的输出没有提示编译信息,这是由于 Cargo 发现源码没有修正,所以直接运转了生成的可履行文件,假如修正的源码,Cargo 会在运转前重新构建项目:
$ cargo run
// 运转成果
Compiling hello_cargo v0.1.0 (/Users/owen/Workspace/VSCodeProjects/rust_learning/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.12s
Running `target/debug/hello_cargo`
Hello, Rust and Cargo!
cargo check
Cargo 还供给了 check 指令来快速查看当时代码是否能够经过编译,而不需求花费额定的时刻生成可履行程序,运转速度远远快于 build 指令。
$ cargo check
// 运转成果
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
以 Release 形式进行构建
当预备发布自己的项目时,能够运用 cargo build --release
或 cargo run --release
在优化形式下构建并生成可履行程序。生成的可履行文件会放在 target/release
目录下,而非 target/debug
。这个形式会以更长的编译时刻来优化代码,使代码拥有更好的运转时性能。
假如需求对代码的运转功率进行基准测验,请保证运用 cargo run --release
进行构建并运用 target/release
目录下的可履行文件进行测验。
$ cargo run --release
// 运转成果
Finished release [optimized] target(s) in 0.00s
Running `target/release/hello_cargo`
Hello, Cargo!