Google внедряет Pyrefly для более быстрой и точной проверки типов в Python

56 минуты назад 3

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 и содержит фрагменты кода с подстрочными аннотациями, указанием причины сбоя и вариантами исправления.

30+ бесплатных курсов на ИТ‑темы в Академии Selectel

Для начинающих и опытных специалистов.

Изучить →

Влияние на инфраструктуру и скорость работы

По данным внутренних тестов Google, Pyrefly превосходит Pytype по скорости примерно в 10 раз. Задержки при повторной сборке в циклах редактирования кода с активным демоном снизились до 98%. Время проверки типов для крупных моделей машинного обучения уменьшилось с нескольких минут до нескольких секунд. При чистой сборке с холодным кэшированием доля проверки типов на критическом пути сократилась на 90–99%. Пиковое суточное потребление вычислительных мощностей для проверки типов снизилось более чем на 80%, что экономит тысячи процессорных ядер ежедневно.

Источник.

Сравнение с другими анализаторами типов

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

*Компания признана в России экстремистской организацией; деятельность запрещена на территории страны решением Тверского районного суда Москвы от 21 марта 2022 года.

Источник