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