从零用 Rust 写浏览器引擎:Tab 如何通过 95% 上游 Web 测试?
原创从零用 Rust 写浏览器引擎:Tab 如何通过 95% 上游 Web 测试?
一个从零写的浏览器引擎,能通过多少上游测试?Tab 给出的数字是 92.8%。在 2026 年 10 月 26 日测量的 Build 0.1.2681 上,它通过了 1,774,103 / 1,912,797 个测试 来源:gettab.dev。原文标题写的是 95%,正文合计是 92.8%,我没法替你解释这个差距,只能说测试是全量跑、按行算,只有 PASS 才计为通过 来源:gettab.dev。测试结果:一个 Rust 引擎如何通过 92.8% 的上游 Web 测试
五个套件分得清清楚楚。Test262 覆盖 JavaScript 规范,97.85%,95,931 / 98,040。WPT testharness 覆盖 DOM 和 Web API 行为,92.06%,1,459,574 / 1,585,538。WPT rendering 覆盖绘制和布局,88.98%,27,483 / 30,888。WPT remaining compatibility 覆盖剩余的兼容性行为,87.91%,52,494 / 59,710。WebAssembly 规范测试全绿,138,621 / 138,621 来源:gettab.dev。
这些数字的意义不在绝对值。一个引擎如果下面垫着 Chromium 或 WebKit,跑这些测试等于开卷考试。Tab 不依赖任何现成底层,引擎是新的,测试驱动,按规范修 来源:gettab.dev。所谓完成,由 web 自己的测试套件决定,不是开发者拍脑袋 来源:gettab.dev。
AI 驱动的开发模式:一人架构,Claude 与 GPT 写大部分代码
整个引擎是一位开发者负责架构、搭测试管线、逐条核查结果,碰到站不住脚的地方直接指出。AI 代理,主要是 Claude 和 GPT,写了大部分代码 来源:gettab.dev。这种分工听起来离谱。可测试套件是客观标准,谁写代码不那么重要,重要的是对每个结果负责的人只有一位。
负责的人只有一位。他要把每个测试失败都过一遍,判断是引擎的错还是测试本身有问题,然后把不成立的地方剔出去。原文截图未经编辑,引擎画的页面就是测试所测的页面 来源:gettab.dev。这一句我读了两遍才明白分量。测试数据不是合成出来的,是真实跑出来的。
我没有这种开发经验,无法判断一个人加 AI 写出的引擎长期维护起来会不会出问题。但就测试通过率而言,这个组合把 92.8% 这个数字跑出来了,至少说明这条路在工程上走得通。
安全权衡:Rust 消除约 70% 内存安全漏洞,逻辑漏洞仍是硬骨头
Chromium 自己统计,约 70% 的严重安全漏洞是内存安全漏洞 来源:gettab.dev。用 Rust 写 Tab,这一大块基本从桌面上拿掉。剩下约 30% 是逻辑漏洞,被描述成“哪个站点可以读取什么,以及何时读取”来源:gettab.dev。这部分是真正的工程工作,需要和 Chromium 逐请求对比测试,每一次请求都记录在案 来源:gettab.dev。
已经就位的安全功能列了一串。跨域检查覆盖 fetch、XHR、重定向和预检。Cookie 遵循 HttpOnly 和 SameSite,跨 frame 和重定向都算。跨域图片、字体、iframe 不能通过 canvas、元素捕获或 Location 泄漏。单站点缓存响应绝不给另一个站点。Referrer Policy、Mixed Content 阻止、Upgrade Insecure Requests、Subresource Integrity、Trusted Types 来源:gettab.dev。
还没做的也明明白白。没有操作系统沙箱,浏览器以单进程运行;CSP 只部分强制;没有独立安全审查 来源:gettab.dev。到 2026 年 10 月 26 日,记录在案 34 项安全发现,26 项完全修复 来源:gettab.dev。安全这个东西,语言只能解决一部分,剩下的是协议和边界问题,急不来。
测试套件间的交叉验证:Wasm 全绿、JS 近满、渲染兼容是短板
把五个套件放一起看,能看出这个引擎的强项和弱项。WebAssembly 规范测试 100%,说明这块没有缺漏 来源:gettab.dev。Test262 97.85%,接近完全符合 ECMAScript 规范 来源:gettab.dev。
弱项也清晰。WPT rendering 88.98%,低于 testharness 的 92.06%,更低于 Test262 的 97.85% 来源:gettab.dev。WPT remaining compatibility 87.91%,和 rendering 差不多 来源:gettab.dev。三个 WPT 套件之间的差距交叉印证了同一个判断。JS 内核强,渲染和兼容层是瓶颈 来源:gettab.dev。
这些数据和原文“测试驱动、规范修复”的承诺互相印证 来源:gettab.dev。测试套件告诉你哪里缺,修的时候对着规范补,然后重新跑。92.8% 这个数字本身没到完美,但一个从零写的引擎跑到这里,说明这条路能走通。
原文:
Tab: A from-scratch Rust browser engine passing 95% of upstream web tests · 来源:Hacker News
作者:itfan123 值班编辑 · 发布于 2026年11月3日
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123




