免费注册!6月19-20日,「亚马逊云科技中国峰会」重磅来袭! 了解详情
写点什么

Meta 开源 Pyrefly,Rust 中的高性能 Python 类型检查器

  • 2025-05-29
    北京
  • 本文字数:989 字

    阅读完需:约 3 分钟

大小:474.23K时长:02:41
Meta开源Pyrefly,Rust中的高性能Python类型检查器

目前处于 alpha 阶段的PyreflyMeta开发的一款新的开源 Python 类型检查器,其使用 Rust 编写,以实现最佳性能。Pyrefly 的灵感来自于Pyre、Pyright 和 MyPy 等工具,旨在取代之前用于 Instagram 代码库的基于 OCaml 的 Pyre 类型检查器。

 

我们构建了一个自定义的增量计算引擎,并基于多年的渐进类型理论经验和 Rust 专业知识设计了我们的类型检查算法。通过开源这项技术,我们希望它能够更好地服务于任何规模的项目。

 

根据 Meta 工程师的说法,开发 Pyrefly 的主要动机是需要支持响应式的 IDE 类型检查,随着 Instagram 类型系统的复杂性的增加,使用 Pyre 来实现这一点变得越来越困难了。

 

我们探索了替代解决方案,并利用 Pyright 等社区工具进行了代码导航。但是,由于需要一个可扩展的类型检查器来进行代码导航、大规模检查和向其他服务导出类型,我们不得不重新开始,于是创建了 Pyrefly。

 

Pyrefly 是为高性能而设计的,并使用 Rust 实现,以最大限度地提高效率。根据 Meta 的说法,它可以在大型代码库上每秒检查 180 万行代码,从而使得在每次按键点击时进行类型检查成为可能。

 

Meta 的基准测试显示,Pyrefly 可以在 13.4 秒内完成对整个 Instagram 代码库的类型检查,而 Pyre 需要 100 多秒。类似地,Pyrefly 只需要 2.4 秒即可完成对 PyTorch 的类型检查,而 Pyright 需要 35.2 秒,MyPy 需要 48.1 秒。

 

除了性能之外,Meta 选择使用 Rust 来构建 Pyrefly,还因为它的安全性、跨平台支持以及能够编译成 WebAssembly 的能力,这使得基于浏览器的游乐场(Playground)体验成为可能。

 

除了对带注解的 Python 代码库进行类型检查之外,Pyrefly 还致力于对未带注解的代码也有用。为此,它可以自动推断返回值和局部变量的类型,允许开发人员根据需要显式地将推断的类型插入到他们的代码中。

 

Meta 已经发布了 Pyrefly 的 alpha 版本,因为存在开放的缺陷并且一些功能正在开发中,但其计划在今年夏天进入 beta 阶段。Visual Studio Code扩展已经可以在 Visual Studio Marketplace 中找到了。

 

Pyrefly 并不是唯一一个用 Rust 编写的 Python 类型检查器。专门从事开发者工具的公司 Astral 最近推出了Ty的预览版。Ty使用一个手写的Python解析器,用 Rust 编写,并基于 Python 的官方规范。如果你想尝试一下,它还提供了一个游乐场(playground)。Astral 开发的其他工具还包括Ruff代码检查器和uv包管理器,它们也都是用 Rust 编写的。

 

原文链接:

https://www.infoq.com/news/2025/05/meta-pyrefly-python-typechecker/

2025-05-29 16:001

评论

发布
暂无评论

【愚公系列】2022年10月 Go教学课程 029-面向对象简介

愚公搬代码

10月月更

网络协议与传输媒体

急需上岸的小谢

10月月更

我用【c++】写出了会说话的学生考勤系统

贤鱼很忙

c++ 10月月更

JavaSE 抽象类和接口

whispar

接口 Java应用 10月月更

百度面试题——迷宫问题(超详细解析)

lovevivi

c 数据结构 10月月更

Go做Web开发,有哪些必懂的概念和底层原理呢?

王中阳Go

Java php Go Web 10月月更

「数仓建设篇」数仓主题域与主题划分实战

大数据阶梯之路

面试 数仓主题 数仓建设

【c++图论例题学习】洛谷 P3366最小生成树

贤鱼很忙

10月月更

Apache RocketMQ 在阿里云大规模商业化实践之路

阿里巴巴云原生

Apache 阿里云 云原生 消息队列 商业化

如何在 Linux 上重新启动网络接口?

wljslmz

Linux 网络 网络接口 10月月更

JWT详解

Java学术趴

10月月更

Ubuntu Server 20.04 LTS下载及安装教程

Yeats_Liao

ubuntu 后端 10月月更

还不会配置Python虚拟环境?看这篇就懂了

芥末拌个饭吧

后端 配置管理 python 3.5+ 10月月更

WeChat Moments Performance Analysis

David

架构实战营

Linux下编写ENC28J60网卡驱动,完善网络设备框架

DS小龙哥

10月月更

Kafka的客户端NetworkClient如何发起的请求

石臻臻的杂货铺

Kafk 10月月更

PUTTY-0.75 下载安装及SSH远程连接方法

Yeats_Liao

后端 putty 10月月更

图解ReentrantLock的条件变量Condition机制

JAVA旭阳

Java 并发 10月月更

用Java实现计算器功能

魏铁锤

10月月更

协同开发时,如何科学的使用Git紧急修复线上bug?

王中阳Go

git 敏捷开发 团队协作 10月月更 git使用规范

如何提高项目的稳定性和开发效率呢?

王中阳Go

数据库 算法 框架 函数 10月月更

行业实践:RocketMQ 业务集成典型行业应用和实践

阿里巴巴云原生

阿里云 RocketMQ 云原生

super关键字的作用

魏铁锤

10月月更

Spring Boot「06」Loading initial data

Samson

Java spring 学习笔记 spring-boot 10月月更

朋友圈高性能复杂度分析

许四多

谈谈PHP switch case和其他语言的区别

芥末拌个饭吧

php Go 10月月更

ReentrantLock可重入、可打断、锁超时实现原理

JAVA旭阳

Java 并发 10月月更

用栈操作构建数组

掘金安东尼

算法 10月月更

Vue组件入门(六)派发事件的参数传递

Augus

Vue 3 10月月更

适用于 Linux 的 Windows 子系统(WSL)安装指南

Yeats_Liao

后端 wsl 10月月更

【c++图论学习】洛谷P1396营救

贤鱼很忙

c++ 算法 10月月更

Meta开源Pyrefly,Rust中的高性能Python类型检查器_开源_Sergio De Simone_InfoQ精选文章