Просто ради удовольствия я решил создать привязку схемы к libpython, чтобы вы могли встраивать Python в программах Scheme. Я уже могу обращаться к Python C API, но на самом деле я не думал об управлении памятью.
Принцип работы FFI mzscheme заключается в том, что я могу вызвать функцию, и если эта функция возвращает указатель на PyObject
, то я могу автоматически увеличить счетчик ссылок. Затем я могу зарегистрировать финализатор, который будет уменьшать счетчик ссылок при сборке мусора для объекта Scheme. Я просмотрел документацию по подсчету ссылок и не увидеть какие-либо проблемы с этим на первый взгляд (хотя в некоторых случаях это может быть неоптимально). Есть ли какие-то ошибки, которые я упускаю?
Кроме того, у меня не получается разобраться в документации по циклическому сборщику мусора. . Какие вещи мне нужно иметь в виду здесь? В частности, как мне сообщить Python, что у меня есть ссылка на что-то, чтобы он не собирал ее, пока я ее использую?