AI软件下载
有趣网站推荐及实用软件下载

开发一次,四个平台原生运行:Exact 想做的 AI 原生跨平台应用运行时

项目是什么

Exact 是一个跨平台应用运行时,来自 GitHub 仓库 expo/exact,主要使用 Rust 编写,采用 MIT 许可证。它的核心主张很直接:写一次应用,让它在 Web、macOS、iOS 和 Linux 上原生运行,并且让 AI 编码代理也能在每一个平台上构建、运行、查看和测试它。Android 和 Windows 目前处于早期推进阶段,应用能够构建并运行,但仍有缺失项。

它不是把网页塞进 WebView 的混合方案。按项目 README 的描述,Exact 没有 WebView,UI 层也没有 JavaScript 桥;首帧渲染之前不会执行应用 JavaScript。这一点是理解整个项目的起点。

它解决什么问题

Exact 面对的是跨平台应用开发中几个反复出现的矛盾:同一套界面要在不同平台运行,但各平台的控件、排版和交互习惯并不相同;AI 代理可以写代码,却很难真正“看见”和“操作”应用来验证结果;开发反馈循环一旦跨平台就变慢。Exact 的应对方式是把界面描述、数据逻辑和宿主渲染拆开,再给代理提供一套统一的操作接口。

核心组成与工作原理

Exact 把应用分成几层:

  • Contract:一种小型声明式语言,用来描述界面。编译器通过语法、类型、分析和 lowering 四个阶段把它变成紧凑的“计划”(plan)。构建时还会把常量数据“烘焙”进计划,使首帧不需要额外请求。
  • Runner:计划的虚拟机,负责带 key 的组件实例、事件、基于可寻址时钟的定时器,以及数据接缝。
  • Kernel:基于列式节点 arena 的布局内核,通过修改过的 Taffy 实现 CSS 布局。Apple 平台用 CoreText 测量文本,Linux 用 cosmic-text。Web 端则由浏览器自己完成同一套 CSS 布局,因此 Web 构建不携带布局引擎。
  • Hosts:负责呈现组件树。Web 宿主写 DOM 节点,由浏览器执行 CSS 过渡;Apple 宿主是带 C ABI 的静态库,分别对接 AppKit 和 UIKit;Linux 宿主自行绘制,可输出到 DRM/KMS 并处理 evdev 输入,也可渲染到离屏缓冲区。
  • 数据源:TypeScript 在原生宿主上跑在 Hermes 上,在 Web 上跑在浏览器自己的引擎里;Rust 原生运行,也可以热替换为共享库,或在 iOS 和 Web 上以 Wasm 形式替换。所有返回值都会按 Contract 声明的形状校验。网络、文件、SQLite 和密钥等能力由 Grants 控制。

可选项被拆成独立产物,按需加载,包括 wgpu GPU 模块、原生模块和游戏引擎扩展。项目强调“只为用到的部分付费”,GPU 渲染、Markdown 编辑器、文本流和浏览器 SQLite 都不是核心 crate 的特性开关。

面向 AI 代理的设计

Exact 明确假设大量代码会由 AI 代理编写。它提供十个统一操作:tree、screenshot、tap、type、state、layout、logs、clock、prefer、perf,通过 scripts/agent.mjs 驱动 Web、macOS、iOS(模拟器或真机)和 Linux。项目特意把数量控制在十个,避免像前代那样不断膨胀成几十个接口。

一个有意思的细节是时钟归代理控制:两次操作之间画面不动,代理不需要靠 sleep 等待动画结束,而是直接推进时钟或让时钟稳定,再读取结果。测试被写成这些操作的脚本,app.test.contract 文件可以在任意宿主上原样运行。此外,contract build --json 输出带稳定 ID 和源码范围的诊断信息,contract symbols 提供导航,开发源码映射能把屏幕上的节点指回声明它的代码行。

使用方式与运行环境

README 给出的快速开始步骤是在 macOS Apple Silicon 上验证过的。基本流程是:安装工具后运行一次 bun scripts/exact.mjs setup,用 bun scripts/exact.mjs new 创建应用,然后阅读 docs/start-here.md;如果做网站,则读 docs/start-here-site.md。项目称这份指南是唯一必读的文档。

工具链方面,需要 Rust(通过 rustup,固定版本在 rust-toolchain.toml 中)、Bun 1.4.2、Google Chrome(代理通过无头 Chrome 驱动 Web)、以及 macOS 上的 Xcode 27.1 或更新版本。Node 和 npm 不需要。Linux 也能跑 Web 循环、Linux 宿主和 iOS 交叉编译;Windows 上做 iOS 构建需要 WSL 2 加 Ubuntu 24.04。TypeScript 应用在原生宿主上还需要 Hermes,项目使用 Ibex 固定并校验过的发布包,普通 Cargo 构建保持离线。

这些环境要求比较具体,项目也提供了 setup --check 来检查配置。由于项目处于 pre-1.0 阶段,安装细节可能变化,建议以仓库中最新的 Quick start 为准。

性能目标的定位

README 列出了一些预算指标,例如冷启动到可交互首帧 100 ms p50、开发重启从编辑到呈现 100 ms p50、首帧前执行的应用 JavaScript 为零、修改一行后重建对应 crate 在 30 秒内、以及单 crate 编辑后的阻塞门禁在 30 秒内。项目还提到在 RealWorld(“Conduit”)基准上,Exact 的运行时比 React SSR 构建完成 hydration 早约 300 ms,代码量为 26 KB,对比 React 的 81 KB。这些是项目自己给出的目标和对比数据,应理解为项目声明,而非独立第三方评测。

目前可用与尚缺的部分

按 README,Web、macOS、iOS 和 Linux 是当前的主要目标平台,Android 和 Windows 仍处于早期。项目明确说明自己是 pre-1.0、每天变化,不承诺 API 稳定、向后兼容或迁移指南,这是有意为之。仓库 exact2 是对更早仓库(“exact1”)的重建,旧设计文档只作为研究材料,不作为权威依据。

设计记录放在一个私有的编号文档仓库 expo/exact-llp 中,有权限的人会把它克隆到 llp/ 目录;公开文档则在 docs/ 下。README 会用编号引用这些设计文档(如 LLP 1115 D7),普通读者不必依赖它们来理解项目。

适合谁关注

Exact 适合正在评估跨平台应用运行时的开发者、对 AI 代理参与应用开发流程感兴趣的人,以及愿意接受快速变化、pre-1.0 项目的早期使用者。它不适合需要稳定 API、完整迁移路径或成熟生态的生产项目。若你只关心传统 Web 开发,这个项目的原生宿主和 Contract 语言会带来额外的学习成本;若你的痛点正是“代理写完看不到结果”或“跨平台 UI 验证太慢”,它的十个统一操作和可寻址时钟值得进一步了解。

项目主页

https://github.com/expo/exact

项目地址:exact


AI软件用不了?2元爽玩4090: 立即体验>>

热门大语言模型API免费体验: 立即获取>>

软件催更及1对1人工答疑支持: https://nuowa.net/1806
赞(0) 打赏
软件无法使用?点击查看常见问题说明>>

最近更新

觉得文章对你有帮助就打赏一下作者

非常感谢你的打赏,我将有更多的动力继续提供优质内容,让我们一起创建更加美好的世界!

支付宝扫一扫

微信扫一扫