Expo 团队推出了 Exact,这是一个跨平台应用程序运行时,允许单一的界面描述在 Web、macOS、iOS 和 Linux 上原生运行。与许多依赖 WebView 或 JavaScript 桥接的现有框架不同,Exact 使用一种称为 Contract 的自定义声明式语言来编译一个“计划”(plan),该计划由 Rust 运行时和布局内核执行。这种架构旨在消除跨平台开发的摩擦,同时优先考虑性能和 AI 驱动的工作流。

文章描述了 Exact 如何使单一界面描述在包括 iOS 在内的各种平台上原生运行。
Contract 语言与执行模型
Exact 的核心是 Contract,这是一种用于描述应用程序界面的小型声明式语言。Contract 编译器通过四个阶段——语法、类型、分析和降低(lowering)——处理此输入,生成包含表格和字节码的“计划”。
此计划是所有宿主机的单一事实来源。在 Web 上,该计划变成一个驱动真实 DOM 的 ES 模块。在原生平台上,Rust 运行时执行该计划,同时布局内核(Taffy)根据 CSS 规则计算每个框。随后,每个平台使用其自身的原生工具绘制结果,例如 macOS 上的 AppKit 或 iOS 上的 UIKit。

文章解释了 Exact 使用 Rust 运行时和布局内核来驱动 macOS 的 AppKit 等平台特定工具。
“Exact 假设大部分代码将由 AI Agent 编写。”
— GitHub - expo/exact
Agent 原生设计与性能
Exact 的构建基于“大部分代码将由 AI Agent 编写”的假设。为了促进这一目标,该框架提供了十个特定的操作——如 tree、screenshot、tap 和 clock——允许 Agent 操作应用程序并在无需人工干预的情况下证明其功能。其中“clock”操作尤为显著,因为它允许 Agent 前进时间或等待“settle”状态,从而消除自动化测试中的时序波动。
速度是该项目的首要工程约束。团队追踪冷启动和开发重启的预算,目标是达到 100ms p50。为了实现这一目标,启动路径不进行任何编译;TypeScript 在构建时编译为 Hermes 字节码,且仅在渲染出第一个像素后加载。此外,Markdown 编辑器或 GPU 渲染等重型组件是独立的产物,仅在按需时加载。
HN Digest 绘制的图表(源自 github.com 报告的数字;数值按原文显示)。
开发循环与局限性
开发工作流倾向于将 Web 作为主要的迭代循环。开发者可以在 Web 版本上工作,由浏览器处理布局和 CSS,而原生宿主则“隐藏”在幕后。该框架通过检查原生布局与 Chrome 渲染结果的一致性来确保视觉一致性,并声明任何不可避免的偏差。

文章指出开发者可以在 Web 版本上工作作为主要的迭代循环。
由于 Exact 目前处于 1.0 版本之前,它缺乏 API 稳定性、向后兼容性或迁移指南。该项目处于快速的每日变化状态,这意味着对于寻求将其用于生产就绪应用的开发者来说,当前的实现是一个不断变动的目标。
Hacker News 读者的反应
- 技术补充: 一位评论者指出,虽然该项目雄心勃勃,但框架让 Agent 控制 UI 时序的能力是确保正确交互的关键技术障碍。 评论 ↗
- 质疑: 另一位用户对减少软件臃肿表示乐观,但提出担忧,认为该框架的成功可能高度依赖于用于编写代码的 AI 模型的具体能力。 评论 ↗
以上为 Hacker News 讨论中观点的摘要,并非经过核实的事实。 阅读完整讨论 ↗