HPY:Python更好的C API?

2021-04-02 16:36:23

LWN订阅者已为您提供以下订阅内容。成千上万的订阅者依赖LWN了解Linux和自由软件社区的最佳新闻。如果您喜欢本文,请考虑订阅LWN。感谢您访问lwn.net!

HPY项目现在已经超过了一年多;它意味着提供一个备用C Apifor Python,它允许扩展到要运行的语言,并在更多环境中运行。它首先在2020python语言峰会(LWN覆盖范围)谈论的报告中提出了我们的注意,但它追溯到2019年Europython的一些讨论。当时,现有的C API持有反向创新的多种方式,但是还有一些重要的重要扩展(例如Numpy)使用它;任何改变盟队都会考虑这些。

尤为努力改善C API,特别是Victor Stinner' SPEP 620("从C API&#34隐藏实现细节),但是那些有令人难以置的改进,而且保持了延伸的意图在职的。在某种程义上,HPY是相似的,因为它不会寻求替换现有的API,至少随时很快。但是,该项目确实寻求对API进行彻底改变,以追求其目标。

目前的Python Capi与语言的CPython实现密切相关,这是难以使API调整到其他模仿的一部分,例如PYPY。 C API有效地将垃圾收集器嵌入到语言扩展中,在尝试运行这些扩展时,不能使用(或唯一痛苦地使用的替代垃圾收集方法。它还持有返回CPython,因为它是不可能的,例如,在不改变API的情况下删除或改变GlobalInterpreter Lock(GIL),因此需要常长扩展。

因此,HPE寻求提供一个更简化的C API,这些A API不受欢迎的CPython,但这可以运行具有与现有API相同的性能相同的扩展。编写的扩展为使用HPY将是" Fremaster"根据主页,根据Pypy或Python等替代品。 HPY还提供了一种建立和#34;普遍二进制文件的方法;将在各种Pythons上未经修改的forextens,以及一个"调试模式"这旨在捕捉在扩展中进行的常见错误。除此之外,它意味着带来:更好的API:标准Python / C API显示其年龄。 HPY是设计的一些局限性,更加一致,产生更好的延伸,并使突然出现错误。

显然,HPY是一个雄心勃勃的项目。它在很大程度上飞过雷达,这是项目想要改变的东西。 Tothat结束,它推出了它的第一个博客,标题为"您好,HPY",3月29日;它是由Antonio Cuni借入的,他也在语言峰会上发表了谈话。该帖子通过一个简单的Python扩展的简单蟒蛇扩展,该扩展使用两个简单的CAPI和HPY添加两个整数。

显而易见的主要区别是,而不是PyObjectPointers,Python对象由不透明的处理(HPY类型)表示,这在没有长长的环境(而不是使用PY_INCREF而不是需要手动参考计数操作时需要关闭一次()/ py_decref())。 HPY调试模式有助于跟踪句柄以确保它们已关闭。可能被猜到," h"在HPY来自"把手"

此外,HPY为每个呼叫添加了显式上下文参数(HPyContext),以便明确地管理Interpreter的本地状态。它意味着允许未来的版本,其中不同的线索有自己的解释器或进程包含多个解释器(例如不同的版本或实现)。它还允许当前的功能括起来括起通用二进制文件。

如果您在HPY示例的代码上浏览,则它不会看起来比使用现有API的等效性。这不起作用,特别是鉴于该例子中缺乏复杂性;显然,两个整数是粗魔等东西的哭泣。但是Blogpost还展示了如何为CPython,Graalvm和Aneuniversal二进制构建扩展,这些二进制文件将在Pypy,Graalvm或Cpython中运行。即使示例扩展是微不足道的,它也是兼并的故事。

如上所述,HPY仍处于初期阶段;例如,已有州州释放。此外,它只支持现有API的Smallsubset:Python / C API是巨大的,目前只有一小部分在HPY中是可见的。我们正在尝试通过将现有扩展移植到HPY和以每项需要添加/设计新功能。

到目前为止,三个扩展已针对使用HPY转换。超json-hpyextension是一个实验,以便端口提供快速,基于C的JSON解析器的UltraJSON(UJSON)模块。这是"用于移植到HPE&#34的星世界模块;由于它只导出函数 - 不是类型 - 并且只需要API的ASMALL子集,它是A"漂亮的健康"对于HPY提供的。

另外两个实验端口显示NUMPY对Python C API的任何更改的重要性。 Piconumpy是一种Numpy的Tineportion,提供一维数组类型,索引,LEN()函数,元素-WiseAddition的两个数组,并通过ASINGE值进行元素 - WISE乘法和划分。除了Numpy-HPy之外是一个用于将所有Numpy移植到HPY的基本舞台实验。然而,这两者都不是这一点。然而,这一切都是如此。

HPY本身托管了Ongithub。有一个HPY-DEVMAILING LIST,虽然这些天是相当安静的,也是FREENODE.NET上的#HPY IRCCHANNEL。这似乎是推动项目型材的推动的部分原因是试图吸引Moredevelopers。

HPY背后的想法看起来很高兴,但它是一个庞大的项目,普通的发展努力走得太远。现有的python c api阻碍了Python的数钱,而当然,同样的API对语言周围的巨大和不断增长的生态系统具有极大的方式。然而,特别是旨在提高Python性能的项目倾向于搁浅需要ToSupport API。 HPY看起来像一个留意的项目,以看看漫步者在路上的那个地区可能会发生变化。

( 登录后发表评论)