写点什么

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

评论

发布
暂无评论

【设计模式】桥接模式

Andy阿辉

编程 后端 设计模式 8月日更

Druid 使用 Kafka 数据加载教程——下载和启动 Kafka

HoneyMoose

【Flutter 专题】75 图解基本 TabBar 标签导航栏 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

spring的循环依赖

卢卡多多

spring aop 8月日更

Druid 加载 Kafka 数据时直接提交一个 supervisor

HoneyMoose

oeasy教您玩转vim - 7 - # 从头插入

o

🏆【Java技术之旅】「编译器专题」重塑认识Java编译器的执行过程(消除数组边界检查+公共子表达式)!

码界西柚

Java 编译器 8月日更 JIT编译器

Druid 加载 Kafka 数据后查询和清理数据

HoneyMoose

netty系列之:Event、Handler和Pipeline

程序那些事

Java Netty nio 程序那些事

前端之数据结构(三)集合和字典

Augus

数据结构 8月日更

两个小女孩

箭上有毒

8月日更

oeasy教您玩转vim - 9 - # 换行插入

o

kubernetes入门:harbor个人私有仓库傻瓜式搭建

小鲍侃java

8月日更

docker编排参数详解(docker-compose.yml配置文件编写)

xcbeyond

Docker 容器 8月日更

Linux中buff-cache占用过高解决方案

入门小站

Linux

Go并发之CSP并发模型、协程并发

Regan Yue

协程 CSP Go 语言 8月日更

Vue进阶(十三):MOCK

No Silver Bullet

Vue Mock 8月日更

Vue进阶(十四):config/index.js 配置文件详解

No Silver Bullet

Vue 8月日更 配置文件

番外2. OpenCV 中摄像头捕获与视频处理与常见问题解决方案

梦想橡皮擦

8月日更

深入了解NIO底层原理

陈皮的JavaLib

Java 面试 nio 8月日更

超全激活函数学习总结!!!

Shirakawa

神经网络 机器学习 算法 激活函数

Druid 使用 Kafka 将数据载入到 Kafka

HoneyMoose

如何从 0 到 1 设计 B 端产品?

蒋川

后台开发 产品开发 后台 后台管理系统 tob产品

数据探索

南湖职业技术学院机械狗

JavaScript代码片段学设计模式

devpoint

设计模式 工厂模式 8月日更

在线邮箱地址提取工具

入门小站

工具

元数据管理服务分析报告

漫长的白日梦

数据湖 AWS 元数据

Druid 加载 Kafka 数据时通过控制台来提交一个 supervisor

HoneyMoose

有状态流处理简介(一)

Databri_AI

flink 批处理 状态

架构训练营 模块4作业

sophiahuxh

oeasy教您玩转vim - 8 - # 追加文本

o

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