️前端研发的新基础设施 - Rust ️️

简介: ![](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/neweditor/2c4e1a33-03c3-4abc-8c49-8b2a976e8fb1.jpg)最开始关注到 Rust ️,是因为 Atom 团队放弃维护 Atom,转身投入到一个新的轻量级、更快的编辑器 Zed 的开发,而这个编辑器最大的特点就是将全部基于 Rust 来构建。而为什

最开始关注到 Rust ️,是因为 Atom 团队放弃维护 Atom,转身投入到一个新的轻量级、更快的编辑器 Zed 的开发,而这个编辑器最大的特点就是将全部基于 Rust 来构建。而为什么基于 Rust 来开发可以更快呢,这成功吸引了我的好奇心,也是写这篇文章的原因。

这两年 Rust 正在 JS 基建圈流行:Webpack、Babel、Terser、Prettier、ESLint 这些前些年才流行起来的工具都已有了 Rust 替代方案,且性能有着 10~100 倍的提升。亚马逊和微软都认可它是其系统中 C / C ++的最佳替代品,微软更是认为 Rust 作为工业级的开发语言,像 Figma 和 Discord 这样的公司现在也通过在客户端应用中使用 Rust 来引领潮流。

但是 Rust 并不止于此,在相关领域有更多的应用,让我们先看看 Rust 在相关领域的应用,再来关注为什么大家都不约而同的选择了 Rust。

Rust 在相关领域的应用

Rust 在前端领域的应用

  • Deno:Deno 是一个简单、先进且安全的 JavaScript 和 TypeScript 运行时环境,其基于 V8 引擎并采用 Rust 编程语言构建。
  • Swc: (Speedy Web Compiler) 基于 Rust 的前端构建工具,可以简单理解为 Rust 版的 Rollup 或 Webpack
  • Parcel:零配置构建工具
  • Rome:可以理解为 Babel 作者的新作品,代替 Babel
  • 还有 dprint(Prettier 的重写)、Postcss-rs (Postcss 的重写)

Rust 在桌面领域的应用

  • Tauri:Tauri 是 Electron 的代替品,现在 Tauri 试图去除 Chromium 转而使用 Rust 去和系统内置 Webview 进行绑定,简单来说就是在 Electon 时代你的应用永远使用 Chromium 内核,而在 Tauri 时代,你的应用在 Windows 上使用 Edge/Webview2,在 macOS 上使用 WebKit,在 Linux 上使用 WebKitGTK。基于 Rust 和 Webview 的好处很明显:包体积极小且内存占用极低,同时性能有很大提升

Rust 与 WebAssembly 结合的应用

  • Yew: Yew 是一个设计先进的 Rust 框架,目的是使用 WebAssembly 来创建多线程的前端 web 应用。
  • wasm-bindgen: Rust 与 JS 的结合

Rust 和 Node 的绑定

  • NAPI-RS:用 Rust 和 N-API 开发高性能 Node.js 扩展,可以替代之前用 C++ 开发的 Node.js 扩展

Web3 领域

由于 Web3 协议在处理数千万个不可信输入时需要快速且强大的性能,Rust 具有明显的优势。它以闪电般的速度处理功能复杂的任务,同时还减少了与内存、边界、空变量、初始化变量或整数溢出相关的错误。

Rust 具有一定的学习难度,但仍有很多开发人员去学习。使用 Rust 可以创建更强大的 dApp,它可以减少许多常见的错误,使dApp 在发布后按预期运行。它的并发能力正是每秒处理数万甚至数十万笔交易所需要的,这使得 Rust 成为 Web3 应用程序和虚拟世界交易的理想选择。

Rust 作为汽车软件主语言探索

Rust 的硬实时性和完美的内存机制,同样适合汽车场景的软件开发,在 RustChinaConf 上就有国汽智控关于 Rust 在汽车软件开发的探索分享。

Rust 的优势

drawing

早在 2015 年,一名前 Mozilla 员工就首次发布了 Rust,它是一种专注于安全和性能的多范式编程语言,其构建考虑到了速度和效率,这意味着它可以提供零成本的抽象、继承和功能特性。

Rust 帮助开发者开发节约内存的快速软件。它是同样关注代码安全、简洁语法的 C++ 或者 C 的一种现代的替换选择。
Rust 和 JavaScript 非常不一样。JavaScript 会去找到不用的变量和对象,然后自动清除它们。这个机制叫做垃圾回收(Garbage Collection)。Rust 则希望开发者自己去规划手动的内存管理。

性能好

  • 开发者自己分配和销毁: 比如 C、C++ 等,这种方式相当于把所有权力开放给开发者,管理不当容易内存泄漏。
  • 编程语言提供自动垃圾回收机制: 比如 JavaScript、Java、Python 等,这种方式会产生运行时开销,对性能可能产生影响(注意这里是“可能”,没有办法证明性能一定比开发者自己管理要差)。

