前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rust学习笔记之Rust环境配置和入门指南

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

作者头像
前端柒八九
发布2022-12-19 21:41:25
9190
发布2022-12-19 21:41:25
举报

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

大家好,我是「柒八九」

在前端技术,如雨后春笋般破土而出的今天。其技术偏向性,不仅仅是搞一个新的技术框架,更多的是往高性能和底层技术发展。比方说,利用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环境配置和入门介绍」的常规知识。

好了,天不早了,干点正事哇。

你能所学到的知识点

?

  1. macOS环境中安装Rust 「推荐阅读指数」 ??????????
  2. 构建一个Rust应用 「推荐阅读指数」 ??????
  3. 编译和运行是两个不同的步骤 「推荐阅读指数」 ??????
  4. 如何使用Cargo构建Rust应用 「推荐阅读指数」 ??????????

?


在macOS环境中安装Rust

通过一个叫rustup的命令行工具来完成Rust的下载和安装,这个工具被用来管理不同的Rust发行版本及其附带工具链。

?由于本人电脑是macOS环境,所以我们后续的所有示例介绍和操作都基于macOS。 ?

打开命令行终端,并输入命令:

代码语言:javascript
复制
curl https://sh.rustup.rs --sSf |sh

这条命令会下载并执行一个脚本来安装rustup工具,进而安装最新的Rust稳定版本。上述的安装过程会「自动将Rust工具链添加到环境变量PATH中」,并在下一次登录「终端」时生效。

如果你想要立即开始使用Rust而不用重新启动终端,可以在终端中运行如下所示的命令来让配置立即生效:

代码语言:javascript
复制
source $HOME/.cargo/env

或者也可以向~/.bash_profile文件中添加下面的语句,「手动」Rust添加到环境变量PATH

代码语言:javascript
复制
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项目。

代码语言:javascript
复制
mkdir ~/projects
cd ~/projects
mkdir hello_rust
cd hello_rust

编写并运行Rust程序

创建一个名为main.rs「源文件」。在命令规则上,Rust文件总是以.rs扩展名结尾。

代码语言:javascript
复制
fn main(){
  println!("Hello,Rust");
}

然后保存文件并回到「终端窗口」。在macOS环境下,可以通过如下的命令「编译并运行」对应的文件。

代码语言:javascript
复制
rustc main.rs
./main

输出为:Hello,Rust

程序剖析

第一个值得注意的部分如下所示

代码语言:javascript
复制
fn main(){

}

这部分代码定义了Rust的一个函数。

?这里的main函数比较特殊:当你运行一个「可执行」Rust程序时,所有的代码都会从这个「入口函数」开始运行。 ?

这段代码的第一行声明了一个名为main的、没有任何参数和返回值的函数。

那对花括号{}被用来标记「函数体」Rust要求所有的函数都要被花括号包裹起来。

再来看main函数体中的代码

代码语言:javascript
复制
println!("Hello,Rust");

这一行代码的作用是:将字符串输出到终端上。这里我们调用了一个被叫住println!「宏」。针对的解释,我们后面会有详细的分析。这里只要记住,「Rust中所有以!结尾的调用都意味着你正在使用一个宏而不是普通函数」


编译和运行是两个不同的步骤

在运行一段Rust程序之前,必须输入rustc命令及附带的源文件名参数来「编译」它:

代码语言:javascript
复制
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是否被安装妥当

代码语言:javascript
复制
cargo --version

用Cargo 创建一个项目

我们还是在projects文件夹下运行。

代码语言:javascript
复制
cargo new hello_cargo
cd hello_cargo

第一条命令会创建名为hello_cargo项目。Cargo会以hello_cargo的名字来创建项目目录并放置它生成的文件。

当我们进入hello_cargo文件夹,会看到Cargo刚刚生成的「两个文件与一个目录」

tree命令查看目录

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

Cargo.toml

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

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可以通过下面的命令来完成「构建任务」

代码语言:javascript
复制
cargo build

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

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

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

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

代码语言:javascript
复制
cargo run

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

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


以Release 模式进行构建

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

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


后记

「分享是一种态度」

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

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

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-07,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 前端柒八九 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 你能所学到的知识点
  • 在macOS环境中安装Rust
    • 常用命令
    • Hello,Rust
      • 创建一个文件夹
        • 编写并运行Rust程序
          • 程序剖析
          • 编译和运行是两个不同的步骤
          • Hello,Cargo
            • 用Cargo 创建一个项目
              • Cargo.toml
              • 其他
          • 使用Cargo构建和运行项目
          • 以Release 模式进行构建
          • 后记
          相关产品与服务
          命令行工具
          腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com