Perry 使用 SWC 和 LLVM 直接将 TypeScript 编译为可执行文件

Hacker News Top 产品

摘要

Perry 使用 SWC 和 LLVM 将 TypeScript 直接编译为原生可执行文件,生成无运行时依赖的小型二进制文件,支持所有主流平台和原生 UI 组件。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/05/30 04:23

# Perry — TypeScript 到原生 来源:https://www.perryts.com/ v0.5.306 — 分代垃圾回收 + 默认惰性 JSON 磁带,在大多数基准测试中比 Node 和 Bun 更快 ## 一套代码库。所有平台。原生性能。 Perry 将 TypeScript 编译为 macOS、iPadOS、iOS、Android、Linux、Windows、watchOS、tvOS、WebAssembly 和 Web 上的原生 GUI 和 CLI 应用。无需运行时。无需 Electron。只有原生二进制文件。 开始使用 (https://www.perryts.com/#installation)查看 GitHub (https://github.com/PerryTS/perry) $perry compile main.ts 正在编译 main.ts... ✓ 编译成功:可执行文件 main (2.3 MB) $./main Hello, World! ## 为什么选择 Perry? 将 TypeScript 编译为原生应用所需的一切 ### 无需运行时 生成独立的原生可执行文件。无需 Node.js、无需 V8、无需运行时依赖。只需一个可在任何地方运行的二进制文件。 ### 快速编译 直接 TypeScript 到原生代码编译,使用 SWC 进行解析,LLVM 进行优化代码生成。无需中间 JavaScript。 ### 小巧的二进制文件 输出的二进制文件通常为 2-5 MB。如果为 JS npm 包使用可选的 V8 运行时,则为 15-20 MB。更少的交付,更快的部署。 ### 确定性构建 相同的输入,相同的二进制文件。跨机器、跨 CI 运行、跨团队可重现。没有神秘的重新构建。 ### 全面的标准库 内置的 fs、path、crypto、os、Buffer、child_process 等原生实现。使用熟悉的 Node.js API。 ### 可选的 V8 运行时 需要使用纯 JavaScript npm 包?启用 V8 运行时标志即可获得完整的 npm 生态系统兼容性。 ### 25+ 原生 UI 组件 按钮、文本字段、文本区域、表格、画布、滚动视图、二维码、安全字段、启动画面等——全部编译为通过 AppKit、GTK4、Win32、UIKit 和 JNI 实现的真实平台组件。 ### 编译时插件系统 模块在构建时组合——没有运行时插件开销,没有 IPC 边界。你的依赖在最终二进制文件中成为直接的原生函数调用。 ### 真正的多线程 真正的 OS 线程,支持 parallelMap、parallelFilter 和 spawn。编译时安全性拒绝可变捕获——没有 SharedArrayBuffer、没有 workers,只有线程。 ### 编译时国际化 自动字符串提取,30+ 语言环境的 CLDR 复数规则,编译时验证。翻译内容内置于二进制文件中,运行时查找几乎为零。 ## 在每个平台上都是原生 Perry 将你的 TypeScript 编译为原生 UI 框架、WebAssembly 和 JavaScript——不是 Web 视图,不是 Electron。在每个平台以及 Web 上都是真正的原生组件。 ## 从代码到应用商店 Perry 不仅编译你的应用——还将其送到用户手中。 ### 构建与签名 从一条命令进行跨平台构建。自动处理 macOS、iOS、Android 和 Windows 的代码签名。无需与 Xcode 配置描述文件或 Android 密钥库纠缠。 ### 分发 推送到 App Store、Play Store,或直接提供下载链接。Perry Publish 负责打包、公证和提交。 ### 验证 由 Geisterhand 驱动。在所有 6 个平台上进行自动化 UI 测试。在用户告诉你应用出问题之前,就知道它在各处都能正常工作。 对开源项目免费。团队计划 (https://www.perryts.com/en/publish/)→ /publish 框架对比 ## 唯一一个满足所有条件的框架 TypeScript 编译为原生代码。真正的平台组件。无运行时开销。 框架|语言|原生代码|原生组件|运行时开销 ---|---|---|---|--- Perry★|AOT 编译为原生二进制文件|TypeScript|是|是|无 React Native|JIT / 运行时解释|JS / TypeScript|否|Hermes / V8 + 桥接|有 Flutter|AOT 编译,自定义渲染器|Dart|Dart VM + Skia 引擎| KMP + Compose|Android 上 JVM,iOS 上原生|Kotlin|部分|Kotlin 运行时 + Skia| Swift for Android|原生二进制,无共享 UI|Swift|无共享 UI|Android 上 Swift 运行时| .NET MAUI|通过 Mono 部分 AOT|C#|部分|.NET / Mono 运行时| NativeScript|JS 运行时,原生组件访问|JS / TypeScript|V8 / JavaScriptCore| Ionic|原生包装中的 Web 应用|JS / TypeScript|WebView + Capacitor| ## 编写 TypeScript,交付原生 使用熟悉的 TypeScript 语法和 API。Perry 处理其余部分。 `` // hello.tsconst greeting = "Hello, World!";console.log(greeting);// 编译为 ~2MB 原生可执行文件// 无需运行时! `` ## 性能对比 原生编译带来无与伦比的效率 指标|Perry|Node.js|Bun ---|---|---|--- 二进制大小|2-5 MB|~80 MB|~90 MB 启动时间|~1 ms|~30 ms|~10 ms 运行时依赖|无|Node.js|Bun 内存开销|极小|V8 + GC|JSC + GC ### 基准测试结果:最高快 18 倍 Perry v0.5.279 vs Node.js v25 — RUNS=11 中位数,Apple M1 Max(越小越好) 二进制大小越小越好 ## 开始使用 安装 Perry 并开始将 TypeScript 编译为原生可执行文件 ### 1 安装 `$ brew tap PerryTS/perry` `$ brew install perry` 需要 Homebrew。支持 macOS arm64 和 x86_64。 ### 2 使用 编译一个文件 `perry compile main.ts` 将 main.ts 编译为原生可执行文件 自定义输出 `perry compile main.ts -o myapp` 指定输出可执行文件名 带 V8 运行时 `perry compile main.ts --enable-js-runtime` 启用 V8 以兼容 JavaScript npm 包 检查兼容性 `perry check ./src` 验证 TypeScript 代码是否可用于原生编译 ## 特性支持 全面的 TypeScript 和 Node.js API 覆盖 ### 核心语言 - 数字:64 位浮点数 (f64) - 字符串:UTF-8,所有常用方法 - 布尔值:true/false,逻辑运算符 - 数组:类型化数组和混合类型数组 - 对象:对象字面量和字段访问 - BigInt:256 位整数支持 - 枚举:数字枚举和字符串枚举 ### 函数 - 函数声明:命名函数 - 箭头函数:() => {} 语法 - 默认参数:带默认值的参数 - 剩余参数:...args 语法 - 闭包:包括可变捕获 - 高阶函数:函数作为参数/返回值 - 异步/等待:异步函数支持 ### 类 - 类声明:基本类语法 - 构造函数:带参数 - 私有字段 (#):ES2022 #privateField 语法 - 静态方法/字段:类级成员 - 存取器:get/set - 继承:extends 关键字 - 父构造函数调用:super() 构造函数调用 ### 类型系统 - 类型注解:显式类型声明 - 类型推断:自动类型检测 - 泛型:单态化(类似 Rust) - 接口:接口声明 - 联合类型:string | number 支持 - 类型守卫:typeof 运算符 - 类型别名:type X = ... 声明 ### 标准库 - fs:readFileSync、writeFileSync、existsSync 等 - path:join、dirname、basename、extname、resolve - crypto:randomBytes、randomUUID、sha256、md5 - os:platform、arch、hostname、内存信息 - Buffer:from、alloc、toString、slice、copy - child_process:execSync、spawnSync - JSON/Math/Date:完整实现 ## 30+ 原生 npm 包 受欢迎的 npm 包以原生 Rust 重新实现。无需 npm install、无需 node_modules,只有快速的原生代码。 ### 数据库 mysql2pgmongodbbetter-sqlite3ioredis ### 安全 bcryptargon2jsonwebtokencrypto ### HTTP httphttpsaxiosnode-fetchwsnodemailer ### 数据处理 cheeriosharpzliblodash ### 日期与时间 dayjsmomentdate-fnsnode-cron ### 工具 uuidnanoidslugifyvalidatordotenvrate-limiter-flexible 只需导入并使用——Perry 自动使用原生实现 ## 工作原理 从 TypeScript 源码到原生可执行文件,只需几秒钟 HIR 变换单态化 想了解编译器底层如何工作?编译器内部原理 (https://www.perryts.com/en/internals/)

相似文章

microsoft/TypeScript

GitHub Trending (daily)

TypeScript 是一种用于大规模 JavaScript 应用的语言,它增加了可选类型。该仓库托管了 TypeScript 编译器及相关工具。

tw93/Pake

GitHub Trending (daily)

Pake 是一个命令行工具,使用Rust和Tauri将任意网页转换为原生桌面应用,提供轻量级(约5MB)的macOS、Windows和Linux版本。