博客

关于使用 Perry 构建原生应用的新闻、教程和深度解析。

GCperformanceLLVMdebuggingarchitecture

为原生 TypeScript 编译器构建 GC:决策、意外与当前进展

Perry 使用 LLVM 将 TypeScript 编译为原生代码,因此它需要真正的垃圾回收器。本文介绍我们做出的决策、不留下任何证据的错误、在结构上根本不可能失败的 CI 门禁,以及与 Node 和采用引用计数的 AOT 竞争者相比的最新数据。

compilerGCdebuggingNode.js paritymilestone

编译 Claude Code:一个压缩包,160 个编译器修复

我们把 Perry 对准了 npm 为 Claude Code 发布的那份 13 MB 压缩过的 cli.js,试着把它变成一个原生二进制文件。一个月后,它能启动、登录、流式接收真实的 API 响应,并把你键入的内容绘制出来——期间有 160 个 pull request 落地进了 Perry,从一个空操作的 MessageChannel,到 RegExp 头部缺失的 GC 写屏障。

watchOSApp StoreiOShow-to

Shipping a Watch-Only App to the App Store (When Nothing Else Will)

Every documented way to upload a standalone watchOS app to the App Store fails — altool, iTMSTransporter, xcodebuild, even Xcode 26's Organizer all refuse the watchOS platform. Here's the undocumented workaround that works and keeps arm64_32 for older watches: an ITSWatchOnlyContainer iOS stub, uploaded with iTMSTransporter.

npmtest262Windowswidgetsmilestone

真实的 npm 包现在能编译了:axios、zod、express —— 以及一次一致性扫尾

从 v0.5.875 到 v0.5.1146 的约 270 个版本不是关于某一个基准 —— 它们是关于让真实的 npm 包能编译并运行。axios、zod v4、express、fastify 和 hono 现在都能用了;test262 等同性跃升(String 60→79%,Array 61→72%);Windows 借助 Mica 走向 Fluent;DatePicker 与拖放在每个平台落地。

GCperformancebenchmarkscommunity

aya_koto 的基准测试教给我们关于 Perry GC 的什么

一位读者在 AtCoder ABC451D 上对 Perry 做了基准测试,测得它比 Bun 慢 3.85 倍。此后一个无声的 regression 已经把差距拉大到了 6.59 倍。修复不在我们预期的位置,它暴露的那个有意为之的 GC 取舍是真实的,而 Perry v0.5.875 现在在同一个 bench 上与 Bun 打成平手:425 ms 对 431 ms。

updaterdevtoolsrefactorcommunitymilestone

自动更新、实时 Inspector,以及把自己砍掉一半的编译器

Perry v0.5.306 → v0.5.359 用了四天 — 53 个补丁版本、约 30 个 issue 关闭,以及三件大事落地:面向桌面的 perry/updater 自动更新、localhost:7676 上的实时 inspector,以及把四个最大文件削减 33–91% 的编译器重构。

GCJSONperformancebenchmarksmilestone

分代 GC、惰性 JSON,以及经得起推敲的基准

Perry 在三天内从 v0.5.174 升级到 v0.5.306,外加并行落地的 GC 与 JSON 工作。分代 GC 成为默认。Small String Optimization 成为默认。JSON 流水线获得惰性 tape,validate-and-roundtrip 中位数落在 75 毫秒——动态类型运行时阵营中的最佳。基准页面以 RUNS=11 中位数 + p95 + σ 重写,simdjson 与 AssemblyScript+json-as 加入对照,Perry 的每一处弱点都被诚实地摆上台面。

npmdeveloper-experienceperformancewatch-modemilestone

npm 分发、perry dev,以及在每一项基准上取胜

Perry 在六天内从 v0.5.80 升级到 v0.5.174。@perryts/perry 在 npm 上为全部七个受支持的平台发布。perry dev 在内存 AST 缓存和磁盘上每模块 object 缓存之上加入了 watch 模式的自动重编译。json_roundtrip 关闭了最后一道缺口——Perry 现在在每一项基准上同时击败 Node.js 和 Bun。

