Perry:把TypeScript编译成原生二进制,一套代码。所有平台原生性能。

发布时间:2026/8/1 6:30:48
Perry:把TypeScript编译成原生二进制,一套代码。所有平台原生性能。 引言TypeScript 的运行时困境TypeScript 已成为前端和 Node.js 生态的事实标准全球超过500 万开发者在使用据 2025 年 Stack Overflow 开发者调查。然而TypeScript 的运行始终依赖外部运行时——Node.js、Bun 或浏览器引擎。这意味着即使是最简单的脚本也需要部署整个运行时环境带来数百 MB 的体积开销和不可忽视的启动延迟。随着边缘计算、桌面应用和嵌入式场景的兴起开发者迫切需要一种能直接产出原生二进制的方式。Deno 和 Bun 在运行时层面做了创新但真正将 TypeScript 编译为原生可执行文件的工具仍然稀缺。Perry 正是填补这一空白的答案。1. 项目背景及简介PerryPerryTS/perry是一个用Rust 编写的原生 TypeScript 编译器。它直接将 TypeScript 源码编译为原生可执行文件——不需要 Node.js、Electron 或任何浏览器引擎产出的是快速、小巧、可在任何平台独立运行的二进制文件。一句话概括Write TypeScript, ship native binaries.当前版本v0.5.152| 语言Rust| 许可证开源2. 目标客户全栈/后端 TypeScript 开发者希望部署独立二进制无需打包 Node.js 运行时桌面应用开发者替代 Electron用 TypeScript 写出 MB 级别的原生应用游戏/图形开发者使用 Bloom Engine基于 Perry用 TypeScript 编写跨平台游戏边缘计算/IoT 场景资源受限环境需要极小体积、极低内存占用的运行时CLI 工具开发者希望分发单个可执行文件用户无需安装任何依赖3. 平台定位Perry 的定位是TypeScript 的原生编译基础设施。它不是另一个运行时如 Deno/Bun而是编译器——将 TypeScript 静态编译为机器码彻底消除运行时依赖。愿景让 TypeScript 成为一门可以编写系统级程序的语言而不只是 Web 和服务器脚本。4. 平台技术前端编译器基于 SWC 进行 TypeScript 解析和转译代码生成后端LLVMv0.5.0 从 Cranelift 切换负责原生机器码生成语言实现Rust保证编译器本身的性能和安全性核心优化标量替换不逃逸对象分解为寄存器字段、内联 bump 分配器、fast-math 自动向量化、i32/i64 特化5. 平台核心功能原生编译perry compile src/main.ts -o myapp→ 单个独立二进制多平台支持macOSarm64/x64、Linuxx64/arm64, glibc/musl、Windowsx64ES 模块 npm 包支持支持标准 ESM 导入和 npm 生态fastify、express、mysql2 等极小体积Hello World 仅 ~330KB完整 stdlib 应用 ~48MB按需链接自动检测程序使用的运行时部分只链接需要的代码可选 V8 嵌入--enable-js-runtime可嵌入 V8 引擎15MB用于需要动态 eval 的场景6. 平台独特优势性能碾压闭包调用31 倍快于 Node.js方法分发11 倍阶乘19 倍与编译型语言竞争8 项跨语言基准中领先 5 项与 Rust/C/Go/Swift 同台竞技编译时间友好LLVM 仅增加 20-50ms主要耗时在 SWC 解析和链接真实项目验证Bloom Engine游戏引擎、MangoMongoDB GUI~7MB、HoneAI 代码编辑器零运行时依赖编译产物是独立二进制无需目标机器安装任何环境7. 平台安装使用安装# 项目内安装推荐 npm install perryts/perry # 全局安装 npm install -g perryts/perry # macOS Homebrew brew install perryts/perry/perry # 零安装直接运行 npx -y perryts/perry compile src/main.ts -o myapp快速开始# 初始化项目 perry init my-project cd my-project # 编译为原生二进制 perry compile src/main.ts -o myapp ./myapp # 编译并一步运行 perry run .真实示例API 服务器// src/main.ts import fastify fromfastify; import { getUsers, getUserById } from./routes/users; const app fastify(); app.get(/api/users, async () { return getUsers(); }); app.get(/api/users/:id, async (request) { const { id } request.params as { id: string }; return getUserById(parseInt(id)); }); app.listen({ port: 3000 }, () { console.log(Server running on port 3000); });perry compile src/main.ts -o my-api ./my-api # 产出独立二进制运行时无需 node_modules8. 应用场景及案例说明桌面应用替代 ElectronMangoMongoDB GUI仅 ~7MB、100MB 内存、冷启动亚秒级游戏开发Bloom Engine 支持 Metal/DirectX 12/Vulkan用 TypeScript 编写跨平台游戏后端 APIFastify/Express/NestJS 等框架均可编译为原生二进制部署CLI 工具分发单个可执行文件用户无需安装 Node.js边缘计算/IoT极小体积和低内存占用AI 工具Hone 是基于 Perry 的 AI 原生代码编辑器全平台支持总结Perry 代表了一种全新的思路TypeScript 不应该被绑定在运行时上。通过 Rust SWC LLVM 的技术栈它实现了将 TypeScript 编译为原生可执行文件的目标在性能、体积和启动速度上全面超越传统运行时方案。虽然项目仍处于早期阶段v0.5.x但已有多个真实应用验证了其可行性。如果你正在寻找一种用 TypeScript 编写原生程序的方式Perry 值得重点关注。项目地址https://github.com/PerryTS/perry