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

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

这两年 Rust 正在快速占领前端基础设施领域,Webpack、Babel、Prettier 这些热门工具都已有了 Rust 替代方案,且性能有着 10~100 倍的提升。亚马逊和 FaceBook 都认可它是其系统中 C/C ++ 的最佳替代品,微软更是认为 Rust 作为工业级的开发语言,在云的基础设施领域应该是首选。Figma、Dropbox 也已经在客户端中使用 Rust。甚至有说法:任何能够用 Rust 实现的应用系统,最终都必将用 Rust 实现。

在今年的 StackOverflow 开发者调查中,Rust 连续 7 年成为最受开发者喜欢的语言。但是 Rust 并不止于此,在相关领域有更多的应用,让我们先看看 Rust 在相关领域的应用,再来关注为什么大家都不约而同的选择了 Rust。


Rust 在相关领域的应用

1、前端基础设施领域

  • SWC: (Speedy Web Compiler) 基于 Rust 的前端构建工具,可以理解为 Rust 版本的 Babel,但是性能有 10 倍提升。目前被 Next.js、Deno 使用。
  • Tauri:Tauri 是目前最流行的 Electron 替代方案,通过使用 Rust 和 Webview2 成功解决了 Electron 的包体积大和内存占用高的问题。具体可以参见底部参考文章,微软为什么最终放弃了 Electron。相信 Atom 团队也是看到了 Tauri 的成功,才决定基于 Rust 去做 Zed 编辑器。
  • Rome:可以理解为 Babel 作者的新作品,Rome 旨在取代许多现有的 JavaScript 工具,集代码检测、打包、编译、测试等功能于一身。
  • Parcel:零配置构建工具,特点是快速编译和不需要配置

2、数据可视化领域

  • Wgpu:是 WebGPU API 标准的 Rust 实现。WebGPU 是由 W3C 发布的规范,目标是让网页代码能安全可靠地访问 GPU 功能。其实现方式借鉴了 Vulkan API,会翻译到宿主硬件所用的各式 API(如 DirectX、Metal、Vulkan 等)上执行。
  • Bevy:基于 Rust 语言开发,数据驱动的游戏引擎。同时支持 2D 和 3D 图形渲染,以及图可视化的渲染。
  • Cube.js: cube.js 是开源的 BI 分析工具框架,其中的 Cube Store 用于分析查询的性能优化以及通过跨数据库连接的数据联合等附加功能,就是由 Rust 来实现的。

Rust 的高性能以及与 WebAssembly 结合,是非常适合用在需要大数据量处理的数据可视化领域的。

3、Rust 和 Node 生态

  • Deno:Deno 是一个简单、先进且安全的 JavaScript 和 TypeScript 运行时环境,其基于 V8 引擎并采用 Rust 编程语言构建。
  • Napi-rs:用 Rust 和 N-API 开发高性能 Node.js 扩展,可以替代之前用 C++ 开发的 Node.js 扩展

4、Web3 领域

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

使用 Rust 创建更强大的 DApp(分布式应用),它可以减少许多常见的错误,使 DApp 在发布后按预期运行。Rust 的性能优势和安全性,使得 Rust 成为 Web3 应用程序的理想选择。其中币安的撮合引擎就是以 Rust 作为主语言,Solana 社区更是有很多基于 Rust 开发的 DApp。

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

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


Rust 的优势

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

Rust 帮助开发者开发节约内存的快速软件。它是同样关注代码安全、简洁语法的 C++ 或者 C 的一种现代的替换选择。

Rust 和 JavaScript 非常不一样。JavaScript 会去找到不用的变量和对象,然后自动清除它们。这个机制叫做垃圾回收,Rust 希望开发者自己去规划手动的内存管理。

1、高性能

所有程序都必须管理其运行时使用计算机内存的方式。一些语言(比如:JavaScript)中具有垃圾回收机制,在程序运行时不断地寻找不再使用的内存,在另一些语言中,程序员必须亲自分配和释放内存。

Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。如果违反了任何这些规则,程序都不能编译。正是这种内存管理机制,使得 Rust 有惊人的内存利用率。

let s1 = String::from("hello");
let s2 = s1;   // s2 借用了 s1, s1 不再有效
println!("{}, world!", s1); // 这里 Rust 会报错,s1 是无效的引用


2、可靠性

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

  • 内存安全:通常内存不安全的情况包含:空指针、野指针、悬空指针、使用未初始化的指针、非法释放、缓冲区溢出、执行非法函数指针、数据竞争等。Rust 通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查,如果违反了任何这些规则,程序都不能编译。
  • 线程安全:线程安全是程序设计中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。Rust 通过一整套基础设施和类型检查,强迫这些线程问题暴露在编译阶段,相比花费大量时间尝试重现运行时并发 bug 出现的特定情况,Rust 会拒绝编译不正确的代码并提供解释问题的错误信息。


