






















Perry 是一个试图把 TypeScript(JavaScript 的超集)直接编译成原生可执行文件的项目,前端用 SWC(一个用 Rust 写的快速 JavaScript/TypeScript 转译器),后端借助 LLVM(常见的编译器基础设施)生成机器码。它在 GitHub 上公开了仓库和展示页,并宣称可以减少甚至不需要传统 runtime。评论者因此把讨论集中到 TypeScript 的动态语义、garbage collector(垃圾回收器)和二进制体积等现实成本上。与此同时,项目的提交节奏和文案风格又让人怀疑大量内容由 AI 生成,使得大家对稳定性和工程成熟度保持戒心。另一些人则把它和 WASM(WebAssembly)路线并列,认为这类项目更像探索性的原型,而不是已经准备好替代 JS runtime 的成熟方案。
不少评论直接质疑“no runtime dependencies”这类宣传。TypeScript 保留动态语义时,通常仍需要 garbage collector(垃圾回收器)和其他运行时支持,不能靠编译一步就消失。有人还指出,如果只是把 JS engine 的 JIT 事情提前到 AOT(ahead-of-time)阶段,本质上并没有摆脱运行时,只是把它藏进了二进制里。另有评论认为,把完整 UI 库静态链接进每个应用后,再说没有 runtime 也有些牵强。
围绕性能的讨论集中在 Perry 用 NaN-boxing 来保留 TypeScript 的动态类型系统这一做法。评论提到其 PERF_ROADMAP 里在图像卷积上比 Zig 慢 1.86x,并把 1.24 billion wasted instructions 归因于 NaN-box 的解包开销,说明保留动态语义确实有成本。另一方则反驳说,关键不在于放弃 TypeScript 语义,而在于做 monomorphization 和其他优化;“三项优化”文件被拿来证明完全可以在不丢语义的情况下继续缩小差距。
也有很多人把注意力放在项目的成熟度上,而不是技术本身。评论指出官网文案很像 AI 生成,GitHub 提交记录里又出现频繁的 AI-powered commits,平均每小时十几次,让人担心代码质量和可维护性。还有人直接把“几百万行 AI 写的 Rust”称为稳定软件的说法视为大胆,配合展示页“goofy”的截图,整体观感更像实验性演示而非经过打磨的产品。
少数评论对这个方向保持开放态度,认为“用 TypeScript 做跨平台原生/字节码输出”本身很有意思。有人把它和 WASM(WebAssembly,一种可移植字节码格式)路线联系起来,觉得真正有价值的可能是 TS-wasm 与 TS-web 之间的接口和互操作,而不一定是完全替代传统编译链。也有人顺带指出,Rust 等语言即便能产出跨平台库,也常常会有较大的二进制体积,所以“体积大”本身未必足以否定这类项目。
NaN-boxing: 一种把动态值编码进 IEEE 754 的 NaN 比特位中的技巧,常用于在运行时保存多种类型。
monomorphization: 根据已知类型把泛型代码专门化生成多个版本,以提升性能并减少动态分发开销。
WASM / WebAssembly: 一种可移植的低级字节码格式,可在浏览器和其他运行环境中执行。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。