Rust安装程序和版本管理工具
RUSTUP_HOMERustup元数据和工具链将被安装到Rustup主目录中
默认: %USERPROFILE%\.rustup
rustup.exe [FLAGS] [+toolchain]
<+toolchain> release channel (e.g. +stable) or custom toolchain to set override
1) doc
打开当前工具链的文档
# 打开 The Rust Programming Language
rustup docs --book
2) update
更新Rust工具链和 rustup
3)self
修改rustup安装
To uninstall Rust and rustup
rustup self uninstall
Rust 构建工具和包管理器
有关Cargo的更多信息
CARGO_HOMECargo主目录
cargo、rustc、rustup等命令将被添加到Cargo的bin目录,位于:
%USERPROFILE%\.cargo\bin
cargo [+toolchain] [OPTIONS] [SUBCOMMAND]
编译当前包
运行项目
运行测试
构建这个包及其依赖项的文档
将库发布到crates.io
Install a Rust binary. Default location is $HOME/.cargo/bin
为了测试已经安装了Rust和Cargo,可以在终端上运行:
cargo --version
#cargo 1.65.0 (4bc8f24d3 2022-10-20)
cargo new --help
为我们生成“Hello, world!”项目!我们可以通过移动到我们创建的新目录并在终端中运行这个程序: cargo run
init : 在现有目录中创建一个新的 cargo 包
Add dependencies to a manifest file
这个命令可以快速检查你的代码,确保它可以编译,但不会生成可执行文件
Rust编译器
curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh
该命令下载一个脚本并开始安装Rust工具,该工具将安装Rust的最新稳定版本。
Rustup 默认目录:$HOME/.rustup
Cargo 默认目录:$HOME/.cargo
In Windows CMD, use: echo %PATH%
In PowerShell, use: echo $env:Path
In Linux and macOS, use: echo $PATH
Rust文件总是以.rs扩展名结束。
如果在文件名中使用了多个单词,约定使用下划线分隔它们。例如,使用hello_world。Rs而不是helloworld.rs。
文件:main.rs
fn main() {println!("Hello, world!");
}
编译并运行该文件:
$ rustc main.rs
$ ./main
Hello, world!
1)
fn main() {}
这几行定义了一个名为main的函数。main 函数很特殊:它总是运行在每个可执行Rust程序中的第一个代码。
如果有参数,它们将放在括号()中。
函数体被包装在{}中
将左花括号与函数声明放在同一行上,中间加一个空格是很好的风格。
如果想在Rust项目中坚持一个标准的样式,可以使用一个名为rustfmt的自动格式化工具以特定的样式格式化您的代码(关于rustfmt的更多信息)。
2)
println!("Hello, world!");
首先,Rust样式是用四个空格缩进,而不是制表符。
第二, println !调用了一个 Rust宏(Rust macro)。
如果它调用了一个函数,那么它将被输入为println(不带!)。
使用
!意味着调用的是宏而不是普通函数,而且宏并不总是遵循与函数相同的规则。
第三,我们将“Hello, world!”字符串作为参数传递给println!,
第四,我们用分号(;)结束这一行,这表示这个表达式结束了,下一个已经准备好开始了。Rust代码的大多数行都以分号结尾。
在运行Rust程序之前,必须使用Rust编译器编译它,输入rustc命令并传入源文件的名称,像这样:
rustc main.rs
如果有C或c++背景,您会注意到这类似于gcc或clang。编译成功后,Rust输出一个二进制可执行文件。
在使用Windows时,包含扩展名为.pdb的调试信息的文件(main.pdb)
如果更熟悉动态语言,如Ruby、Python或JavaScript,可能不习惯将程序编译和运行作为单独的步骤。
Rust是一种预先编译的语言,这意味着您可以编译一个程序并将可执行文件交给其他人,他们甚至可以在没有安装Rust的情况下运行它。如果您给某人一个.rb、.py或.js文件,他们需要(分别)安装一个Ruby、Python或JavaScript实现。
对于简单的程序,用rustc编译就可以了,
大多数Rustaceans使用这个工具来管理他们的Rust项目,因为Cargo为您处理了很多任务,比如构建代码、下载代码所依赖的库,以及构建这些库。(我们称代码需要的库为依赖项(dependencies)。)
绝大多数Rust项目都使用Cargo
首先,我们将使用Cargo为我们创建一个新项目
cargo new hello-rust
#Created binary (application) `hello-rust` package
这将生成一个名为hello-rust的新目录和项目,包含以下文件:
hello-rust
|- Cargo.toml
|- src|- main.rs
Cargo.toml
[package]
name = "hello_rust"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]
是Rust的清单文件。它是保存项目元数据以及依赖项的地方
该文件是TOML (Tom 's Obvious, Minimal Language)格式,这是Cargo的配置格式。
第一行[package]是一个节(section )的标题,表示下面的语句正在配置一个包
接下来的三行设置了Cargo编译程序所需的配置信息:名称、版本和要使用的Rust版本。我们将在附录E中讨论版本键。
最后一行[dependencies]是列出项目依赖项的部分的开始。在Rust中,代码包被称为crates。在这个项目中我们不需要任何其他的crates
src/main.rs 是我们编写应用程序代码的地方
它还初始化了一个新的Git存储库和一个.gitignore文件。如果在现有的Git存储库中运行cargo new,则不会生成Git文件;你可以通过使用cargo new --vcs=git来覆盖这种行为
注意:Git是一个通用的版本控制系统。通过使用--vcs标志,你可以改变cargo new使用不同的版本控制系统或不使用版本控制系统。运行cargo new --help查看可用选项。
Cargo希望源文件位于src目录中。顶级项目目录仅用于存放README文件、许可信息、配置文件和其他与代码无关的内容。使用Cargo可以帮助您组织项目。每样东西都有一个地方,每样东西都在它的地方。
从hello_rust目录中,输入以下命令构建项目:
cargo build
这个命令在target/debug/hello_rust(或在Windows上target\debug\hello_rust.exe)中创建一个可执行文件,而不是在当前目录中。
因为默认构建是调试构建,所以Cargo将二进制文件放在名为debug的目录中。你可以用这个命令运行可执行文件:
$ ./target/debug/hello_rust # or .\target\debug\hello_rust.exe on Windows
Hello, world!
第一次运行cargo build还会导致cargo在顶层创建一个新文件:cargo .lock。该文件跟踪项目中依赖项的确切版本。这个项目没有依赖项,所以文件有点稀疏。你不需要手动修改这个文件;Cargo为您管理它的内容。
我们也可以使用cargo run来编译代码,然后运行可执行文件
Cargo还提供了一个名为Cargo check的命令。这个命令可以快速检查你的代码,确保它可以编译,但不会生成可执行文件
通常,cargo check比cargo build,要快得多,因为它跳过了生成可执行文件的步骤。
使用Cargo的另一个优点是,无论在哪个操作系统上工作,命令都是相同的。
当项目最终准备好发布时,可以使用cargo build --release对其进行优化编译。这个命令将在target/release而不是target/debug中创建一个可执行文件。
如果正在对代码的运行时间进行基准测试,请确保运行cargo build --release和使用target/release中的可执行文件进行基准测试。
尽管hello_rust项目很简单,但它现在使用了将在Rust职业生涯的其余部分中使用的许多实际工具。
有关Cargo的更多信息
你可以在 crates.io(Rust的包注册中心)上找到各种各样的库。 在Rust中,我们经常将包称为“crate”。
在Cargo.toml文件中,添加以下信息(可从crate 页面):
[dependencies]
ferris-says = "0.2"
Now we can run:
cargo build
Cargo将为我们安装依赖项。
您将看到运行此命令为我们创建了一个新文件Cargo.lock。该文件是本地使用的依赖项的确切版本的日志。
在main.rs中
use ferris_says::say;
use std::io::{stdout, BufWriter};fn main() {let stdout = stdout();let message = String::from("Hello fellow Rustaceans!");let width = message.chars().count();let mut writer = BufWriter::new(stdout.lock());say(message.as_bytes(), width, &mut writer).unwrap();
}