[博客翻译]HPy–用于Python的更好的C API


原文地址:https://hpyproject.org/


跳转到主要内容

HPy:为Python打造更好的C扩展接口

什么是HPy?HPy提供了一种全新的方式来在C语言中扩展Python。使用它,你只需包含 <hpy.h> 而不是 <Python.h>

HPy有哪些优势?

3.png

  1. 对CPython零开销:用HPy编写的扩展在CPython上运行速度与传统扩展相当。

  2. 在PyPy、GraalPy等替代实现上更快。

  3. 全平台兼容:为HPy通用ABI构建的扩展无需修改即可在CPython、PyPy、GraalPython等环境中加载。

  4. 迁移路径:可以混合使用旧的C-API调用和HPy API,完成后,扩展可打包为通用二进制,适用于所有CPython版本、PyPy或GraalPy。

  5. 调试模式:在调试模式下,能轻松发现内存泄漏、对象生命周期错误、API使用不当等问题。对于忘记添加Py_INCREFPy_DECREF的情况,HPy的调试模式可以在运行时帮你找出问题,即使在通用二进制中也是如此。

  6. 更友好的API:标准Python/C API显得有些过时。HPy旨在克服其局限性,提供更一致、质量更高的扩展,并减少引入错误的可能性。

  7. 可进化性:如PEP 620所述,标准Python/C API暴露了大量内部实现细节,这使得C API的演进变得困难。而HPy没有这个问题,因为所有内部细节都被隐藏起来。

当前状态:

HPy正在积极开发中,0.9.0是最新版的alpha测试版。我们即将告别alpha状态,正努力向稳定版本迈进。我们认为HPy的ABI已经足够稳定,可以保证新版本在向后和向前兼容性方面达到承诺,同时API功能也覆盖了大部分重要场景,包括对numpy的迁移(请查看我们的numpy移植)。我们提供了迁移指南和详尽的文档(特别是API参考)。

当然,我们始终欢迎设计讨论和新的需求。Python/C API庞大,目前许多流行功能已可用。如果你发现最喜欢的扩展缺少某些功能,请提交问题或PR。

兼容HPy的扩展示例:

  • ultrajson-hpy:这是第一个成功移植到HPy的现实世界模块,因为它只导出函数(而非自定义类型),并且依赖的API函数较少。

  • piconumpy:顾名思义,这是一个类似NumPy的轻量级模块,定义了一个定制类型(类似于ndarray,但功能较少)。

  • numpy:我们的目标之一是将numpy移植到HPy,借此了解如何设计更好的API。这个移植接近完成测试套件。

  • matplotlib:由于matplotlib依赖于NumPy,全平台迁移还未完成。HPy提供了向后兼容API,允许我们在HPy中调用旧的C API函数并运行测试套件。

  • kiwi-solver:matplotlib的一个依赖,已完全迁移到全平台模式。

更多关于matplotlib和kiwi-solver移植的信息可在GraalVM博客中找到。结果显示,HPy移植对CPython性能影响不大,但在GraalVM Python中,kiwi-solver的完整HPy移植能提供接近CPython的性能。

我们需要帮助的地方:

  1. 文档:我们的资源有限,专注于技术任务。虽然我们已编写了很多文档,但仍需完善。如果你能帮忙非编码工作,欢迎加入。

  2. 宣传:尽管核心开发者反响良好,但我们需要吸引更多的包开发者关注和使用HPy。任何宣传帮助都受欢迎,我们也乐意协助准备演讲、演示等。

  3. 工具:工具方面也需要帮助,例如开发迁移辅助工具,自动化从C API到HPy API的繁琐工作。

  4. 包装:还有待讨论和解决的问题,如如何打包通用扩展、如何在PyPI上发布、如何与setuptools、mesonpy等构建系统集成等。

  5. 上游贡献:对于下面列出的已完成分支,或者部分分支,我们希望上游合并,以避免代码老化。

网站和Logo设计:如果你不喜欢当前网站和HPy的Logo,我们专长在于虚拟机、编译器、底层编程等领域,但对于Web开发和图形设计则一窍不通。欢迎提出改进意见!

更多信息:

  • 文档

  • HPy博客

  • Github仓库

  • HPy Discord服务器

  • #hpy IRC频道(已废弃但仍在)

  • 邮件列表

  • HPy发音为 /h/ - pie(或使用国际音标:/eɪtʃ-paɪ/)

最近的博客文章:

  1. 2023年10月12日 19:00 - hpy 0.9.0:第四次公开发布

  2. 2023年10月10日 10:00 - Brno的HPy聚会与CPython核心开发者冲刺(2023年10月7-10日)

  3. 2022年9月26日 10:00 - HPy冲刺状态更新及反馈会议

  4. 2022年9月8日 15:30 - HPy在GraalPy和Matplotlib/HPy中的应用

  5. 2022年7月29日 10:00 - 2022年9月19-23日在杜塞尔多夫的PyPy/HPy/其他冲刺

版权 © 2024 HPy团队

由Nikola驱动

RSS订阅


内容整理自2024年信息,可能有所更新。