前言
Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有的兼顾开发效率和执行效率的语言。
官方对Rust是这么评价的。对于现在网络来说,Rust 被广泛了解主要是由于两件事。一是安全性,Rust 语言因其并发安全性而深受众多开发者的喜爱,曾在多个榜单上获评最受欢迎编程语言。一是 Linux 内核将引入 Rust 。但是不管怎么说,Rust 能够流行,和它本身是否优秀是脱不开干系的。
本系列文章旨在通过理论和实践的结合,让读者更快的、更高效的学习 Rust 并解决学习过程中所遇到的问题。本系列文章还随布置各种学习的小案例作为作业,让读者更深入的学习和理解 Rust 的相关概念。最后会带领读者实战开发几个项目,让读者上手 Rust 开发。本篇文章最主要的两个目的就是为了说明你为什么要学习 Rust 和搭建 Rust 的开发环境。
一、Rust的优点和应用
Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月。Rust 的编译器是在 MIT License 和 Apache License 2.0 双重协议声明下的免费开源软件。
当前编译器版本号:1.62.0
1. Rust的优点
这也就是为什么选择 Rust 的原因所在。在 Rust 官网这么写着 Rust 的优点:
高性能
Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。
可靠性
Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。
生产力
Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具 —— 包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。
Rust 每一个版本都有一个核心主题或重点。将 1.0 视为“Rust 2015”,现在
- Rust 2015:稳定性
- Rust 2018:生产力
短短几年时间,Rust官方以及对Rust进行了全年的改进,并且明确了Rust的主要方向。此外,更是创建了连接并授权 Rust 的全球社区。
2. Rust的应用
Rust 语言可以用于开发:
传统命令行程序
Rust 编译器可以直接生成目标可执行程序,不需要任何解释程序。相比较传统的命令行开发,使用 Rust 强大的生态系统快速实现命令行工具。Rust 可助您放心维护,轻松分发应用程序。Rust拥有以下特点:
- 可靠且速度惊人: 即便只是编写简短的一次性脚本,您也能确信它是快速且易于测试的,并可以提供有用的输出。
- 易于分发: 将所有内容编译为单个可执行文件,用户无需安装运行时和库。
- 健壮的配置: 轻松处理跨平台的配置文件。Rust 将为您处理命名空间和格式。
- 帮助手册?轻松生成。: 为应用自动生成手册。只要对生成的文件打包即可轻松获得手册。
- 数据输入,数据输出: 除了与人沟通之外,Rust 还提供了绝佳的工具来帮助您与机器对话。
- 灵活的日志记录: 添加日志很方便,将其配置到不同的目标或设置为不同的格式也相当容易。
除此以外,Rust 还有优秀的错误处理
,能够当场 捕获错误。Rust 还能让您灵活地组织代码
。从一个文件开始,当您需要更多功能时,有信心重构应用程序而不会破坏任何内容。
以上内容将在随后的开发中非常明显的体现出来,如果你跟着本系列文章一起学习 Rust ,相信你很快就会了解到以上特点。
Web 应用
Rust 可以被编译成 WebAssembly,WebAssembly 是一种 JavaScript 的高效替代品。使用 Rust 来逐个增强您的 JavaScript 模块。发布到 npm,使用 webpack 打包,即可感受到惊人的速度提升。
使用 Rust 做 Web 开发,他拥有以下特点:
- 可预见的性能: 没有难以预料的 GC 暂停,也没有 JIT 编译器造成性能抖动,只有底层控制与上层人体工程学的完美结合。
- 更小的代码尺寸: 代码尺寸越小,页面加载速度就越快。Rust 生成的
.wasm
模块不含类似于垃圾回收器这样的额外成本。高级优化和 Tree Shaking 优化可移除无用代码。 - 现代设施: 充满活力的库生态系统助您旗开得胜。Rust 拥有丰富的表达能力和零成本的抽象,以及助力您学习的友好社区。
对于 JavaScript 来说,Rust 做的并不是取代,而是增强,是 JavaScript 的最佳搭档:
- 增强,而非取代: WebAssembly 的梦想不是扼杀 JavaScript,而是与其并存,帮助处理一些繁重或底层的任务。Rust 以性能为先,这些任务也可以受益。
- 友好的工具链: 您可以将 Rust WebAssembly 包发布到 npm 之类的包仓储中心上。使用 webpack、Parcel 或其它工具来打包并分发它们。使用
npm audit
之类的工具和 Greenkeeper 来维护它们。 - 无缝的互操作性: 自动生成 Rust、WebAssembly 和 JavaScript API 之间的绑定代码。充分利用
web-sys
之类的库为整个 Web 平台提供预打包的绑定。
网络服务器
Rust 用极低的资源消耗做到安全高效,且具备很强的大规模并发处理能力,十分适合开发普通或极端的服务器程序。可预见的性能,极小的资源占用,坚如磐石的可靠性。Rust 极其适合网络服务。在网络方便的优点,是 Rust 广泛被了解的原因之一,他的特点如下:
- 低资源占用: 控制资源使用,将内存和 CPU 占用降到最低。编译器的帮助可确保您所做正确。同时,通过生产效率高、使用体验宜人的生态系统来实现这一点。
- 安全可靠: Rust 强大的类型检查可以防止多种级别的 Bug。确保您在何时何地都可确切地知道状态是共享还是可变。在部署之前通过捕捉故障点来获得帮助。
- 大规模并发: 可以混合使用任何适合于您的并发方式。Rust 会确保您不会在线程或任务之间意外地共享状态。它能让您无所畏惧地压榨任意规模的性能。
嵌入式设备
Rust 同时具有JavaScript 一般的高效开发语法和 C 语言的执行效率,支持底层平台的开发。针对资源匮乏的设备?需要底层控制而又不失上层抽象的便利?Rust 包您满意!
Rust 开发嵌入式设备有以下六大优点是:
- 强大的静态分析: 在编译时强制要求引脚和外设配置,以确保资源不会被您应用程序中非预期的部分使用。
- 灵活的内存管理: 动态内存分配是可选的。可使用全局分配器和动态数据结构,也可以不采用堆而全部静态分配。
- 无畏并发: Rust 使得线程之间不可能意外地共享状态。无论使用哪种喜欢的方式实现并发,都能获得 Rust 提供的强力保障。
- 互操作性: 可将 Rust 集成到现有的 C 代码库中,也可利用现有的 SDK 编写 Rust 应用程序。
- 可移植性: 只需要一次编写库或驱动,就能在各种系统中使用它。不管是非常小的微控制器,还是强大的单板计算机,都可直接使用。
- 社区驱动: 作为 Rust 开源项目的一部分,嵌入式系统由一流的并拥有商业伙伴支持的开源社区驱动。
现在的 Rust 有着广泛的应用,庞大的生态系统,活跃的社区,以及大量的参考资料,Rust 现在不只是有前途
的编程语言,更是有可靠前途
的编程语言。
二、搭建开发环境
搭建 Rust 开发环境,并且编写一个小应用。
当前环境:
项目 | 值 |
操作系统 | Windows 11 |
Rust版本 | 1.62.0 |
编程工具 | vscode |
1. 安装 Rust
如果你觉得安装较为麻烦,只想体验一下的话,可以进入演练场在线使用。
点击链接进入页面后,点击下载生成工具
,然后就和正常安装包一样安装即可。
- 安装 Rustup
由于笔者使用的是 Windows 系统,因此目前就在 Windows 上进行学习,如果你不是 Windows 可以从这里找到对应的安装方式。
安装 Rust 的主要方式是通过 Rustup 这一工具,它既是一个 Rust 安装器又是一个版本管理工具。如果你有兴趣,可以去官网下载,当然我这里也是提供了最新版的下载地址。
官方下载
打开官网后,选择适合你的操作系统的版本进行下载:
- 安装 Rust
打开下载好的 rustup-init.exe
,界面如下所示:
按照提示,给出三个选项,分别是
1. 默认安装 2. 自定义安装 3. 取消安装
此时输入需要 1
默认安装,就会自动安装好 Rust。
- 检查是否安装了 Rust 和 Cargo
在 cmd
中运行命令 cargo --version
,如果得到以下结果,而不是 命令未找到
的话就是安装成功了。
2. 配置 vscode 开发环境
配置开发环境相当简单,只要安装以下插件即可。
3. 创建新项目
- 随便找个地方,比如桌面,按
shift + 鼠标右键
,选择此处打开命令行
,运行以下命令:
cargo new hello-rust
看到以下内容,表示项目创建完成。
- 现在进入这个新建的目录,在空白处
鼠标右键
,然后选择使用vscode打开
如果没有问题,界面应该是下面的样子:
此时,文件夹目录是这样的,Cargo
已经帮我们创建好默认项目了,还创建了个git的本地仓库,还有一些配置文件,以后会说到。你只要知道 src/main.rs
为编写应用代码的地方。
- 运行项目
新建项目已经为我们创建好了默认的 Hello World 项目,我们直接在 vscode
的终端中运行 cargo run
命令,就可以看到系统输出了 Hello World。
并且可以看到 Rust 是有一个编译的过程的,
4. 编写 Hello-Rust
Cargo.toml
文件是一个管理项目配置的文件,包括项目依赖等相关配置,我们在后面会详细介绍该文件,现在我们来添加一个依赖,
然后在 vscode 终端运行
cargo build
终端就会有以下输出,可以看到 cargo 会自动为我们添加依赖,并且安装好依赖所依赖的依赖(直接绕口令)
接下来就在 src/main.rs
中写入以下内容
use ferris_says::say; // from the previous step 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(); }
然后在终端中再次执行
cargo run
就会看到以下结果
这个案例我们随后会进行更加细致的讲解,并且随着后面的学习,对其中的语法理解会更加的深刻。
Rustaceans
是对学习 Rust 者的称呼。
这只可爱的小螃蟹是 Rust 的官方吉祥物,在官方网站是这样的,
总结
通过本文,你应该已经了解了为什么需要学习 Rust ,并且实现了 Rust 的小案例。由于本文是开篇,就不布置学习的作业,请等待文章更新。