likes
comments
collection
share

Rust学习笔记之Rust环境配置和入门指南

作者站长头像
站长
· 阅读数 39

拖延,是对自我的孤立与放逐

大家好,我是柒八九

在前端技术,如雨后春笋般破土而出的今天。其技术偏向性,不仅仅是搞一个新的技术框架,更多的是往高性能和底层技术发展。比方说,利用Rust特性所编写的SWC前端构建工具,目前核心功能相当于 Babel;还有就在2022年10月26日Vercel 公司正式宣布推出新的打包工具 Turbopack,他们用基于 RustSWC 替换基于 JavaScript 的转译器 Babel,速度提升了 17 倍。他们还替换了 Terser,压缩的速度提高了 6 倍,从而减少了加载时间和带宽的使用;还有在一些原本只能在客户端运行的程序,现在也被移植到浏览器中运行,例如AutoCAD/Photoshop等,而这些都依赖近期比较热门的WebAssembly技术。

从上面的最新的技术上来看,前端后续的发展都慢慢的往编译优化,重度应用可移植等方向发展。而如果继续探究上面发生的事,其实在这些新技术风向标所显示的信息,都和一个技术语言相关,那就是RustRust站在了前人的肩膀上,借助于最近几十年的语言研究成果,创造出了所有权生命周期等新的概念。相对于C/C++等传统语言,它具有天生的安全性;同时相对于C#/Java/JS等带有垃圾回收的语言来讲,它遵循了{零开销抽象| Zero-Cost Abstraction}规则,并为开发者保留了最大的底层控制能力。

俗话说,站在风口上,猪都会飞。既然,上面所说的是大势所趋,那我们为什么不尝试一下。

而针对已经在工作的人来说,Rust也是有一定的诱惑力。 将Rust用生产环境并用它来处理各式各样的任务。这些任务包括命令行工具开发Web服务器DevOps工具开发嵌入式设备开发音频图像分析转码数字货币交易搜索引擎开发、以及将其转换成WebAssembly在浏览器上发光发热。

所以今天,我们又准备开辟一个新的知识体系 --Rust学习笔记。老话说的好,不想当将军的士兵不是好士兵。但是,在你想成为将军的时候,你需要拥有成为将军的知识储备和能力。这也是我们常说的未雨绸缪

该系列文章的第一篇文章,我们来讲讲Rust环境配置和入门介绍的常规知识。

好了,天不早了,干点正事哇。 Rust学习笔记之Rust环境配置和入门指南

你能所学到的知识点

  1. macOS环境中安装Rust 推荐阅读指数 ⭐️⭐️⭐️⭐️⭐️
  2. 构建一个Rust应用 推荐阅读指数 ⭐️⭐️⭐️
  3. 编译和运行是两个不同的步骤 推荐阅读指数 ⭐️⭐️⭐️
  4. 如何使用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语言编写的代码,所以为了能正常编译运行RustC语言编译器是必要部分。


常用命令

  • rustup update :来更新Rust版本
  • rustup self uninstall : 卸载rustupRust工具链
  • 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++gccclang编译非常相似。一旦编译成功,就会获得一个二进制的可执行文件

上面的步骤,其实和我们平时使用js是不一样的。js动态语言,在编译之后就会立即运行。

Rust是一种预编译语言,这意味着当你编译完Rust程序之后,便可以将可执行文件交付他人,并运行在没有安装Rust的环境中。


Hello,Cargo

每次运行rustc都比较繁琐,项目小还可以忍受吗,但是如果随着项目增大,这无疑是一种折磨。所以,在实际运用中,我们用Rust构建工具:Cargo

CargoRust工具链中内置的构建系统及包管理器

由于它可以处理众多诸如构建代码、下载编译依赖库等繁琐但重要的任务,所以绝大部分的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刚刚生成的两个文件与一个目录

Rust学习笔记之Rust环境配置和入门指南

  • 一个名为Cargo.toml的文件
  • 一个名为main.rs的源代码文件,该源代码文件被放置在src目录下
  • 与此同时,Cargo还好初始化一个新的git仓库并生成默认的.gitignore文件
  • 忽略.git目录

Cargo.toml

使用一个文本编辑器打开Cargo.toml

Rust学习笔记之Rust环境配置和入门指南

Cargo使用TOMLTOM's Obvious,Minimal Language)作为标准的配置格式。

首行文本中的[package]是一个区域标签,它表明接下来的语句会被用于当前的程序包。紧随标签后的3行语句提供了Cargo编译这个程序时需要的配置信息,它们分别是

  • 程序名- hello_cargo
  • 程序版本号 - 0.1.0
  • Rust版本号 - 2021

最后一行文本中[dependencies]同样是一个区域标签,它表明随后的区域会被用来声明项目的依赖。在Rust中,把代码的集合称为{包| Crate}

crateRust中最小的编译单元package是单个或多个crate


其他

Cargo为我们生成了一个输出Hello,Rust的程序。并且源文件main.rs被放置到了src目录下,在项目目录下多了一个叫Cargo.toml的配置文件。

Cargo会默认把所有的源代码文件保存到src目录下,而项目根目录只被用来存储诸如README文档/许可声明/配置文件等与源代码无关的文件。


使用Cargo构建和运行项目

hello_cargo项目目录下,Cargo可以通过下面的命令来完成构建任务

cargo build

并通过./target/debug/hello_cargo完成程序运行。

继续使用tree来查看文档目录

Rust学习笔记之Rust环境配置和入门指南

首次使用命令cargo build构建的时候,它会在项目根目录下创建一个名为Cargo.lock的新文件,这个文件记录了当前项目所有依赖库的具体版本号不要手动编辑其中的内容,Cargo可以帮助你自动维护它

当然,我们可以把上述build和手动查找并执行debug目录下的可执行文件的两个操作合并成一个操作。

cargo run

cargo run命令依次完成编译执行任务。

此外,Cargo提供了一个叫做cargo check的命令,用来快速检查当前代码是否可以通过编译,而不需要花费额外的时间去真正生成可执行程序。


以Release 模式进行构建

当准备好发布自己的项目时,可以使用命令cargo build --release优化模式构建并生成可执行程序。它生成的可执行文件会被放置在target/release目录下,而不是之前的target/debug目录下。

这种模式会以更长的编译时间为代价来优化代码,从而使代码拥有更好的运行时性能


后记

分享是一种态度

参考资料:《Rust权威指南》

全文完,既然看到这里了,如果觉得不错,随手点个赞和“在看”吧。

Rust学习笔记之Rust环境配置和入门指南