作者 | Sergio De Simone
譯者 | 劉雅夢(mèng)
策劃 | 丁曉昀
目前處于 alpha 階段的 Pyrefly 是 Meta 開發(fā)的一款新的開源 Python 類型檢查器,其使用 Rust 編寫,以實(shí)現(xiàn)最佳性能高性能磁鐵 。Pyrefly 的靈感來(lái)自于 Pyre、Pyright 和 MyPy 等工具,旨在取代之前用于 Instagram 代碼庫(kù)的基于 OCaml 的 Pyre 類型檢查器。
我們構(gòu)建了 一個(gè)自定義的增量計(jì)算引擎,并基于多年的漸進(jìn)類型理論經(jīng)驗(yàn)和 Rust 專業(yè)知識(shí)設(shè)計(jì)了我們的類型檢查算法高性能磁鐵 。通過(guò)開源這項(xiàng)技術(shù),我們希望它能夠更好地服務(wù)于任何規(guī)模的項(xiàng)目。
根據(jù) Meta 工程師的說(shuō)法,開發(fā) Pyrefly 的主要?jiǎng)訖C(jī)是需要支持響應(yīng)式的 IDE 類型檢查,隨著 Instagram 類型系統(tǒng)的復(fù)雜性的增加,使用 Pyre 來(lái)實(shí)現(xiàn)這一點(diǎn)變得越來(lái)越困難了高性能磁鐵 。
我們探索了替代解決方案,并利用 Pyright 等社區(qū)工具進(jìn)行了代碼導(dǎo)航高性能磁鐵 。但是,由于需要一個(gè)可擴(kuò)展的類型檢查器來(lái)進(jìn)行代碼導(dǎo)航、大規(guī)模檢查和向其他服務(wù)導(dǎo)出類型,我們不得不重新開始,于是創(chuàng)建了 Pyrefly。
Pyrefly 是為高性能而設(shè)計(jì)的,并使用 Rust 實(shí)現(xiàn),以最大限度地提高效率高性能磁鐵 。根據(jù) Meta 的說(shuō)法,它可以在大型代碼庫(kù)上每秒檢查 180 萬(wàn)行代碼,從而使得在每次按鍵點(diǎn)擊時(shí)進(jìn)行類型檢查成為可能。
Meta 的基準(zhǔn)測(cè)試顯示,Pyrefly 可以在 13.4 秒內(nèi)完成對(duì)整個(gè) Instagram 代碼庫(kù)的類型檢查,而 Pyre 需要 100 多秒高性能磁鐵 。類似地,Pyrefly 只需要 2.4 秒即可完成對(duì) PyTorch 的類型檢查,而 Pyright 需要 35.2 秒,MyPy 需要 48.1 秒。
除了性能之外,Meta 選擇使用 Rust 來(lái)構(gòu)建 Pyrefly,還因?yàn)樗陌踩浴⒖缙脚_(tái)支持以及能夠編譯成 WebAssembly 的能力,這使得基于瀏覽器的 游樂場(chǎng)(Playground)體驗(yàn) 成為可能高性能磁鐵 。
除了對(duì)帶注解的 Python 代碼庫(kù)進(jìn)行類型檢查之外,Pyrefly 還致力于對(duì)未帶注解的代碼也有用高性能磁鐵 。為此,它可以自動(dòng)推斷返回值和局部變量的類型,允許開發(fā)人員根據(jù)需要顯式地將推斷的類型插入到他們的代碼中。
Meta 已經(jīng)發(fā)布了 Pyrefly 的 alpha 版本,因?yàn)榇嬖陂_放的缺陷并且一些功能正在開發(fā)中,但其計(jì)劃在今年夏天進(jìn)入 beta 階段高性能磁鐵 。Visual Studio Code 擴(kuò)展已經(jīng)可以在 Visual Studio Marketplace 中找到了。
Pyrefly 并不是唯一一個(gè)用 Rust 編寫的 Python 類型檢查器高性能磁鐵 。專門從事開發(fā)者工具的公司 Astral 最近推出了 Ty 的預(yù)覽版。Ty使用一個(gè)手寫的 Python 解析器,用 Rust 編寫,并基于 Python 的官方規(guī)范。如果你想嘗試一下,它還提供了一個(gè)游樂場(chǎng)(playground)。Astral 開發(fā)的其他工具還包括 Ruff 代碼檢查器和 uv 包管理器,它們也都是用 Rust 編寫的。