Rust FFI, обратные вызовы и время жизни - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь создать красивую оболочку ржавчины вокруг libuv, библиотеки событий l oop, написанной на C. Я в значительной степени "готов", но у меня проблемы с обратными вызовами и временем жизни.

Будучи библиотекой событий l oop, libuv в значительной степени полагается на обратные вызовы. У меня есть код, который может принимать функции, замыкания или кортеж (obj, method-on-obj), и он обрабатывает создание соответствующего «трамплина», чтобы передать его через границу FFI. Все это работает.

Однако проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, что делать со сроками жизни. На этом этапе я требую, чтобы эти функции / closures / ob js имели время жизни stati c, но это создает массу головной боли, когда дело доходит до фактического использования моей библиотеки: любые данные, к которым осуществляется доступ с помощью этих функций / closures / Тогда ob js также должен быть stati c. В простых случаях move на замыкании может «исправить» проблему, но любой реальный вариант использования очень быстро станет громоздким - например, создание объекта stati c в ржавчине затруднительно, поэтому Тип обратного вызова (obj, method-on-obj) не очень полезен, но мне бы очень хотелось, чтобы он был!

Однако я не могу придумать никаких других решений. Обратные вызовы и их данные должны существовать до тех пор, пока они не будут остановлены, отменены или закрыты с помощью соответствующей функции libuv - или пока не закончится l oop. Я не знаю, возможно ли провести жизнь через границу FFI, но, даже если это так, я почти уверен, что анализ Руста сделает вывод, что время жизни в любом случае по сути является stati c. способ статического завершения любого более короткого срока службы с помощью анализа кода, поскольку он определяется во время выполнения.

Итак, мне интересно, есть ли у кого-нибудь идеи, чтобы упростить использование моей библиотеки, либо каким-то образом уменьшив ожидаемый срок службы, либо сделав ее проще и менее громоздко иметь дело со стати c. Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...