Perry 编译器现已发布,可以将 TypeScript 代码直接编译为原生可执行文件,彻底摆脱 Node.js、V8 或其他运行时的束缚。单个 perry compile main.ts 即可输出约 2.3MB 的二进制文件,且基准测试显示,在 Apple M1 Max 上其性能可达 Node.js v25 的 18 倍。该项目由 PerryTS 推出,以 MIT 许可证免费提供给开源项目,并提供付费团队方案。
技术架构与关键特性
Perry 的编译管道跳过了传统的 JavaScript 中间表示:前端使用 SWC 解析 TypeScript 源码,后端直接调用 LLVM 生成针对各平台的优化机器码。这种设计使其拥有极快的编译速度和原生性能。框架内置了完整的标准库,实现了 fs、path、crypto、os 等常用 Node.js API,用户无需安装任何依赖即可使用。对于必须引入纯 JavaScript npm 包的项目,可通过 --enable-js-runtime 标志启用 V8 运行时,代价是二进制体积会从 2-5MB 增加到 15-20MB。
Perry 的另一大亮点是跨平台原生 UI 支持。它提供了 25 种以上本地组件(按钮、文本框、表格、 Canvas 等),编译时会根据目标平台映射到对应的原生控件:macOS 使用 AppKit,iOS/iPadOS 使用 UIKit,Android 使用 Views,Linux 使用 GTK4,Windows 使用 Win32,watchOS/tvOS 使用 SwiftUI,同时也支持编译到 WebAssembly 和纯 JavaScript。这意味着开发者可以用一套 TypeScript 代码生成外观、行为均符合平台规范的 GUI 或 CLI 应用,而无需像 Electron 那样捆绑整个浏览器内核。此外,Perry 还引入了编译时插件系统(模块在构建阶段组合,无运行时开销)、真正的操作系统线程(parallelMap / parallelFilter)、以及编译时国际化(30+ 语言,翻译直接嵌入二进制)等高级能力。
对开发者的影响与潜在局限
对于追求启动速度和体积敏感的场景(桌面工具、嵌入式设备、移动端等),Perry 将 TypeScript 的开发者体验与原生应用的性能缝合到了一起。从编译、代码签名到 App Store / Play Store 分发,其提供的 perry publish 命令覆盖了发布全流程,并内置自动化 UI 测试,能显著降低跨平台部署的复杂度。不过,目前 Perry 仍处于 v0.5.279 早期阶段,标准的 npm 生态并不能完全脱离 V8 运行时使用,而启用 V8 运行时又会牺牲一定的体积优势。其 18 倍的性能提升数据也来自特定基准测试,实际项目中的提升幅度可能因代码结构而异。对于 TypeScript 开发者来说,这无疑是一个值得关注的新工具,但将其引入生产项目仍需评估长期维护和生态成熟度。
编注:信源为 Hacker News 转引 Perry 官网,材料为产品特性介绍及性能基准,未涉及社区反馈与长期维护状况,版本为 v0.5.279。