跳至内容

简介

我们正处在 JavaScript 的第三个时代,目前的普遍趋势是出于性能提升方面的考虑,使用 Rust 或 Go 开发 JavaScript 工具。

然而,开发 JavaScript 工具极具挑战性,更不用说在 Rust 中编写它们了。在学习这些技术时我遇到了很多困难,我希望以后能有更少的人经历同样的痛苦。

我想通过编写这份指南来为社区贡献自己的力量,这样你就不必像我一样经历同样的旅程。

Rust 方面的开发人员只有少数,我希望能见到你并加入我们,这样我们就能为所有人开发出更好更快的工具。

概览

本指南将采用标准编译器前端阶段

Source Text --> Lexer --> Token --> Parser --> AST

编写 JavaScript 解析器相当容易,其中 10% 是架构决策,90% 是细致入微的艰苦工作。

架构决策主要会影响两个方面

  • 我们解析器的性能
  • 消费我们的 AST 的顺畅程度

在 Rust 中构建解析器之前了解所有选项和权衡利弊,将使我们的整个旅程更加顺畅。

性能

执行 Rust 程序的关键在于减少内存分配减少 CPU 周期

从堆分配的对象中查找VecBoxString 等,可以非常清楚地看出内存分配的位置。了解它们的用法将帮助我们认识到程序的速度——分配越多,程序运行越慢。

Rust 提供了零成本抽象能力,因此无需过分担心抽象会导致性能下降。小心算法复杂度,所有问题都会迎刃而解。

信息

您还应该阅读Rust 性能手册

Rust 源代码

每当函数调用的性能无法推断时,都不要害怕在 Rust 文档中单击“源代码”按钮并阅读源代码,它们在大多数情况下很容易理解。

信息

在浏览 Rust 源代码时,只需查找fn function_namestruct struct_nameenum enum_name 等即可轻松搜索定义。这是 Rust 中语法固定的优势之一(与 JavaScript 相比 😉)。

根据 MIT 许可证发布。