Rust 陡峭的学习曲线



Rust 有一个陡峭的学习曲线,这也是目前 Rust 在大规模使用中面临的困难。很多朋友会开玩笑说 Rust 入门并不难,我已经入门亿次了。

网上流传的一个段子,很形象的讲述了 Rust 的技术复杂度。

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

图为 Rust 的学习曲线:


image.png

随着前端基础设施逐渐被 Rust 化,预估 2 年后,想从事前端基础设施的研发,Rust 将成为必选项,招聘时,也会越来越看重 Rust。

在前端工具的各项对比中,使用 Rust 改造都得到了 10 倍以上的性能提升。

Rust 成为前端研发的基础设施已经是不可阻挡的趋势,可以从现在开始学习,一起吃 Rust 这只螃蟹 🦀️。

附录链接


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
6月前
|
人工智能 JSON 前端开发
有关D2C工具的思考和分享, 提升前端研发效率
有关D2C工具的思考和分享, 提升前端研发效率
291 1
|
6月前
|
监控 前端开发 测试技术
前端研发流程的深入解析:从构思到交付
前端研发流程的深入解析:从构思到交付
150 0
|
1月前
|
Web App开发 前端开发 安全
前端研发链路之测试
本文由前端徐徐撰写,介绍了前端测试的重要性及其主要类型,包括单元测试、E2E测试、覆盖率测试、安全扫描和自动化测试。文章详细讲解了每种测试的工具和应用场景,并提供了选择合适测试策略的建议,帮助开发者提高代码质量和用户体验。
33 3
前端研发链路之测试
|
1月前
|
资源调度 前端开发 JavaScript
前端研发链路之脚手架
本文首发于微信公众号“前端徐徐”。文章介绍了前端开发中脚手架工具的重要性及其工作原理。脚手架工具能够大幅提升开发效率,确保代码质量和项目一致性。文章详细探讨了脚手架的历史、工作原理、常见工具及其优势与潜在问题,并展望了其未来发展方向,帮助开发者更好地理解和应用脚手架工具。
39 4
前端研发链路之脚手架
|
1月前
|
负载均衡 前端开发 JavaScript
前端研发链路之开发
本文首发于微信公众号“前端徐徐”,作者徐徐。文章介绍了前端研发链路中的开发部分,重点探讨了开发服务器(dev-server)、热更新(hot-reload)、数据模拟(mock)和代理(proxy)等关键技术,帮助开发者理解其基本原理和应用场景,提升开发效率和代码质量。
36 2
前端研发链路之开发
|
1月前
|
敏捷开发 前端开发 Devops
前端研发链路之 CI/CD
本文首发于微信公众号“前端徐徐”,作者徐徐介绍了前端研发链路中的CI/CD。文章从CI/CD的背景、意义、运作方式及常用工具等方面进行了详细探讨,帮助读者理解如何在前端开发中有效应用CI/CD,提升开发效率和产品质量。
41 1
前端研发链路之 CI/CD
|
1月前
|
前端开发 JavaScript 编译器
前端研发链路之构建
本文首发于微信公众号“前端徐徐”,作者徐徐探讨了前端研发链路中的构建过程。文章介绍了构建器、JavaScript编译器和CSS编译器的作用及常见工具,详细解析了它们如何协同工作,提高开发效率和项目可维护性。适合前端开发者阅读,帮助理解现代前端构建体系。
18 1
前端研发链路之构建
|
1月前
|
前端开发 JavaScript 测试技术
前端研发链路之代码规范
大家好,我是徐徐。本文将探讨前端研发链路中的代码规范,包括业界流行规范、CSS命名规范和相关工具。通过保持代码整洁和一致性,不仅能提高团队协作效率,还能减少错误,提升开发质量。文中详细对比了几种常见的代码规范和工具,如 Airbnb Style Guide、BEM、Eslint 和 Prettier,并展望了未来代码规范的发展趋势。希望对大家有所帮助。
75 1
前端研发链路之代码规范
|
1月前
|
缓存 资源调度 前端开发
前端研发链路之包管理器
本文首发于微信公众号“前端徐徐”。作者徐徐将探讨前端研发链路中的包管理器,分析 Npm、Yarn 和 Pnpm 的特点与应用场景,帮助开发者选择最适合项目的包管理工具,提升开发效率和项目稳定性。文章涵盖包管理器的基本概念、解决的问题、组成部分及各工具的优缺点对比。
29 2
|
4月前
|
前端开发 开发者
领域驱动使用问题之在图研发平台中,领域驱动设计是如何帮助解决前端开发面临的问题的
领域驱动使用问题之在图研发平台中,领域驱动设计是如何帮助解决前端开发面临的问题的