有人用 MoonBit 做出逼近浏览器级基础设施了,国产语言真的要起飞了
[图片]
看到最近有人在尝试用 MoonBit 做浏览器,虽然还只是实验品,但 MoonBit 的发展速度真的挺惊人的!看到官网说今年中左右就要推出 1.0 版本了 ,真的推荐大家最近去试用一下 MoonBit
MoonBit: https://www.moonbitlang.com/
下面是结合 AI 关于这个浏览器的介绍 传送门: https://github.com/mizchi/crater
项目介绍
mizchi/crater 不是普通的“布局小玩具”,而是在做一个用 MoonBit 写的、面向浏览器/渲染器方向的 CSS layout engine 基座。 它当前最核心的定位,是根据 HTML/CSS 计算元素布局结果,也就是算出每个节点的 x / y / width / height ,但不负责真正的文本测量、绘制和完整浏览器渲染。README 里直接写了,它专注 layout calculation ,不处理字体加载、真实文本 shaping 、绘制、DOM 操作。 可以把它理解成三层里的中间那层:
- 上层:HTML/DOM/CSS 输入
- 中层:layout engine ,算盒模型、Flexbox 、Grid 、位置尺寸
- 下层:真正绘制到屏幕/Canvas/终端 crater 现在最强的是第 2 层。 仓库 README 直接定义它是:
- A CSS layout engine written in MoonBit
- ported from Taffy
- 目标类似 Yoga ,但支持的 CSS 能力更广,尤其是 Flexbox 和 Grid 作者在文章里也讲得很直白: 他参考了 Yoga 、Taffy 、Stylo 、Blitz 这些现有方案,但目标不是简单绑定现成 Rust/C 实现,而是为了学习和未来可组合性,在 MoonBit 里从头写一套纯实现。 这意味着它的价值不只是“能算布局”,而是:
- 给 MoonBit 提供一个浏览器/渲染器基础设施样板
- 证明 MoonBit 可以承载复杂规范实现
- 为后续 TUI 、轻量浏览器、SSR renderer 、嵌入式 UI runtime 打底
这个项目最强的地方
1 )目标不是 toy demo ,而是对齐真实 Web 标准 这项目最有含金量的地方,不是“支持 Flexbox/Grid”这几个字,而是它在用两类非常硬的测试体系校验自己: 一类是 Taffy compatibility tests 。 README 里写了,当前移植自 Taffy 的布局算法测试通过率大概是:
- Flexbox: 543 / 609 ,89.2%
- Block: 204 / 226 ,90.3%
- Grid: 268 / 331 ,81.0%
- Total: 1015 / 1166 ,87.0% 另一类更关键,是 WPT ( Web Platform Tests )。 README 当前列出的 CSS 相关 WPT 结果非常强,整体是 1477 / 1484 ,99.5%,其中 flexbox 、grid 、display 、box 、sizing 、align 、position 、overflow 、contain 、variables 等模块基本全绿,filter-effects 也到 93.4%。 这个指标很重要,因为 WPT 不是作者自己随手写的单元测试,而是浏览器圈通用的规范一致性测试集合。作者文章里也明确说,项目核心目标之一就是尽量通过 WPT 。 这说明它不是“看起来像浏览器”,而是在往“行为接近真实浏览器”推进。
2 )项目边界清楚,没有假装自己已经是完整浏览器 很多项目的问题是讲得很大,但边界模糊。crater 反而比较干净: 它明确承认自己现在的局限,包括:
- 没有真实字体渲染
- 文本测量是近似的 monospace sizing
- 没有完整 text layout
- baseline alignment 只做了部分实现
- vertical writing mode 支持有限 这很关键。因为浏览器最难的部分之一就是文本排版和字体相关行为。 如果一个项目在这块没做完,却不说清楚,就容易误导别人。crater 这里反而是技术口径比较严谨的。 所以我的判断是: 它现在已经是相当强的 CSS layout engine ,但还不是完整 browser engine 。
3 )它的 ambition 明显不止 layout ,已经在往“MoonBit 浏览器运行时”扩 README 除了 CSS 布局测试,还列了:
- DOM WPT (wpt/dom/nodes):9296 / 9296 ,100%
- WebDriver BiDi 多个套件:100% 而 AGENTS.md 里还把路线写得更明确:
- Milestone 1: Preact Compatibility
- Milestone 2: Playwright Integration 包括 DOM API 覆盖、事件处理、组件生命周期、WebDriver BiDi 协议绑定等。 这说明作者思路不是停在“做一个布局库”,而是继续往下做:
- DOM
- 浏览器自动化协议
- 让前端框架运行起来
- 最终逼近一个可用的轻量 Web runtime 这个方向对 MoonBit 很有代表性。因为它在证明: MoonBit 不只是编译到 JS/WASM 的语言,而是有机会承载更完整的 Web 基础设施。
为什么这个项目对 MoonBit 特别有意义
我觉得它的意义有三层。 第一层:展示 MoonBit 能写“规范密集型系统” CSS layout engine 这种东西,不是 CRUD ,也不是 demo parser 。 它是那种:
- 状态空间大
- edge case 多
- 规范细节极碎
- 一堆行为要和浏览器对齐 这种项目非常考验语言的:
- 类型系统
- 抽象能力
- 可维护性
- 重构安全性
- 测试组织能力 而 crater 当前已经有很多提交,仓库主要语言也几乎都是 MoonBit ,说明它不是“少量核心代码用 MoonBit ,外面靠别的语言撑着”,而是真正以 MoonBit 为主体。 第二层:它给 MoonBit 提供了一个对外好讲的“硬核样板” 很多语言生态对外展示时,项目都偏:
- TodoMVC
- 小游戏
- 算法题
- 通用工具库 这些没法立刻建立“这语言能做硬东西”的认知。 但 layout engine / browser runtime / FreeType / ORM / parser 这种项目,一眼就能让外部开发者理解技术含量。 crater 就属于这类样板。 它的传播价值其实非常高。 第三层:它和 MoonBit 的产品方向有协同 作者文章里提到,目标之一是做到 Yoga alternative ,并为 TUI 的 Ink 替代品 打基础,还会把 JS build 发到 npm 、WASM 模块发到 wa.dev 。 这意味着它天然适合 MoonBit 擅长的几个出口:
- JS
- WASM
- 跨环境 runtime
- 前端/终端渲染基础设施
这个项目现在的短板
也很明显。 1 )离“真实浏览器可替代”还有关键缺口 最主要就是文本和字体。 作者自己也说了,现在很多没做的部分集中在:
- vertical text
- 依赖真实 font rendering 的 baseline
- 更完整的 rendering-dependent behavior 这不是小问题。 浏览器最麻烦的 bug ,很多都和字体、inline layout 、baseline 、文字测量、国际化排版有关。 所以当前更准确的定位是: 高完成度 layout/runtime foundation ,而不是完整 browser engine 。 2 )项目复杂度已经很高,后续维护成本会陡增 仓库规模已经不小,作者自己也提到当前代码量很大,甚至可能是最大的 MoonBit 项目之一。 这种项目一旦进入:
- 更多 WPT 覆盖
- 事件系统
- DOM mutation
- Playwright 兼容
- Preact 生态兼容 维护压力会几何级上升。 尤其是规范跟进和回归测试,会非常吃工程纪律。 3 )生态转化还需要“杀手级落地案例” 现在它的技术演示性很强,但用户真正会问的是:
- 能不能嵌进某个产品里
- 能不能替代 Yoga / Taffy 的部分场景
- 能不能支撑 TUI / SSR / 邮件排版 / PDF / 小型浏览器
- 性能和集成成本怎么样 也就是说,crater 已经有了研究价值和生态象征意义,但要进一步破圈,还需要一个直接可感知的落地产品。
我对这个项目的总体评价
我的评价是: 这是一个“方向非常对、技术含量很高、对 MoonBit 生态有象征意义”的项目。 更具体一点:
- 从工程硬度看,它很强,因为它在啃浏览器标准和 WPT 。
- 从生态价值看,它比普通库高很多,因为它是基础设施。
- 从产品成熟度看,它还处在“非常有潜力的核心引擎”阶段,不该被误说成完整浏览器。 一句话概括就是: crater 的厉害之处,不只是“MoonBit 也能写布局引擎”,而是它已经开始逼近“MoonBit 也能写浏览器级基础设施”这件事。 如果你要对外讲,我建议重点讲这三个点:
- Pure MoonBit 实现的 CSS layout engine
- 对齐 Taffy 与 WPT ,不是玩具 demo
- 目标正在从 layout 扩展到 DOM / Preact / Playwright runtime 如果你要,我可以继续把这版压缩成一段更适合发 X 的短评。
未来展望
展望未来,crater 最值得关注的,不只是它还能补齐多少布局细节,而是它会不会从一个高完成度的 CSS layout engine ,继续成长为一个真正可运行前端框架、可接入自动化工具的轻量 Web runtime 。 从目前的路线来看,这个方向并不遥远。它已经在布局计算之外,持续推进 DOM 能力、WebDriver BiDi 兼容,以及 Preact 和 Playwright 相关集成。这意味着 crater 的下一阶段,重点很可能不再只是“把布局算对”,而是进一步走向“把应用跑起来、把测试接起来、把运行时用起来”。一旦它能稳定承载真实前端框架,它的定位就会发生明显变化:从一个布局引擎,升级为 MoonBit 生态中的 Web 基础设施底座。 再往前看,crater 的上限其实不止于此。当前它最明显的边界仍然在文本、字体和真实渲染层面,这也是它离“更完整浏览器能力”之间最大的缺口。但也正因为如此,它未来的成长空间仍然很大。如果后续 MoonBit 生态中的字体、文本 shaping 、绘制等基础设施逐步成熟,并能与 crater 形成组合,那么它完全有机会从“布局正确”走向“排版完整”,进一步支撑 Canvas UI 、终端界面、文档渲染,甚至更轻量的浏览器容器等方向。 当然,这条路不会轻松。随着项目继续向 DOM 、事件系统、框架兼容、自动化协议推进,复杂度会快速上升,维护成本也会越来越高。真正困难的部分,往往不是大功能本身,而是大量细碎但必须对齐标准的行为实现。因此,crater 未来能走多远,既取决于技术能力,也取决于它能否持续保持工程纪律,并逐步找到清晰的落地场景。 但无论如何,crater 已经展示出一个很重要的信号:MoonBit 并不只适合写工具和小型项目,它同样有能力承载复杂、规范密集、具备长期演进潜力的基础设施工程。如果接下来它能继续完成从 layout engine 到 runtime 的推进,并出现真正可感知的应用案例,那么 crater 很可能会成为 MoonBit 生态中最具代表性的项目之一。 如果你愿意,我也可以继续把这篇整理成一版完整成稿标题 + 导语 + 正文结构。
推广