Perry 与替代方案对比

Perry 与其他交付 TypeScript 方式的对比:运行时、编译器以及跨平台 UI 框架。诚实、有出处,并在数据存在的地方给出实测数字。

TypeScript 运行时

Perry 对比 Bun

Bun 是用 Zig 编写的一体化 JavaScript/TypeScript 运行时、打包器、包管理器和测试运行器,它也可以通过把自身运行时与你的代码打包来生成单文件可执行程序。Perry 走的是另一条路:通过 LLVM 把 TypeScript 直接编译为原生机器码——二进制中没有 JavaScript 引擎、没有运行时,只有一个体积很小的原生可执行文件。Bun 与 Perry 在 TS 转二进制这一点上有重叠,但在“二进制里是否要带一个 JavaScript 引擎”上意见相左。

TypeScript 运行时

Perry 对比 Deno

Deno 是一个建立在 V8 之上的现代 JavaScript 与 TypeScript 运行时,原生支持 TypeScript,采用基于权限的安全模型,并提供 `deno compile` 命令——通过把 V8 与应用一起打包来生成单个可执行文件。Perry 则把 TypeScript 直接编译为原生机器码——产物里没有 V8、没有运行时层,只有一个小型的原生二进制。

TS 转原生编译器

Perry 对比 Static Hermes

Static Hermes(`shermes`)是 Meta 处于研究阶段的尝试,目标是通过 Hermes 引擎对一类强类型化的 JavaScript/TypeScript 子集进行提前编译,主要面向 React Native。Perry 在同一类思路下押的是另一注——把 TypeScript 编译为原生——但它独立用 Rust 在 LLVM 之上构建,并已交付一个可工作的编译器、25+ 原生 UI 组件以及 10 个编译目标。截至 2026 年 4 月,Perry 自己的基准套件汇报:他们曾尝试把 Static Hermes 当作对照纳入,但发现它无法通过它所测试的标准包管理器干净地安装。

跨平台 UI

Perry 对比 Electron

Electron 让你用 Web 技术(HTML/CSS/JS)构建跨平台桌面应用,方法是把 Chromium 与 Node.js 一起打包进应用。Perry 则把 TypeScript 直接编译为原生机器码,并通过真正的平台组件——AppKit、UIKit、GTK4、Win32、JNI——来渲染 UI。Electron 的卖点是 Web 技术复用;Perry 的卖点是从 TypeScript 出发交付小体积原生二进制 + 原生 UI。

跨平台 UI

Perry 对比 Tauri

Tauri 是一个用于构建跨平台桌面(以及越来越多移动端)应用的框架,后端用 Rust,前端跑在操作系统内置的 webview 中——Windows 上的 WebView2、macOS 上的 WKWebView、Linux 上的 WebKitGTK。因为不打包系统 webview,Tauri 应用比 Electron 小得多。Perry 走的是另一条路:完全不用 webview,不渲染 HTML,只把 TypeScript 编译为驱动真正平台组件的原生机器码。

跨平台 UI

Perry 对比 React Native

React Native 让你写 JavaScript/TypeScript 来驱动 iOS 与 Android 上的原生 UI——UI 组件通过 JS 与原生之间的桥(或在新架构下的 JSI / Fabric 层,概念形态相同)映射到平台组件。Perry 走的是另一条路:TypeScript 被提前编译为原生机器码,原生 UI 是编译后二进制的一部分,而非运行时的桥。