History

What is now called cppyy started life as RootPython from CERN, but cppyy is not associated with CERN (it is still used there, however, underpinning PyROOT).

Back in late 2002, Pere Mato of CERN, had the idea of using the CINT C++ interpreter, which formed the interactive interface to ROOT, to call from Python into C++: this became RootPython. This binder interfaced with Python through boost.python (v1), transpiling Python code into C++ and interpreting the result with CINT. In early 2003, I ported this code to boost.python v2, then recently released. In practice, however, re-interpreting the transpiled code was unusably slow, thus I modified the code to make direct use of CINT’s internal reflection system, gaining about 25x in performance. I presented this work as PyROOT at the ROOT Users’ Workshop in early 2004, and, after removing the boost.python dependency by using the C-API directly (gaining another factor 7 in speedup!), it was included in ROOT. PyROOT was presented at the SciPy‘06 conference, but was otherwise not advocated outside of High Energy Physics (HEP).

In 2010, the PyPy core developers and I held a sprint at CERN to use Reflex, a standalone alternative to CINT’s reflection of C++, to add automatic C++ bindings, PyROOT-style, to PyPy. This is where the name “cppyy” originated. Coined by Carl Friedrich Bolz, if you want to understand the meaning, just pronounce it slowly: cpp-y-y.

After the ROOT team replaced CINT with Cling, PyROOT soon followed. As part of Google’s Summer of Code ‘16, Aditi Dutta moved PyPy/cppyy to Cling as well, and packaged the code for use through PyPI. I continued this integration with the Python eco-system by forking PyROOT, reducing its dependencies, and repackaging it as CPython/cppyy. The combined result is the current cppyy project. Mid 2018, version 1.0 was released.