Python

Ty:Astral 用 Rust 写的极速 Python 类型检查器

Ty 是来自 Astral 的极速 Python 类型检查器和语言服务器,比 mypy 和 pyright 快 10-60 倍,使用 Rust 编写。

Keeping this site alive takes effort — your support means everything.
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分! 無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!
Ty:Astral 用 Rust 写的极速 Python 类型检查器

Python 的类型检查生态系统长期以来由 mypy 主导——它是率先为 Python 引入渐进类型的类型检查器。但 mypy 基于 Python 的实现一直在大型代码库的性能上苦苦挣扎。Ty 是 Astral 对这个问题的解答:一个完全用 Rust 编写的 Python 类型检查器和语言服务器,设计上比现有替代方案快 10 到 60 倍。

Astral,也就是广受欢迎的 Ruff 检查器背后的公司,将同样的 Rust 驱动性能哲学应用到了类型检查领域。Ty 建立在 Astral 在 Rust 中处理 Python 工具的深厚经验之上,利用了使 Ruff 成为 Python 检查业界标准的相同多线程架构和增量计算模式。

数字说明了一切。在拥有数十万行 Python 代码的大型单仓库中,Ty 在几秒钟内完成初始类型检查,而不是几分钟。文件变更后的增量检查几乎是即时的,使得即使在最大的项目中,也能在每次保存文件时执行类型检查。对于那些忍受了 mypy 数分钟检查时间的开发者来说,Ty 代表了开发体验的变革性改进。


Ty 如何实现如此戏剧性的速度提升?

Ty 的性能优势来自架构决策和实现选择的组合,而非任何单一优化。

graph LR
    A[Python 源文件] --> B[并行文件发现]
    B --> C[用 Rust 进行 AST 解析]
    C --> D[Salsa 增量引擎]
    D --> E{缓存命中?}
    E -->|是| F[重用缓存的类型信息]
    E -->|否| G[类型推断与检查]
    G --> H[存储在增量数据库中]
    F --> I[收集诊断信息]
    H --> I
    I --> J[输出结果]

基于 Salsa 的增量计算引擎是 Ty 性能的关键。它以细粒度追踪文件和类型定义之间的依赖关系。当文件变更时,只有依赖于变更部分的计算会被重新执行,而不是重新检查整个项目。这与 Rust 编译器的增量编译系统使用了相同的方法。


Ty 与其他 Python 类型检查器相比如何?

Python 类型检查领域有几个成熟的参与者,各有不同的性能特性和功能集。

功能Tymypypyrightpyrepytype
语言RustPythonTypeScriptOCamlPython
速度快 10-60 倍基准线比 mypy 快 5-10 倍中等
LSP 服务器内置分离内置分离分离
PEP 695 支持部分部分
插件系统计划中广泛有限最少最少
单仓库支持原生通过配置通过配置原生基本
配置pyproject.tomlmypy.ini、setup.cfgpyproject.toml自定义配置setup.cfg

Ty 在 Rust 中的全新设计使其能够采用最新的 Python 类型系统功能,而不受遗留兼容性限制的束缚。其内置的 LSP 服务器消除了单独设置语言服务器的需求,提供了统一的工具链体验。


Ty 支持哪些类型系统功能?

Ty 目标是全面涵盖 Python 不断演进类型系统,包括既有和新兴的功能。

功能状态PEP 参考
基本类型注解完成PEP 484
泛型类型完成PEP 484、PEP 695
联合类型 (X | Y)完成PEP 604
Protocols(结构子类型)完成PEP 544
TypedDict完成PEP 589
Literal 类型完成PEP 586
TypeVarTuple / ParamSpec完成PEP 646、PEP 612
类型缩小完成
重载装饰器完成PEP 484
Self 类型完成PEP 673
TypeIs(类型缩小)完成PEP 742
TypedDict 替代方案完成PEP 728
Python 3.14 类型功能计划中最新 PEP

Ty 紧密追踪最新的 PEP 发展,目标是在新类型功能被接受后不久即提供支持。这种快速采用周期确保使用最新 Python 版本的项目能够在类型检查器的完整支持下受益于现代类型系统功能。


Ty 如何与编辑器工作流程集成?

Ty 的内置 LSP 服务器在所有主要编辑器和 IDE 中提供无缝的开发体验。

编辑器/IDE集成方式主要 LSP 功能
VS CodeLSP 扩展实时诊断、自动完成
Neovim内置 LSP 客户端内联错误、悬停、跳转到定义
JetBrainsLSP 插件完整 IDE 集成
Helix内置 LSP自动设置
Sublime TextLSP 插件诊断、自动完成
Emacseglot/lsp-mode完整 LSP 支持

LSP 服务器在您输入时提供实时诊断、尊重类型限制的自动完成、具有类型感知导航的跳转到定义和查找引用、包含推断类型的悬停信息,以及附带建议修复的内联错误消息。


FAQ

什么是 Ty? Ty 是 Astral 用 Rust 编写的 Python 类型检查器和语言服务器,设计上比 mypy 和 pyright 等现有工具快 10-60 倍。它提供实时类型检查与 IDE 集成。

Ty 相较于 mypy 如何达到如此快的速度? Ty 使用 Rust 编写,采用多线程架构,包含增量编译、AST 缓存和并行文件分析。它使用基于 Salsa 的增量计算模型独立处理文件。

Ty 是否完整支持 Python 类型注解? Ty 目标是近乎完整地支持 Python 类型系统,包括泛型、重载、Protocols、TypedDicts、Literal 类型以及最新的 PEP 规范。它追踪 PEP 695(类型参数语法)及后续标准。

Ty 能否在现有项目中取代 mypy? 可以,Ty 设计为直接替代品。它支持 mypy 兼容的配置,可以集成到现有的 CI/CD 管道和编辑器工作流程中。许多项目只需更改类型检查命令即可切换。

Ty 是否包含语言服务器协议实现? 是的,Ty 包含一个内置的 LSP 服务器,可在任何兼容 LSP 的编辑器中提供实时类型检查、自动完成、跳转到定义、查找引用、悬停信息和内联错误诊断。


延伸阅读

TAG
CATEGORIES