Rust 则另辟蹊径采用所有权、借用、生命周期机制在编译期自动插入内存释放逻辑来实现内存管理,由于没有了垃圾回收产生的运行时开销,Rust 整体表现的速度惊人且内存利用率极高。

fn main() {
   let a = String::from("hello rust");
   let b = a;           // 所有权被转移
   println!("{}", a);  // 编译失败!a 已经被释放,无法再使用
}

可靠性

  • 内存安全: 在具有内存安全性的编程语言中,所有内存访问都是明确定义的,通常内存不安全的情况包含:空指针、野指针、悬空指针、使用未初始化的指针、非法释放、缓冲区溢出、执行非法函数指针、数据竞争等。(据说微软 70% 的漏洞是内存安全问题)。 所有程序都必须管理其运行时使用计算机内存的方式。一些语言中具有垃圾回收机制,在程序运行时不断地寻找不再使用的内存;在另一些语言中,程序员必须亲自分配和释放内存。Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。如果违反了任何这些规则,程序都不能编译。在运行时,所有权系统的任何功能都不会减慢程序。
  • 线程安全: 线程安全是程序设计中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。

Rust 陡峭的学习曲线

Rust 有一个陡峭的学习曲线,它的抽象程度比大多数 Web 开发者所习惯的要低。这也是目前 Rust 在大规模使用中面临的困难。
网上流传的一个段子,很形象的讲述了 Rust 的技术复杂度。

小王是一个大型项目下的C++ 工程师,今天他上班 trigger了一个全量编译便回家了,明天再来。
小张是一个深度神经网络的 Python 工程师,今天他上班改了一个参数开始训练便回家了,三天后再来。
小李是一名资深的 Rust 工程师,今天他上班只花了一小时就完成了需求的开发。
然后连续加班了三个晚上才使得编译通过。

图为 Rust 的学习曲线:

随着前端基础设施逐渐 Rust 化,预估如果 2年后,想从事前端基础设施的研发,Rust 将成为必选项。在前端工具的各项对比中,使用 Rust 改造都得到了 10-100 倍的性能提升。

Rust 成为前端研发的基础设施已经是不可阻挡的趋势,现在正是开始着手学习的时候,早一些吃螃蟹 ️

附录

相关文章
|
4天前
|
人工智能 JSON 前端开发
有关D2C工具的思考和分享, 提升前端研发效率
有关D2C工具的思考和分享, 提升前端研发效率
77 1
|
4天前
|
监控 前端开发 测试技术
前端研发流程的深入解析:从构思到交付
前端研发流程的深入解析:从构思到交付
72 0
|
5月前
|
缓存 监控 前端开发
前端研发流程的深入解析:从构思到交付
前端研发流程的深入解析:从构思到交付
135 1
|
11月前
|
前端开发
前端学习笔记202304学习笔记第八天-产品研发流程-1
前端学习笔记202304学习笔记第八天-产品研发流程-1
36 0
|
12月前
|
前端开发 Devops API
前端利器躬行记(8)——VSCode插件研发
前端利器躬行记(8)——VSCode插件研发
|
移动开发 缓存 监控
基于 Serverless 的大前端轻研发平台
基于 Serverless 的大前端轻研发平台
189 0
|
敏捷开发 前端开发 Serverless
Serverless 架构在前端应用领域的价值——新一代的 web 研发范式
Serverless 架构在前端应用领域的价值——新一代的 web 研发范式自制脑图 介绍了研发阶段:按需的动态化,部署阶段:动静态部署分离,上线交付阶段:交付优先,极致体验,持续集成:敏捷开发,迭代快速。
445 0
Serverless 架构在前端应用领域的价值——新一代的 web 研发范式
|
存储 弹性计算 运维
serverless 学习 | QCon2022-深圳: 美团基于 Serverless 的前端研发体系建设和业务实践
serverless 学习 | QCon2022-深圳: 美团基于 Serverless 的前端研发体系建设和业务实践
228 0
serverless 学习 | QCon2022-深圳: 美团基于 Serverless 的前端研发体系建设和业务实践
|
前端开发 Serverless
《基于 Serverless 的淘系前端研发升级实践》电子版地址
基于 Serverless 的淘系前端研发升级实践
75 0
《基于 Serverless 的淘系前端研发升级实践》电子版地址
|
人工智能 前端开发 算法
研发提效:通过设计稿自动生成前端代码
做过前端的同学可能知道,很多页面的业务逻辑简单且具有一致性。写起来并不会增加技术能力,就是比较费时间。而设计稿生成代码的目的就是为提高前端同学的研发效率,少写代码甚至不写代码。
465 0
研发提效:通过设计稿自动生成前端代码