performancellvmJSONGCservermilestone

优化一切:一周、68 个版本,以及 547 倍的 JSON 加速

Perry 在七天内从 v0.5.13 升级到 v0.5.80。JSON.parse 将与 Node 的差距从 547 倍缩小。mimalloc 成为全局分配器。内联缓存、shape 转换、类型化 Buffer 槽、i32 原生位运算、标量替换,以及一个让 Fastify 和 WebSocket 服务器保持运行的原生事件循环。

compilersllvmcraneliftperformancemilestone

从 Cranelift 到 LLVM:Perry 如何变快 24 倍

Perry 从 Cranelift 到 LLVM 的后端迁移已完成。初始切换使基准测试慢了 70 倍——随后六项针对性优化使 Perry 在 15 项基准测试中赢得 14 项,最高加速达 24.6 倍。

tvOScross-compilationbillingWindowsmilestone

tvOS、从 Linux 交叉编译 iOS 和 Perry Login

Perry v0.4.24:tvOS 作为第 10 个编译目标,通过 ld64.lld 从 Linux 交叉编译 iOS 和 macOS,perry login 支持按量计费,Windows UI 改版,macOS 公证,5 天内 120 次提交。

threadingi18nwatchOScompilermilestone

真正的多线程、编译时 i18n 和 watchOS

Perry v0.4.0:具有编译时安全性的真正操作系统线程、支持 30 多种语言环境的零仪式国际化系统、watchOS 作为第 9 个编译目标、音频和摄像头 API,以及并行编译器流水线。

compilercross-compilationinfrastructuremilestone

交叉编译到 Windows、iOS 游戏循环和 100% 测试对等

一周 103 次提交:通过 lld-link 从 Linux 交叉编译到 Windows、iOS 游戏循环支持、崩溃报告、两阶段 Hub 构建流水线,以及自托管编译器达到 68/68 确定性测试对等。

distributiondocumentationWidgetKitmilestone

完整流水线:文档、分发和 WidgetKit

一周 82 次提交:49 页的文档站点、自动化 App Store 和 Play Store 发布、Homebrew 和 APT 软件包、从 TypeScript 创建的原生 WidgetKit 扩展、新组件、http/https 模块,以及自托管 LLVM 编译器。

ecosystemperry/uidatabasesinfrastructuremilestone

从编译器到生态系统:React、数据库和云构建

Perry 从编译器成长为完整的生态系统。perry/ui 作为核心,兼容 Prisma 的 MySQL/PostgreSQL/SQLite ORM,通用推送通知,带 App Store 发布的分布式构建,以及 React 兼容层——全部在一周内完成。

UIcross-platformreleasemilestone

全部六个平台,功能完全对等

20 多个原生 UI 组件、Canvas 组件、Table 视图、系统通知、钥匙串访问、多窗口支持,以及 macOS、iOS、iPadOS、Android、Linux 和 Windows 的完全功能对等——全部来自一套 TypeScript 代码。

architectureperformancecompiler

插件系统是一种性能税

插件架构以性能换取可扩展性。但如果可扩展性发生在编译时而非运行时呢?编译时组合两者兼得——零开销,完全灵活。

compilerframeworksprogress

将 Hono、tRPC 和 Strapi 编译为原生二进制文件

Perry 现在可以将三个主要 TypeScript 框架——Hono、tRPC 和 Strapi——编译为原生 ARM64 可执行文件。编译不到一秒,生成不到 2 MB 的二进制文件,运行零崩溃。

tutorialshowcasePry

构建 Pry:用 TypeScript 编写的原生 JSON 查看器

A walkthrough of building Pry, a native JSON viewer compiled from TypeScript to machine code with the Perry runtime and GC linked in and no webview.

architectureUIcross-platform

从 TypeScript 到跨平台原生 UI

How Perry maps one TypeScript codebase to platform widgets across its documented targets, including the platform-specific limitations and prerequisites.

announcementcompilerTypeScript

Perry 介绍

Perry compiles supported TypeScript to standalone native executables with its runtime and GC linked in, without requiring an external Node.js installation or JavaScript engine.