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.