Rust学习笔记之Rust环境配置和入门指南
拖延,是对自我的孤立与放逐
大家好,我是柒八九。
在前端技术,如雨后春笋般破土而出的今天。其技术偏向性,不仅仅是搞一个新的技术框架,更多的是往高性能和底层技术发展。比方说,利用Rust
特性所编写的SWC
前端构建工具,目前核心功能相当于 Babel
;还有就在2022年10月26日
,Vercel
公司正式宣布推出新的打包工具 Turbopack
,他们用基于 Rust
的 SWC
替换基于 JavaScript
的转译器 Babel
,速度提升了 17 倍。他们还替换了 Terser
,压缩的速度提高了 6 倍,从而减少了加载时间和带宽的使用;还有在一些原本只能在客户端运行的程序,现在也被移植到浏览器中运行,例如AutoCAD
/Photoshop
等,而这些都依赖近期比较热门的WebAssembly
技术。
从上面的最新的技术上来看,前端后续的发展都慢慢的往编译优化,重度应用可移植等方向发展。而如果继续探究上面发生的事,其实在这些新技术风向标所显示的信息,都和一个技术语言相关,那就是Rust
。Rust
站在了前人的肩膀上,借助于最近几十年的语言研究成果,创造出了所有权与生命周期等新的概念。相对于C/C++
等传统语言,它具有天生的安全性;同时相对于C#/Java/JS
等带有垃圾回收的语言来讲,它遵循了{零开销抽象| Zero-Cost Abstraction}规则,并为开发者保留了最大的底层控制能力。
俗话说,站在风口上,猪都会飞。既然,上面所说的是大势所趋,那我们为什么不尝试一下。
而针对已经在工作的人来说,Rust
也是有一定的诱惑力。 将Rust
用生产环境并用它来处理各式各样的任务。这些任务包括命令行工具开发、Web服务器、DevOps工具开发、嵌入式设备开发、音频图像分析转码、数字货币交易、搜索引擎开发、以及将其转换成WebAssembly
在浏览器上发光发热。
所以今天,我们又准备开辟一个新的知识体系 --Rust学习笔记。老话说的好,不想当将军的士兵不是好士兵。但是,在你想成为将军的时候,你需要拥有成为将军的知识储备和能力。这也是我们常说的未雨绸缪。
该系列文章的第一篇文章,我们来讲讲Rust环境配置和入门介绍的常规知识。
好了,天不早了,干点正事哇。
你能所学到的知识点
- 在
macOS
环境中安装Rust
推荐阅读指数 ⭐️⭐️⭐️⭐️⭐️- 构建一个Rust应用 推荐阅读指数 ⭐️⭐️⭐️
- 编译和运行是两个不同的步骤 推荐阅读指数 ⭐️⭐️⭐️
- 如何使用Cargo构建Rust应用 推荐阅读指数 ⭐️⭐️⭐️⭐️⭐️
在macOS环境中安装Rust
通过一个叫rustup
的命令行工具来完成Rust
的下载和安装,这个工具被用来管理不同的Rust
发行版本及其附带工具链。
由于本人电脑是
macOS
环境,所以我们后续的所有示例介绍和操作都基于macOS
。
打开命令行终端,并输入命令:
curl https://sh.rustup.rs --sSf |sh
这条命令会下载并执行一个脚本来安装rustup
工具,进而安装最新的Rust
稳定版本。上述的安装过程会自动将Rust
工具链添加到环境变量PATH
中,并在下一次登录终端时生效。
如果你想要立即开始使用Rust
而不用重新启动终端,可以在终端中运行如下所示的命令来让配置立即生效:
source $HOME/.cargo/env
或者也可以向~/.bash_profile
文件中添加下面的语句,手动将Rust
添加到环境变量PATH
中
export PATH="$HOME/.cargo/bin:$PATH"
为了正常编译执行Rust
程序,还需要一个{链接器| Linker}。由于C语言编译器通常会附带运行正常的链接器,并且一部分常用的Rust
包会依赖于C
语言编写的代码,所以为了能正常编译运行Rust
,C语言编译器
是必要部分。
常用命令
rustup update
:来更新Rust
版本rustup self uninstall
: 卸载rustup
及Rust
工具链rustc --version
:检查Rust
是否被正确安装,- 如果一切正常,在命令输出就会看到格式为最新稳定版本的版本号、当前版本的hash、版本的提交日期
rustc 1.64.0 (a55dd71d5 2022-09-19)
rustup doc
: 在浏览器中打开在安装工具再执行过程中在本地生成的离线文档
Hello,Rust
我们还是继续用最原始的方式,来了解一个新语言。用对应的语法写一个Hello,Rust
。
创建一个文件夹
打开终端并输入相应的命令,来创建文件夹及第一个Hello,Rust
项目。
mkdir ~/projects
cd ~/projects
mkdir hello_rust
cd hello_rust
编写并运行Rust程序
创建一个名为main.rs
的源文件。在命令规则上,Rust
文件总是以.rs
扩展名结尾。
fn main(){
println!("Hello,Rust");
}
然后保存文件并回到终端窗口。 在macOS
环境下,可以通过如下的命令编译并运行对应的文件。
rustc main.rs
./main
输出为:Hello,Rust
。
程序剖析
第一个值得注意的部分如下所示
fn main(){
}
这部分代码定义了Rust
的一个函数。
这里的
main
函数比较特殊:当你运行一个可执行Rust
程序时,所有的代码都会从这个入口函数开始运行。
这段代码的第一行声明了一个名为main
的、没有任何参数和返回值的函数。
那对花括号{}
被用来标记函数体,Rust
要求所有的函数都要被花括号包裹起来。
再来看main
函数体中的代码
println!("Hello,Rust");
这一行代码的作用是:将字符串输出到终端上。这里我们调用了一个被叫住println!
的宏。针对宏
的解释,我们后面会有详细的分析。这里只要记住,Rust中所有以!结尾的调用都意味着你正在使用一个宏而不是普通函数。
编译和运行是两个不同的步骤
在运行一段Rust
程序之前,必须输入rustc
命令及附带的源文件名参数来编译它:
rustc main.rs
这过程和C/C++
的gcc
或clang
编译非常相似。一旦编译成功,就会获得一个二进制的可执行文件。
上面的步骤,其实和我们平时使用js
是不一样的。js
是动态语言,在编译之后就会立即运行。
而
Rust
是一种预编译语言,这意味着当你编译完Rust
程序之后,便可以将可执行文件交付他人,并运行在没有安装Rust
的环境中。
Hello,Cargo
每次运行rustc
都比较繁琐,项目小还可以忍受吗,但是如果随着项目增大,这无疑是一种折磨。所以,在实际运用中,我们用Rust
构建工具:Cargo
Cargo
是Rust
工具链中内置的构建系统及包管理器。
由于它可以处理众多诸如构建代码、下载编译依赖库等繁琐但重要的任务,所以绝大部分的Rust
用户都选择它来管理自己的Rust
项目。
如果是通过curl https://sh.rustup.rs --sSf |sh
来安装Rust
,那么Cargo
就已经被附带在了当前的Rust
工具链里。
我们可以通过如下命令来检查Cargo
是否被安装妥当
cargo --version
用Cargo 创建一个项目
我们还是在projects
文件夹下运行。
cargo new hello_cargo
cd hello_cargo
第一条命令会创建名为hello_cargo
项目。Cargo
会以hello_cargo
的名字来创建项目目录并放置它生成的文件。
当我们进入hello_cargo
文件夹,会看到Cargo
刚刚生成的两个文件与一个目录
- 一个名为
Cargo.toml
的文件 - 一个名为
main.rs
的源代码文件,该源代码文件被放置在src
目录下 - 与此同时,
Cargo
还好初始化一个新的git
仓库并生成默认的.gitignore
文件 - 忽略.git目录
Cargo.toml
使用一个文本编辑器打开Cargo.toml
Cargo
使用TOML
(TOM's Obvious,Minimal Language
)作为标准的配置格式。
首行文本中的[package]
是一个区域标签,它表明接下来的语句会被用于当前的程序包。紧随标签后的3行语句提供了Cargo
编译这个程序时需要的配置信息,它们分别是
- 程序名-
hello_cargo
- 程序版本号 -
0.1.0
Rust
版本号 -2021
最后一行文本中[dependencies]
同样是一个区域标签,它表明随后的区域会被用来声明项目的依赖。在Rust
中,把代码的集合称为{包| Crate}。
crate
是Rust
中最小的编译单元,package
是单个或多个crate
。
其他
Cargo
为我们生成了一个输出Hello,Rust
的程序。并且源文件main.rs
被放置到了src
目录下,在项目目录下多了一个叫Cargo.toml
的配置文件。
Cargo
会默认把所有的源代码文件保存到src
目录下,而项目根目录只被用来存储诸如README文档
/许可声明/配置文件等与源代码无关的文件。
使用Cargo构建和运行项目
在hello_cargo
项目目录下,Cargo
可以通过下面的命令来完成构建任务。
cargo build
并通过./target/debug/hello_cargo
完成程序运行。
继续使用tree
来查看文档目录
首次使用命令cargo build
构建的时候,它会在项目根目录下创建一个名为Cargo.lock
的新文件,这个文件记录了当前项目所有依赖库的具体版本号。不要手动编辑其中的内容,Cargo
可以帮助你自动维护它。
当然,我们可以把上述build
和手动查找并执行debug
目录下的可执行文件的两个操作合并成一个操作。
cargo run
cargo run
命令依次完成编译和执行任务。
此外,Cargo
提供了一个叫做cargo check
的命令,用来快速检查当前代码是否可以通过编译,而不需要花费额外的时间去真正生成可执行程序。
以Release 模式进行构建
当准备好发布自己的项目时,可以使用命令cargo build --release
在优化模式构建并生成可执行程序。它生成的可执行文件会被放置在target/release
目录下,而不是之前的target/debug
目录下。
这种模式会以更长的编译时间为代价来优化代码,从而使代码拥有更好的运行时性能。
后记
分享是一种态度。
参考资料:《Rust权威指南》
全文完,既然看到这里了,如果觉得不错,随手点个赞和“在看”吧。
转载自:https://juejin.cn/post/7163079539738804260