10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

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:005520

评论

发布
暂无评论

【云原生 | 从零开始学Docker】四、Docker镜像深度解析

泡泡

Docker 云计算 容器 云原生 9月月更

2022前端二面必会vue面试题汇总

bb_xiaxia1998

Vue 前端

企业做好知识管理的方法:文档管理

Baklib

什么是访问控制列表ACL?

wljslmz

acl 访问控制列表 9月月更

SaaS 产品该如何定价?

产品海豚湾

产品经理 SaaS 产品规划 9月月更 商业产品

《数字经济全景白皮书》新市民金融创新篇 重磅发布!

易观分析

金融 新市民服务

MySQL 中的锁机制

月明风清

2022-09-15:Range模块是跟踪数字范围的模块。 设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表示所有 left <= x < righ

福大大架构师每日一题

算法 rust 福大大

谁来说说数据质量评估的标准是什么?

雨果

数据质量

数据、管理、分析和运营:大数据专家面临的四大挑战!

雨果

大数据

Java进阶(二十一)java 空字符串与null区别

No Silver Bullet

Java null 9月月更 空字符串

跟着卷卷龙一起学Camera--Binder

卷卷龙

ISP 9月月更

2022前端经典vue面试题(持续更新中)

bb_xiaxia1998

Vue 前端

易观分析:制造行业数字孪生AMC分析 ——数字孪生智能制造步入市场启动期,闭环验证能力待优化

易观分析

数字孪生 市场分析

数据仓库分层架构

阿泽🧸

数据仓库 9月月更

前端经典面试题(有答案)

loveX001

JavaScript 前端

20道高频react面试题(附答案)

beifeng1996

前端 React

【spring-kafka】@KafkaListener详解与使用

石臻臻的杂货铺

kafka 9月月更

C++学习---STL中nullptr_t的实现原理

桑榆

c++ 源码阅读 9月月更

谁能说清楚数据资产管理与数据治理是什么关系?

雨果

数据治理

你知道数据资产管理的目标是什么?

雨果

数据中台 数据资产管理

[极致用户体验] 让你的网页,适配微信大字号模式!体验超好,快来收藏

HullQin

CSS JavaScript html 前端 9月月更

经验分享|企业搭建帮助中心步骤

Baklib

MFC模拟消息发送,自定义以及系统消息

中国好公民st

c++ 消息分发 9月月更

大数据ELK(二):Elasticsearch简单介绍

Lansonli

elasticsearch 9月月更

【云原生 | 从零开始学Docker】五、容器数据卷实战

泡泡

Docker 云计算 容器 云原生 9月月更

leetcode 637. Average of Levels in Binary Tree 二叉树的层平均值(简单)

okokabcd

LeetCode 数据结构与算法

元宇宙与泛娱乐的邂逅:次世代第一CP养成记

脑极体

前端常见react面试题合集

beifeng1996

前端 React

企业在SaaS时代如何玩转帮助中心?

Baklib

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