写点什么

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

评论

发布
暂无评论

《大型数据库技术》MySQL的进阶开发技巧,java基础知识重点总结pdf

Java 程序员 后端

【Java并发实战】偏向锁-轻量级锁-重量级锁,掌握这些知识点再也不怕面试通不过

Java 程序员 后端

【Java从0到架构师】JDBC,Java多态实现原理解析

Java 程序员 后端

【MyBatis 2】MyBatis-Plus,java分布式框架技术方案

Java 程序员 后端

《零基础》MySQL 连接的使用(二十),springcloud开发教程

Java 程序员 后端

【DM】DMSQL程序的基本操作,下载量瞬秒百万

Java 程序员 后端

【DM】达梦数据库中的物理备份与还原,java程序设计项目教程眭碧霞第四章答案

Java 程序员 后端

《零基础》MySQL 安装(二),java高级程序设计作业系统

Java 程序员 后端

「JVM 系列」- JVM的类加载机制,java常用面试题和答案

Java 程序员 后端

【Java从0到架构师】Spring - 复杂对象,java的多线程的底层原理

Java 程序员 后端

【Docker 1】入门,nginx架构移植

Java 程序员 后端

【JVM系列5】深入分析Java垃圾收集算法和常用垃圾收集器

Java 程序员 后端

《重构 改善既有代码的设计 3》代码的可理解性应该是我们虔诚追求的目标

Java 程序员 后端

《零基础》MySQL GROUP BY 语句(十九),java并发编程实战pdf百度云

Java 程序员 后端

【DM】达梦DEM WEB管理器的搭建,mybatis基本工作原理

Java 程序员 后端

【Java知识点详解 8】Java反射机制,java项目经验面试题

Java 程序员 后端

《Spring实战》读书笔记-第3章 高级装配,全网最具深度的三次握手、四次挥手讲解

Java 程序员 后端

【C语言】动态内存分配,nginx调优与监控

Java 程序员 后端

【Java后端】2020年最新阿里,java中级面试题库weixin

Java 程序员 后端

【Java 异常】try-catch,mysql菜鸟入门系列

Java 程序员 后端

【Java从0到架构师】Spring - 生命周期,mysql教程入门到精通pdf

Java 程序员 后端

【Java程序员必知必会的90个细节】1,隔壁都馋哭了

Java 程序员 后端

“穷苦乡村”小伙就得安于现状,你掌握了多少?

Java 程序员 后端

《JVM系列》 第五章 -- 堆空间与对象分配,springboot项目分层架构

Java 程序员 后端

一文带你理解TDengine中的缓存技术

TDengine

数据库 tdengine 后端

【C语言】指针总结,Java程序员如何有效提升学习效率

Java 程序员 后端

【C语言基础系列】C语言分支结构,java反射原理面试

Java 程序员 后端

【Java从0到架构师】Spring - 整合 MyBatis,大厂Mysql高频面试题

Java 程序员 后端

《菜菜的机器学习sklearn课堂》逻辑回归,java教程百度云最新版

Java 程序员 后端

【DM】教你用JDBC连接达梦数据库并进行增删改查,java项目百度网盘

Java 程序员 后端

自定义注解实现方式全解析

小鲍侃java

11月日更

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