< 返回版块

Mike Tang 发表于 2026-03-14 10:45

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的三大设计目标:

  1. 性能:使用Rust编写,速度比Rollup快10-30倍,达到esbuild性能水平
  2. 兼容性:支持与Rollup和Vite相同的插件API,大多数现有插件可直接使用
  3. 高级特性:支持完整打包模式、更灵活的代码分割、模块级持久化缓存和模块联邦

实际性能表现

多家公司报告的生产构建时间改进:

  • 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 页