Rust 初探

260 阅读5分钟

Rust

一、为什么要了解rust

Rust  是一种快速、高并发、安全且具有授权性的编程语言,最初由 Graydon Hoare 于 2006 年创造和发布(因为电梯坏了,需要爬21楼而来)。现在它是一种开源语言,主要由 Mozilla 团队和许多开源社区成员共同维护和开发。它的目标是 C 和 C++占主导地位的系统编程领域。

Rust 是一门注重安全(safety)、速度(speed)和并发(concurrency)的现代系统编程语言。Rust 通过内存安全来实现以上目标,但不使用垃圾回收机制(garbage collection, GC)。

二、Rust 优势

1. 高性能

Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

2. 可靠性

Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。

3.生产力

Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具——包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。

三、Rust 应用领域

image.png

在前端方面的应用

Tariui

构建跨平台的快速、安全、前端隔离应用

Tauri 是一个工具包,可以帮助开发者为主要桌面平台制作应用程序(如 mac,windows,linux 等)。几乎支持现有的任何前端框架(如 react, vue, vite 等),其核心是使用 Rust 编写的。Rust 负责系统通信,应用构建,上层应用开发只需要专注于 webview 中的网页编写(可以使用自己喜欢的任何前端语言)。未来可以支持移动端app,已经有demo。

Tauri官网

Deno

The easiest, most secure JavaScript runtime.

Deno 是一个简单、现代且安全的 JavaScript 和 TypeScript 运行时,它使用 V8 并以 Rust 构建。 rust 构建前端工具链的重要开拓者。

Deno官网

SWC

SWC 是一个可扩展的基于 Rust 的平台,用于下一代快速开发工具。 Next.js(12)、Parcel 和 Deno 等工具以及 Vercel、字节跳动、腾讯、Shopify 等公司都在使用它。

SWC 可用于编译和捆绑。对于编译,它使用现代 JavaScript 功能获取 JavaScript / TypeScript 文件,并输出所有主要浏览器都支持的有效代码。 SWC官网

TurboPack

Turbo 是用 Rust 编写的用于前端开发的下一代工具链。目前落地月Next.js(13.x)

它由3个主要部分组成:

Turbopack:增量打包器(Webpack 的后继者) Turborepo:增量构建系统 Turbo 引擎:低级增量计算和记忆引擎

turbo-Github 官网

Parcel

Parcel 是一个用于 Web 的零配置构建工具。它将开箱即用的出色开发体验与可扩展的架构相结合,可以让您的项目从刚刚开始到大规模生产应用程序。 Parcel 的 JavaScript 编译器是用 Rust 编写的,缓存一切可缓存

官网

NAPI-RS

一个用 Rust 构建预编译 Node.js 插件的框架。(swc 基石)

官网

四、Rust 环境搭建

  1. brew upgrade
  2. brew install rustup-init
  3. 进入/opt/homebrew/Cellar/rustup-init/1.25.2/bin (版本有更新,进入对应版本即可)
  4. 运行 rustup-init 选择第一个,默认配置即可
  5. 屏幕出现成功字样 Rust is installed now. Great!
  6. 最后执行这句,让环境变量生效 source $HOME/.cargo/env
  7. 打开终端 输入 rustc -V

image.png

Rust构建工具与包管理工具 Cargo

类比于nodejs 自带的 npm

  1. 创建工程 cargo new rust_demo1
  2. 构建 cargo build
  3. 生成文档 cargo doc
  4. 发布到crates.io cargo publish

IDE及插件

vscode rust-analyzer

迈向Rust的第一步, Hello World!

// 初始化项目
cargo new rust_demo
// 进入vscode
code .
// 构建
cargo build
// 运行
cargo run

迈向Rust Webassembly 第一步,Hello World!

  1. 安装 wasm-pack wasm-pack
  2. 安装 cargo-generate
cargo install cargo-generate 
  1. 生成项目
cargo generate --git https://github.com/rustwasm/wasm-pack-template
  1. 打包wasm
wasm-pack build
  1. 生成web项目并增加依赖(这个项目demo 是webpack4的,注意node版本不要过高18.x不可以)
npm init wasm-app www
{   // ... 
    "dependencies": { 
        // Add this three lines block! 
        "wasm-game-of-life": "file:../pkg" 
    },
    "devDependencies": { //... } 
}
  1. 启动项目,Hello World
  2. 附加
#[wasm_bindgen]
pub fn greet(name: &str) { 
    alert(&format!("Hello, {}!", name)); 
}

学习问题

标量数据类型

字符 浮点型 整形 布尔

复合类型

元组数组

所有权

所有程序都必须管理其运行时使用计算机内存的方式。一些语言中具有垃圾回收机制,在程序运行时有规律地寻找不再使用的内存;在另一些语言中,程序员必须亲自分配和释放内存。Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。如果违反了任何这些规则,程序都不能编译。在运行时,所有权系统的任何功能都不会减慢程序。

  1. Rust 中的每一个值都有一个 所有者owner)。
  2. 值在任一时刻有且只有一个所有者。
  3. 当所有者(变量)离开作用域,这个值将被丢弃。

引用与借用

  • 在任意给定时间,要么 只能有一个可变引用,要么 只能有多个不可变引用。
  • 引用必须总是有效的。

thinking

学习曲线比较陡峭,相对于js 来讲多了很多概念,类型系统及多线程处理问题,智能指针、所有权及借用。 相信在未来前端工具链中,rust的基石地位会越来越稳固。 FE会越来越强。

参考资料

WebAssembly 是什么?

Rust 官方文档中文教程

云原生