Vite 8.0 正式发布
Vite 8.0 于2026年3月12日正式发布,这是自Vite 2以来最重大的架构变更。
核心变化
- 统一构建工具:Vite 8采用Rolldown作为唯一的、统一的、基于Rust的构建工具,取代了之前esbuild和Rollup的双构建器架构
- 性能提升:构建速度提升10-30倍,同时保持完全的插件兼容性
- 市场表现:Vite目前每周下载量达6500万次
问题背景
早期版本的Vite依赖两个独立的构建工具:
- esbuild:处理开发环境的快速编译(依赖预构建和TypeScript/JSX转换)
- Rollup:处理生产环境的打包、代码分割和优化
这种双构建器方案存在的问题:
- 需要维护两个独立的转换管道和插件系统
- 需要大量粘合代码保持两个管道同步
- 模块处理不一致的边缘情况逐渐累积
Rolldown解决方案
Rolldown的三大设计目标:
- 性能:使用Rust编写,速度比Rollup快10-30倍,达到esbuild性能水平
- 兼容性:支持与Rollup和Vite相同的插件API,大多数现有插件可直接使用
- 高级特性:支持完整打包模式、更灵活的代码分割、模块级持久化缓存和模块联邦
实际性能表现
多家公司报告的生产构建时间改进:
- Linear:从46秒降至6秒
- Ramp:构建时间减少57%
- Mercedes-Benz.io:构建时间减少最多38%
- Beehiiv:构建时间减少64%
其他改进
- 推出了registry.vite.dev:可搜索的Vite、Rolldown和Rollup插件目录
- 提供多语言文档翻译
- 超过1200名贡献者参与Vite核心开发
https://vite.dev/blog/announcing-vite8
如何使用"讲故事"方法将内联汇编融入 Rust
这篇文章讨论了内联汇编在 Rust 抽象机(Abstract Machine)中的语义问题。
核心问题
- Rust 抽象机包含许多实际硬件中不存在的概念(如 provenance、未初始化内存、Tree Borrows 等)
- 当使用内联汇编时,这些抽象概念如何应用成为一个重要问题
- 文中的讨论同样适用于 FFI 调用
为什么内联汇编不能为所欲为?
文章通过一个例子说明:
- 一个函数接收
&i32(共享引用)参数,但通过内联汇编修改了该值 - 编译器优化时假设共享引用不会改变值,导致优化前后程序行为不一致
- 这说明即使使用内联汇编,也必须遵守某些规则,否则会产生未定义行为(UB)
"讲故事"方法
作者提出的解决方案:
- 不需要为汇编代码定义完整的 Tree Borrows 规则(这几乎不可能实现)
- 相反,要求程序员为每个内联汇编块提供一个等效的 Rust 代码"故事"
- 这个"故事代码"必须在纯 Rust 代码可观察的状态方面与汇编代码做相同的事情
- 在推理程序行为时,用这个"故事代码"替代内联汇编块进行分析
实际应用
- 不需要真正编写故事代码,但这样的代码必须在概念上存在
- 通过故事代码可以立即判断内联汇编是否违反了 Rust 的规则
- 例如上述例子中,故事代码会是
(x as *const i32 as *mut i32).write(0),这明显违反了共享引用的规则
https://www.ralfj.de/blog/2026/03/13/inline-asm.html
--
From 日报小组 Mike
社区学习交流平台订阅:
1
共 0 条评论, 1 页
评论区
写评论还没有评论