У microsoft отличная документация, даже на русском есть
Ещё немного. Допустим есть код на Python: obj.test(value=42)
В принципе, если он вызывается достаточно часто, нам ничего не стоит написать его на Си и выполнять там, будет небольшая. Только писанины больше
Py_Object * obj = some_ref;
Py_Object * method = NULL;
Py_Object * args= NULL;
Py_Object * kwargs= NULL;
Py_Object * result = NULL;
method = PyObject_GetAttrString(obj, "test");
if (method == NULL) {
goto fini;
}
args = PyTuple_New(0);
if (args == NULL) {
goto fini;
}
kwargs = Py_BuildValue("{s:i}", "value", 42);
if (kwargs == NULL) {
goto fini;
}
result = PyObject_Call(method, args, kwargs);
fini:
Py_XDECREF(method);
Py_XDECREF(kwargs);
Py_XDECREF(args);
if (result == NULL) {
/* Some exception during call, process it */
} else {
/* Working with result */
}
Py_XDECREF(result);
Идея Cython состоит в том, что ты всё равно пишешь на Python obj.test(value=42) он из этого генерирует сишный код примерно такой как я написал, потом его компилирует в питоовский модуль, и ты его можешь вызывать. За счёт того, что убирается байт-код и его интерпретация, получается немного быстрее. Ну и дальнейшее развитие это параметры, всякие оптимиации за счёт того, что не надо дёргать функции, возможность вызывать из Cython в Cython без лишних созданий Py_Object и т. п.