Index: third_party/grpc/src/python/grpcio/grpc/_cython/README.rst |
diff --git a/third_party/grpc/src/python/grpcio/grpc/_cython/README.rst b/third_party/grpc/src/python/grpcio/grpc/_cython/README.rst |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c0e66734e875a3254c5981e94c0ccc8ea511a0d1 |
--- /dev/null |
+++ b/third_party/grpc/src/python/grpcio/grpc/_cython/README.rst |
@@ -0,0 +1,52 @@ |
+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/ |