Project Verona

用于并发所有权的研究编程语言

Home Publications FAQ Python

为 Python 实现无畏并发

作为 Project Verona 的一部分,我们一直在为 Python 开发一种新的所有权模型,称为 Lungfish。该模型旨在为 Python 程序提供一种安全高效的方式来管理内存和并发。本页解释了我们为开发这种方法所做的实验。

Python 计划

在 FrankenScript 中快速原型设计

修改一种生产语言是一项复杂的任务。作为初始步骤,我们一直在开发一种名为 FrankenScript 的玩具语言,它使我们能够快速原型化我们基于区域的所有权的想法。FrankenScript 是一种小型语言,旨在易于修改和扩展。它基于我们在 Project Verona 中探索的所有权和并发的思想,但所有检查都是动态的。

这个原型增强了我们对所有权模型背后概念性想法的信心,并使我们能够探索动态语言中所有权的设计空间。它还有助于我们向 Project Verona 团队以外的人解释我们的想法和不同的设计决策。

FrankenScript 生成一系列 mermaid 图,显示程序的区域结构。示例如下:

mermaidexample

与 Python 社区互动

在过去的两年里,我们一直在与 Microsoft 的 Faster CPython 团队合作,作为我们想法的试验场。在 2025 年 5 月,我们将在 Python Language Summit 上迈出进入更广泛的 Python 社区的第一步。我们在 Python 语言峰会上所做的演示可以在这里找到。我们正在寻求来自核心开发人员和该语言背后更广泛社区的反馈。

构建新的所有权模型的步骤

为 Python 构建所有权模型是一项复杂的任务,我们正在采取循序渐进的方法来确保我们正确地完成它。

第一步实际上是在 Python 中构建深度不可变性的概念。这可以分为三个部分:

深度不可变性是任何所有权模型的关键部分,因为我们需要并发线程能够共享类型信息,而不会冒着它在底层发生改变的风险。由于 Python 中的类型是可变对象,我们需要一种在线程之间共享这些对象的方法。

一旦不可变性模型到位,我们就可以开始将基于区域的所有权模型应用于 Python,以允许安全地共享和转移可变状态。这包括将 FrankenScript 原型中开发的想法应用于 Python。我们已经在 CPython 的原型设计想法中取得了进展,但还没有任何东西可以尝试。

FAQ

为什么选择 Python?

Python 是世界上最流行的编程语言。随着 PEP703,又名 NoGil 或“Free-Threaded” Python,Python 正在转向完全并发模型。这意味着大量的程序员将可能面临并发问题。将所有权模型引入 Python 将有助于更容易地编写并发程序,并避免并发的陷阱。

这是一个影响 Python 未来,并帮助改善每个人的编程体验的绝佳机会。

为什么不使用线程和锁?

我们最初探索的是在子解释器之间使用消息传递。但是,我们也可以将区域思想应用于锁,并提供一个锁,该锁提供对与该锁关联的内存区域的临时访问。

我们已经草拟了一个如何与完整的 PEP 703 工作集成的设计,但尚未尝试实现它。

为什么不直接使用 Rust 的所有权模型?

Rust 的所有权模型是为静态类型语言设计的,并限制了可以在该语言中使用的对象图的类型。Python 中有如此多的现有代码,以至于 Rust 所有权模型的限制将过于有限。我们正在设计一种基于区域的新所有权模型,该模型旨在与 Python 的动态类型和现有对象图一起使用。

我们的方法借鉴了 Rust、Cyclone Encore 和 Pony 等具有所有权模型的语言的经验,但完全基于动态检查。与静态类型方法相比,这完全改变了可以检查的事物的种类。

Project Verona 从这项工作中学习到了什么?

在动态类型语言中进行所有权研究对于 Project Verona 团队来说是一次巨大的学习经历。它挑战了我们对静态类型语言中所有权和并发所做的每一个假设。此外,它向我们展示了某些编程模式,这些模式在动态区域系统中很容易检查,但在静态类型语言中很难检查。我们目前正在重新评估我们的所有权模型中静态和动态检查之间的平衡,以及如何最好地将它们结合起来。希望我们能够将其中一些想法带回 Project Verona 研究语言中。

在哪里可以找到更多信息?

我们在我们的出版物页面上列出了与 Project Verona 相关的详细出版物列表。与此工作最相关的论文是 Dynamic Region Ownership for Concurrency Safety

您可以尝试我们的玩具语言 FrankenScript。我们还提供一个 Docker 容器 来快速测试 FrankenScript。

我们还在研究几个实现我们想法的 Python 分支,这些分支目前位于 GitHub 上。

如何参与?可以和谁交谈?

我们列出了一些您可以找到项目各个部分的地方。如果您想了解更多信息,请在相应的 GitHub repo 上提出问题。

如果它更通用,请在 Project Verona Github repo 上提出问题,或者您可以加入我们的讨论列表 lungfish@lists.uu.se。 Project Verona 由 microsoft 维护 使用 GitHub Pages 发布