These notes are meant to help developers and contributors with regards to some details of the implementation and coding style of the project.
The Python codebase currently targets Python 3.6+, strives to follow PEP 8 and uses Numpy style docstring.
Python C++ bindings
The bindings are hand-written and relies on cppy (https://github.com/nucleic/cppy). Enaml tries to use a reasonably modern C API and to support sub-interpreter, this has a couple of consequences:
static variables use is limited to cases that cannot lead to state leakage between multiple sub-interpreters. Note that this is currently not heavily tested and may require some improvements.
all the non exported symbol are enclosed in anonymous namespaces
enaml does not use static types and only dynamical types (note that the type slots and related structures are stored in a static variable)
modules use the multi-phases initialization mechanism as defined in PEP 489 – Multi-phase extension module initialization