❝拖延,是对自我的孤立与放逐 ❞
大家好,我是「柒八九」。
在前端技术,如雨后春笋般破土而出的今天。其技术偏向性,不仅仅是搞一个新的技术框架,更多的是往高性能和底层技术发展。比方说,利用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 「推荐阅读指数」 ⭐️⭐️⭐️⭐️⭐️❞
通过一个叫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是否被正确安装,rustc 1.64.0 (a55dd71d5 2022-09-19)rustup doc: 在浏览器中打开在安装工具再执行过程中在本地生成的「离线文档」我们还是继续用最原始的方式,来了解一个新语言。用对应的语法写一个Hello,Rust。
打开终端并输入相应的命令,来创建文件夹及第一个Hello,Rust项目。
mkdir ~/projects
cd ~/projects
mkdir hello_rust
cd hello_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的环境中。 ❞
每次运行rustc都比较繁琐,项目小还可以忍受吗,但是如果随着项目增大,这无疑是一种折磨。所以,在实际运用中,我们用Rust构建工具:Cargo
❝
Cargo是Rust工具链中「内置」的构建系统及「包管理器」。 ❞
由于它可以处理众多诸如构建代码、下载编译依赖库等繁琐但重要的任务,所以绝大部分的Rust用户都选择它来管理自己的Rust项目。
如果是通过curl https://sh.rustup.rs --sSf |sh来安装Rust,那么Cargo就已经被附带在了当前的Rust工具链里。
我们可以通过如下命令来检查Cargo是否被安装妥当
cargo --version
我们还是在projects文件夹下运行。
cargo new hello_cargo
cd hello_cargo
第一条命令会创建名为hello_cargo项目。Cargo会以hello_cargo的名字来创建项目目录并放置它生成的文件。
当我们进入hello_cargo文件夹,会看到Cargo刚刚生成的「两个文件与一个目录」

用tree命令查看目录
Cargo.toml的文件main.rs的源代码文件,该源代码文件被放置在src目录下Cargo还好初始化一个新的git仓库并生成默认的.gitignore文件使用一个文本编辑器打开Cargo.toml

Cargo使用TOML(TOM's Obvious,Minimal Language)作为标准的配置格式。
首行文本中的[package]是一个「区域标签」,它表明接下来的语句会被用于当前的程序包。紧随标签后的3行语句提供了Cargo编译这个程序时需要的配置信息,它们分别是
hello_cargo0.1.0Rust版本号 - 2021最后一行文本中[dependencies]同样是一个区域标签,它表明随后的区域会被用来声明项目的依赖。在Rust中,把代码的集合称为包Crate。
❝
crate是Rust中最小的「编译单元」,package是单个或多个crate。 ❞
Cargo为我们生成了一个输出Hello,Rust的程序。并且源文件main.rs被放置到了src目录下,在项目目录下多了一个叫Cargo.toml的配置文件。
❝
Cargo会默认把「所有的源代码文件」保存到src目录下,而「项目根目录」只被用来存储诸如README文档/许可声明/配置文件等与源代码「无关」的文件。 ❞
在hello_cargo项目目录下,Cargo可以通过下面的命令来完成「构建任务」。
cargo build
并通过./target/debug/hello_cargo完成程序运行。
继续使用tree来查看文档目录

「首次使用」命令cargo build构建的时候,它会在「项目根目录」下创建一个名为Cargo.lock的新文件,这个文件记录了「当前项目所有依赖库的具体版本号」。「不要手动编辑其中的内容,Cargo可以帮助你自动维护它」。
当然,我们可以把上述build和手动查找并执行debug目录下的可执行文件的两个操作合并成一个操作。
cargo run
cargo run命令依次完成「编译」和「执行」任务。
此外,Cargo提供了一个叫做cargo check的命令,用来「快速检查当前代码是否可以通过编译」,而不需要花费额外的时间去真正生成可执行程序。
当准备好发布自己的项目时,可以使用命令cargo build --release在「优化模式」构建并生成可执行程序。它生成的可执行文件会被放置在target/release目录下,而不是之前的target/debug目录下。
这种模式会以更长的编译时间为代价来优化代码,从而使代码拥有更好的「运行时性能」。
「分享是一种态度」。
参考资料:《Rust权威指南》
「全文完,既然看到这里了,如果觉得不错,随手点个赞和“在看”吧。」