GRPC Python Cython layer ======================== Package for the GRPC Python Cython layer. What is Cython? --------------- Cython is both a superset of the Python language with extensions for dealing with C types and a tool that transpiles this superset into C code. It provides convenient means of statically typing expressions and of converting Python strings to pointers (among other niceties), thus dramatically smoothing the Python/C interop by allowing fluid use of APIs in both from the same source. See the wonderful `Cython website`_. Why Cython? ----------- - **Python 2 and 3 support** Cython generated C code has precompiler macros to target both Python 2 and Python 3 C APIs, even while acting as a superset of just the Python 2 language (e.g. using ``basestring``). - **Significantly less semantic noise** A lot of CPython code is just glue, especially human-error-prone ``Py_INCREF``-ing and ``Py_DECREF``-ing around error handlers and such. Cython takes care of that automagically. - **Possible PyPy support** One of the major developments in Cython over the past few years was the addition of support for PyPy. We might soon be able to provide such support ourselves through our use of Cython. - **Less Python glue code** There existed several adapter layers in and around the original CPython code to smooth the surface exposed to Python due to how much trouble it was to make such a smooth surface via the CPython API alone. Cython makes writing such a surface incredibly easy, so these adapter layers may be removed. Implications for Users ---------------------- Nothing additional will be required for users. PyPI packages will contain Cython generated C code and thus not necessitate a Cython installation. Implications for GRPC Developers -------------------------------- A typical edit-compile-debug cycle now requires Cython. We install Cython in the ``virtualenv`` generated for the Python tests in this repository, so initial test runs may take an extra 2+ minutes to complete. Subsequent test runs won't reinstall ``Cython`` (unless required versions change and the ``virtualenv`` doesn't have installed versions that satisfy the change). .. _`Cython website`: http://cython.org/