返回对比页
TypeScript 运行时

Perry 对比 Deno

Deno 是一个建立在 V8 之上的现代 JavaScript 与 TypeScript 运行时,原生支持 TypeScript,采用基于权限的安全模型,并提供 `deno compile` 命令——通过把 V8 与应用一起打包来生成单个可执行文件。Perry 则把 TypeScript 直接编译为原生机器码——产物里没有 V8、没有运行时层,只有一个小型的原生二进制。

什么是 Deno?

Deno 是一个用 Rust 编写、构建于 V8 与 Tokio 之上的 TypeScript/JavaScript 运行时。它直接执行 `.ts` 源码,内置工具(格式化器、linter、测试运行器、语言服务器),并采用权限模型——网络、文件和环境访问都需要显式授权。`deno compile` 通过把 Deno 运行时(其中包含 V8)与你的代码一起打包,生成自包含的可执行文件。Deno 面向 Linux、macOS 和 Windows 上的 x64 与 arm64。

什么是 Perry?

Perry 是一个用 Rust 编写的原生 TypeScript 编译器。它通过 LLVM 把 TypeScript 直接编译为原生机器码——没有 V8、没有 JIT、没有运行时。产物是单个二进制,原生代码通常为几百 KB 到几 MB;如果选择启用嵌入式 V8 运行时以兼容需要 JS 引擎的 npm 包,体积会更大。

并排对比

特性PerryDeno
产物原生机器码(LLVM)你的代码 + Deno 运行时(V8)打包在一起
二进制中的 JavaScript 引擎默认无;可选 V8始终内置 V8
hello world 二进制大小约 330 KB约 80–100 MB(包含 V8)
JIT无(AOT 编译)有(V8 TurboFan)
移动平台目标iOS、iPadOS、Android不支持
Watch / TV / WASM / WebwatchOS、tvOS、Wear OS、WASM、Web/JS不支持
原生 UI通过原生平台 API 提供 25+ 个组件不支持
权限模型标准操作系统进程权限细粒度运行时权限(--allow-net、--allow-read 等)
稳定性Pre-1.0稳定(1.x / 2.x)
实现语言RustRust(基于 V8)

Perry 胜出之处

  • +二进制显著更小。Perry 的 hello world 约 330 KB。`deno compile` 的产物包含 V8,落在 80–100 MB 区间。
  • +二进制中没有 JavaScript 引擎。你的 TypeScript 被编译为原生机器码,而不是在运行时由 V8 解释执行。
  • +支持移动、手表、TV、WASM 和 Web 目标。Deno 仅限服务端/桌面。
  • +可映射到 AppKit、UIKit、GTK4、Win32 和 JNI 的原生 UI 组件——这是 Deno 没有的。
  • +更快的冷启动。AOT 编译的原生二进制不需要支付 V8 的启动开销。
  • +在 M1 Max 上以匹配条件运行时,由于 Perry 的 `reassoc contract` 快速数学默认值允许 LLVM 进行自动向量化并折叠可平凡折叠的累加器,因此在计算微基准上处于领先(例如 loop_overhead 12 ms、math_intensive 14 ms;见 perry/benchmarks)。

Deno 胜出之处

  • +成熟、稳定、长期运营的运行时,2.x 线积极活跃。
  • +细粒度权限模型。Deno 要求显式 `--allow-net`、`--allow-read` 等——对沙箱脚本和不受信任代码很有用。
  • +内置工具:格式化器、linter、测试运行器、文档生成器、LSP 全部集成在运行时中。
  • +运行时上的完整 V8 生态——能在 V8 上跑的都能跑在 Deno 上,包括长时间运行热路径上的 JIT 优化。
  • +开发期对 TypeScript 的一等支持,无需独立的编译步骤,并提供完全托管的类型检查管道。
  • +在运行时原生实现的标准化 Web 平台 API(fetch、Web Streams、Web Crypto)。

何时选择 Perry

如果你想要一个体积小、启动快的原生二进制,要交付到移动或其他非服务端目标,要原生 UI,或希望编译出来的 TypeScript 二进制里没有 JS 引擎,就选 Perry。

何时选择 Deno

如果你想要一个稳定、自带电池的 TypeScript 运行时,看重权限沙箱,正在构建服务端或脚本类负载,或需要运行时层面的完整 V8 生态兼容,就选 Deno。

结论

两者都让你把 TypeScript 程序作为单个二进制交付;区别在于这个二进制里装的是什么。Deno 给你的是 V8 + 一套精心打磨的运行时 + 权限沙箱。Perry 给你的是不带任何引擎的原生机器码。在生态和权限模型重要的服务端与脚本类工作上,Deno 更合适;当你需要小体积、快冷启动的二进制、移动端目标或原生 UI 时,Perry 更合适。

试用 Perry

今天就把你的 TypeScript 编译为原生代码。

开始使用