跳转到主要内容
HPy:为Python打造更好的C扩展接口
什么是HPy?HPy提供了一种全新的方式来在C语言中扩展Python。使用它,你只需包含 <hpy.h>
而不是 <Python.h>
。
HPy有哪些优势?
-
对CPython零开销:用HPy编写的扩展在CPython上运行速度与传统扩展相当。
-
在PyPy、GraalPy等替代实现上更快。
-
全平台兼容:为HPy通用ABI构建的扩展无需修改即可在CPython、PyPy、GraalPython等环境中加载。
-
迁移路径:可以混合使用旧的C-API调用和HPy API,完成后,扩展可打包为通用二进制,适用于所有CPython版本、PyPy或GraalPy。
-
调试模式:在调试模式下,能轻松发现内存泄漏、对象生命周期错误、API使用不当等问题。对于忘记添加
Py_INCREF
或Py_DECREF
的情况,HPy的调试模式可以在运行时帮你找出问题,即使在通用二进制中也是如此。 -
更友好的API:标准Python/C API显得有些过时。HPy旨在克服其局限性,提供更一致、质量更高的扩展,并减少引入错误的可能性。
-
可进化性:如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的性能。
我们需要帮助的地方:
-
文档:我们的资源有限,专注于技术任务。虽然我们已编写了很多文档,但仍需完善。如果你能帮忙非编码工作,欢迎加入。
-
宣传:尽管核心开发者反响良好,但我们需要吸引更多的包开发者关注和使用HPy。任何宣传帮助都受欢迎,我们也乐意协助准备演讲、演示等。
-
工具:工具方面也需要帮助,例如开发迁移辅助工具,自动化从C API到HPy API的繁琐工作。
-
包装:还有待讨论和解决的问题,如如何打包通用扩展、如何在PyPI上发布、如何与setuptools、mesonpy等构建系统集成等。
-
上游贡献:对于下面列出的已完成分支,或者部分分支,我们希望上游合并,以避免代码老化。
网站和Logo设计:如果你不喜欢当前网站和HPy的Logo,我们专长在于虚拟机、编译器、底层编程等领域,但对于Web开发和图形设计则一窍不通。欢迎提出改进意见!
更多信息:
-
文档
-
HPy博客
-
Github仓库
-
HPy Discord服务器
-
#hpy IRC频道(已废弃但仍在)
-
邮件列表
-
HPy发音为 /h/ - pie(或使用国际音标:/eɪtʃ-paɪ/)
最近的博客文章:
-
2023年10月12日 19:00 - hpy 0.9.0:第四次公开发布
-
2023年10月10日 10:00 - Brno的HPy聚会与CPython核心开发者冲刺(2023年10月7-10日)
-
2022年9月26日 10:00 - HPy冲刺状态更新及反馈会议
-
2022年9月8日 15:30 - HPy在GraalPy和Matplotlib/HPy中的应用
-
2022年7月29日 10:00 - 2022年9月19-23日在杜塞尔多夫的PyPy/HPy/其他冲刺
版权 © 2024 HPy团队
由Nikola驱动
RSS订阅
内容整理自2024年信息,可能有所更新。