Pyrefly 与 ty:比较 Python 的两个基于 Rust 的新类型检查器

主要观点:

  • 本月有两个基于 Rust 的 Python 类型检查器 pyrefly 和 ty 引起关注,虽未正式发布,但为 Python 类型检查领域带来变化。
  • pyrefly 是 Meta 基于 Rust 的新 Python 类型检查器,希望比之前的 Pyre 更快、更便携、更强大,且强调真正开源;ty 由 Astral 开发,之前名为 Red-Knot,现正式名为 ty,相对较低调。
  • 两者相似点:都用 Rust 编写、增量式(实现方式不同)、由 Ruff 提供 AST 解析支持、都支持命令行类型检查和 LSP/IDE 集成。不同点主要在速度、目标、增量式和能力四个方面。
  • 速度测试方面,pyrefly 称比 Pyre 快 35 倍、比 Mypy/Pyright 快 14 倍,ty 称比当前类型检查器快 1 - 2 个数量级,在 PyTorch、Django、Mypy 等测试中,ty 比 pyrefly 快 2 - 3 倍,比 Mypy 和 Pyright 快 10 - 20 倍,但两者都处于早期 Alpha 阶段,结果可能有偏差。
  • 目标方面,pyrefly 尽可能积极地进行类型推断,ty 遵循渐进保证原则,即良好类型的程序中删除类型注释不应导致类型错误。
  • 增量式方面,pyrefly 使用自定义增量引擎,ty 使用 Salsa 框架,ty 具有细粒度增量式,pyrefly 是模块级增量式。
  • 能力方面,pyrefly 的隐式类型推断是亮点,但在某些情况下 ty 的“渐进保证”更符合 Python 特性;pyrefly 注重基础架构如泛型等,与 ty 都在某些泛型解析上有优势和不足;ty 的错误消息更清晰简洁,还支持交集和否定类型等新范式,但仍处于早期 Alpha 阶段,存在一些问题。

关键信息:

  • pyrefly:Meta 基于 Rust 的新 Python 类型检查器,强调开源,比 Pyre 快,注重隐式类型推断和基础架构。
  • ty:Astral 开发的 Rust 基于 Python 类型检查器,低调,遵循渐进保证原则,错误消息清晰,支持交集和否定类型。
  • 速度测试结果:ty 在多个测试中比 pyrefly 快,比 Mypy 和 Pyright 快很多,但两者都在早期阶段。
  • 目标差异:pyrefly 积极推断类型,ty 遵循渐进保证。
  • 增量式差异:pyrefly 模块级,ty 细粒度。
  • 能力特点:pyrefly 隐式类型推断,ty 交集和否定类型等,都有泛型解析问题和错误消息改进。

重要细节:

  • 测试使用的版本:pyrefly 0.17.0、ty 0.0.1-alpha.7 (afb20f6fe 2025 - 05 - 26)、mypy 1.15.0 (compiled: yes)、pyright 1.1.401。
  • 测试示例及代码展示了两者在不同情况下的类型推断和行为差异。
  • 提到 Google 计划开源自己的 Go 基于 Python 类型检查器。
  • pyrefly 可在[pyrefly.org/sandbox]尝试,ty 可在[play.ty.dev]尝试,都有相应安装命令和编辑器插件。
阅读 14
0 条评论