Ответ 1
Пока нет, официально, хотя это должно быть по крайней мере возможно с не слишком большим взломом. Самым большим препятствием является то, что библиотеки не имеют возможности выполнять динамическую загрузку. Здесь потенциальная стратегия, чтобы заставить ее работать (на входящей ветки ржавчины).
- Ссылка на ящик rustc для программного программирования компилятора. Имейте в виду, что компилятор не является потокобезопасным, поэтому запустите только одну сборку в процессе.
- Отметьте функцию, которую вы хотите вызвать, с помощью
#[no_mangle]
. Это должно (я его не пробовал) создает неподтвержденное имя символа, поэтому его легко найти. - Создание минимальных привязок к dlopen/dlsym
- Найдите указатель на функцию и невольно преобразуйте ее в тип закрытия Rust (в настоящее время определенный в
sys::Closure
). - Вызовите закрытие.
У Rust также есть минимально проверенный JIT, который может использоваться для этого типа вещей, но у него есть некоторые основные ошибки.