The simplicity of Python and the power of C++ force stark choices on a scientific software stack. There have been multiple developments to mitigate language boundaries by implementing language bindings, but the impedance mismatch between the static nature of C++ and the dynamic one of Python hinders their implementation; examples include the use of user-defined Python types with templated C++ and advanced memory management. The development of the C++ interpreter Cling has changed the way we can think of language bindings as it provides an incremental compilation infrastructure available at runtime. That is, Python can interrogate C++ on demand, and bindings can be lazily constructed at runtime. This automatic binding provision requires no direct support from library authors and offers better performance than alternative solutions, such as PyBind11. ROOT pioneered this approach with PyROOT, which was later enhanced with its successor, cppyy. However, until now, cppyy relied on the reflection layer of ROOT, which is limited in terms of provided features and performance. This paper presents the next step for language interoperability with cppyy, enabling research into uniform cross-language execution environments and boosting optimization opportunities across language boundaries. We illustrate the use of advanced C++ in Numba-accelerated Python through cppyy. We outline a path forward for re-engineering parts of cppyy to use upstream LLVM components to improve performance and sustainability. We demonstrate cppyy purely based on a C++ reflection library, InterOp, which offers interoperability primitives based on Cling and Clang-Repl.


翻译:Python的简易性与C++的强大迫使科学软件堆栈做出了严格的选择。已有多种开发解决方案,以减轻语言边界对语言绑定的影响,但C++的静态性质与Python的动态性质之间的阻抗不利于它们的实现,例如使用带有模板化C ++和高级内存管理的自定义Python类型。 C ++解释器Cling的发展改变了我们思考语言绑定的方式,它提供了一种运行时可用的增量编译基础结构。即Python可以随时查询C++,绑定可以在运行时被懒惰地构建。这种自动绑定功能无需直接从库作者获得支持,比PyBind11等替代解决方案提供更好的性能。ROOT在PyROOT中开创了这种方法,其后继版本cppyy进一步加强了这个方法。但是,直到现在,cppyy仍依赖于ROOT的反射库,该库在提供功能和性能方面都有限制。本文介绍了实现cppyy语言互操作性的下一步,为统一的跨语言执行环境研究提供了可能,并增强了跨语言边界的优化机会。我们通过cppyy展示了在Numba加速的Python中使用高级C ++,并为cppyy重新设计部分组件提供了前进的道路,以使用上游LLVM组件来改进性能和可持续性。我们演示了仅基于C++反射库InterOp的cppyy,该反射库基于Cling和Clang-Repl提供了互操作原语。

0
下载
关闭预览

相关内容

Python是一种面向对象的解释型计算机程序设计语言,在设计中注重代码的可读性,同时也是一种功能强大的通用型语言。
【2022新书】Python数据分析第三版,579页pdf
专知会员服务
244+阅读 · 2022年8月31日
【2022新书】Python DevOps,245页pdf
专知会员服务
89+阅读 · 2022年7月11日
【经典书】高效机器学习,Efficient Learning Machines,263页pdf
Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
107+阅读 · 2020年5月3日
【SIGGRAPH2019】TensorFlow 2.0深度学习计算机图形学应用
专知会员服务
39+阅读 · 2019年10月9日
CALDERA 一款对手自动模拟工具
黑白之道
20+阅读 · 2019年9月17日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
Github项目推荐 | gensim - Python中的主题建模
AI研习社
15+阅读 · 2019年3月16日
A Technical Overview of AI & ML in 2018 & Trends for 2019
待字闺中
16+阅读 · 2018年12月24日
在Python中使用SpaCy进行文本分类
专知
24+阅读 · 2018年5月8日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
2+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
Arxiv
0+阅读 · 2023年5月22日
VIP会员
相关资讯
相关基金
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
2+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
Top
微信扫码咨询专知VIP会员