Google переходит на анализатор типов Pyrefly для Python
Google перевел внутреннюю проверку типов Python с собственного инструмента Pytype на Pyrefly — инструмент с открытым исходным кодом, который работает примерно в 10 раз быстрее, сокращает задержку при инкрементальной пересборке до 98% и снижает пиковую нагрузку на вычислительные мощности более чем на 80%.
Как Google использует Python
Python входит в число основных инструментов Google и применяется для исследований в области машинного обучения, разработки инфраструктуры и обработки данных в монорепозитории из сотен тысяч файлов. Для поддержания безопасности кода и скорости работы инженеров компании необходима статическая проверка типов.
Более 10 лет Google использовал собственный инструмент Pytype, разработанный внутри компании и участвовавший в создании проекта typeshed. Программа Pytype проверяла типы путем анализа скомпилированного байт-кода, а не синтаксических деревьев (AST) исходного кода. Нестабильность байт-кода в разных релизах Python усложняла поддержку новых спецификаций языка. В связи с этим компания ограничила поддержку Pytype версией Python 3.12 и перешла на использование открытых альтернативных решений.
Технические характеристики и функциональность Pyrefly
Новым стандартом проверки типов в Google стал open source-инструмент Pyrefly, созданный компанией Meta* на языке Rust. Pyrefly рассчитан на высокую пропускную способность, использует ленивые параллельные вычисления и демонстрирует масштабируемость на крупных графах зависимостей.
По данным Meta*, производительность инструмента позволяет анализировать до 1,8 млн строк кода в секунду. Инструмент проходит 96,6% тестов из официального набора проверки соответствия спецификации типов Python и регулярно обновляется вслед за новыми стандартами языка.

Pytype разрешал передавать значение типа объединения (например, int | None или int | str) в функцию, ожидающую конкретный тип (например, int), если хотя бы один из элементов объединения был с ним совместим. Pyrefly же строго фиксирует такие ошибки:
# foo.py
def process_id(x: int) -> None:
...
def get_id() -> int | None:
...
val = get_id()
# Принято Pytype, но отклонено Pyrefly:
process_id(val)
Диагностика Pyrefly выполнена в стиле компилятора Rust и содержит фрагменты кода с подстрочными аннотациями, указанием причины сбоя и вариантами исправления.
Влияние на инфраструктуру и скорость работы
По данным внутренних тестов Google, Pyrefly превосходит Pytype по скорости примерно в 10 раз. Задержки при повторной сборке в циклах редактирования кода с активным демоном снизились до 98%. Время проверки типов для крупных моделей машинного обучения уменьшилось с нескольких минут до нескольких секунд. При чистой сборке с холодным кэшированием доля проверки типов на критическом пути сократилась на 90–99%. Пиковое суточное потребление вычислительных мощностей для проверки типов снизилось более чем на 80%, что экономит тысячи процессорных ядер ежедневно.

Сравнение с другими анализаторами типов
Meta* перевела Pyrefly в разряд проектов с открытым исходным кодом в 2025 году. В сообществе разработчиков Pyrefly рассматривается как зрелый инструмент версии выше 1.0, сопоставимый по скорости с анализатором Ty. При сравнении с Mypy отмечается, что Mypy сохраняет высокую скорость при инкрементных проверках в крупных проектах, однако новое поколение анализаторов превосходит его по скорости при холодных проверках. При оценке эффективности статических анализаторов учитывается не только экономия времени в системах непрерывной интеграции, но и скорость цикла редактирования кода и точность диагностических сообщений.
*Компания признана в России экстремистской организацией; деятельность запрещена на территории страны решением Тверского районного суда Москвы от 21 марта 2022 года.