Rust 1.65 (发布于2022-11-03)
RUSTUP_HOME
Rustup元数据和工具链将被安装到Rustup主目录中
默认: %USERPROFILE%\.rustup
CARGO_HOME
Cargo主目录
cargo、rustc、rustup等命令将被添加到Cargo的bin
目录,位于:%USERPROFILE%\.cargo\bin
Rustup 默认目录:$HOME/.rustup
Cargo 默认目录:$HOME/.cargo
在安装过程中的某个时刻,您将收到一条消息,说明您还需要Visual Studio 2013或更高版本的MSVC构建工具。
要获取构建工具,您需要安装Visual Studio 2022。当被问及要安装哪些时,包括:
下载 rustup-init,进行安装
# 安装 x86_64-pc-windows-gnu
rustup +x86_64-pc-windows-gnu update
# 设置默认的toolchain
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
该命令下载一个脚本并开始安装rustup
工具,该工具将安装最新的稳定版本Rust。系统可能会提示您输入密码。如果安装成功,将出现以下行:
Rust is installed now. Great!
您还需要一个链接器(linker
),这是Rust用来将其编译后的输出连接到一个文件中的程序。很可能你已经有了。如果出现链接器错误,则应该安装C编译器,该编译器通常会包含一个链接器。C编译器也很有用,因为一些常见的Rust包依赖于C代码,需要C编译器
。
Linux用户通常应该根据其发行版的文档安装GCC或Clang。例如,如果你使用Ubuntu,你可以安装build-essential包。
# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
info: downloading installer
Welcome to Rust!
This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.
#这将下载并安装Rust编程语言的官方编译器,以及它的包管理器Cargo。
Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:
/root/.rustup
This can be modified with the RUSTUP_HOME environment variable.
The Cargo home directory is located at:
/root/.cargo
This can be modified with the CARGO_HOME environment variable.
The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:
/root/.cargo/bin
This path will then be added to your PATH environment variable by
modifying the profile files located at:
/root/.profile
/root/.bashrc
You can uninstall at any time with rustup self uninstall and
these changes will be reverted.
要检查你是否正确安装了Rust,打开shell并输入这行:
$ rustc --version
你应该看到已经发布的最新稳定版本的版本号,提交哈希,和提交日期,以下格式:
rustc 1.68.2 (9eb3afe9e 2023-03-27)
如果您看到这些信息,说明您已经成功安装了Rust !
用 rustup 进行工具链管理
Rust由 rustup
工具进行安装和管理,Rust
有一个6周的快速发布过程,支持大量的平台, 所以在任何时候都有很多版本的Rust可用。rustup
以一致的方式在Rust支持的每个平台上管理这些构建,支持从beta和夜间发布渠道安装Rust,以及支持额外的交叉编译目标。
如果您过去安装过rustup
,那么可以通过运行rustup update
来更新安装。
在Rust开发环境中,所有工具都安装到~/.cargo/bin
目录下,在这里可以找到Rust工具链,包括rustc
、cargo
和rustup
。
因此,Rust开发人员习惯将此目录包含在PATH
环境变量中。在rustup
安装过程中,将尝试配置PATH
。由于平台、命令shell之间的差异以及rustup
中的错误,对PATH
的修改可能要等到重新启动控制台或用户注销后才能生效,或者根本无法成功。
如果在安装之后,在控制台中运行rustc --version
失败,这是最有可能的原因。
一旦通过rustup
安装了Rust,更新到新发布的版本就很容易了。在shell中运行以下更新脚本:
rustup update
如果在任何时候你想卸载Rust,你可以运行rustup self uninstall
。
Cargo主目录下新建一个config
文件:
vi ~/.cargo/config
清华大学的镜像:
[source.crates-io]
replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index"
中科大:
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"
[http]
check-revoke = false
# 清华
echo 'export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup' >> ~/.bash_profile
echo 'export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup' >> ~/.bash_profile
注:rustup 在判断是否需要更新时依赖于 toml 的 sha256,由于 toml 内容中相关链接被替换为镜像源,第一次切换到镜像源时各个 channel 会被认为需要更新。
In Windows CMD, use: echo %PATH%
In PowerShell, use: echo $env:Path
In Linux and macOS, use: echo $PATH
Windows上的位置(假设稳定/x64)
C:\Users\<user>\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src
《Rust编程语言》被亲切地称为“the book”,它将从基本原理出发,为您提供该语言的概述。您将在此过程中构建一些项目,到最后,您将对该语言有一个坚实的掌握。
另外,Rustlings指导您下载和设置Rust工具链,并教你在命令行上阅读和编写Rust语法的基础知识。它是Rust by Example的另一种选择,适用于您自己的环境。
如果阅读数百页关于一门语言的内容不是你的风格,那么Rust By Example可以满足你。虽然书中用大量的词汇来讨论代码,但RBE展示了大量的代码,并将对话保持在最低限度。它还包括练习!
所有这些文档也可以使用rustup doc
命令在本地获得,该命令将在浏览器中为您打开这些资源,而不需要网络连接!
对语言最黑暗的角落感到好奇吗?下面是你可以了解细节的地方:
Read the reference
参考不是正式的规范,但比the book
更详细和全面。
Read the ’nomicon
Rustonomicon 是你了解不安全Rust的黑魔法的指南。它有时也被称为“the ’nomicon
”。
Read the unstable book
Unstable Book 是有不稳定特性的文档,你只能在nightly Rust中使用。
Rust Forge
Rust Forge作为补充文档的存储库,对Rust编程语言的成员很有用。如果你发现任何错误,拼写错误,或者想要添加到Rust Forge,请随时在Rust Forge GitHub上提交问题或PR。
本文假设您使用的是Rust 1.65(发布于2022-11-03)或更高版本。请参阅第1章的“安装”部分来安装或更新Rust。
HTML格式可以在https://doc.rust-lang.org/stable/book/上在线获得,也可以通过rustup
安装Rust来脱机查看。运行rustup docs --book
打开。
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的更多信息)。
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中讨论edition
key 。
最后一行[dependencies]
是列出项目依赖项的部分的开始。在Rust中,代码包被称为crate
。在这个项目中我们不需要任何其他的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();
}
Rust-wasm入门:编译出第一个wasm模块