Plugins Rust:在动态加载的库内部(和外部)强制执行生命周期

Plugins Rust:在动态加载的库内部(和外部)强制执行生命周期,plugins,rust,lifetime,dynamic-loading,Plugins,Rust,Lifetime,Dynamic Loading,我正在探索使用Rust动态加载库,并希望获得正确的生命周期 我基本上遵循一般的设置,然而,该站点上的插件特性似乎是在动态加载的插件中创建具有静态生存期的引用,考虑到插件是在运行时加载和卸载的,我有点困惑这怎么可能是正确的 从链接页面复制(并缩短)的示例: pub trait Plugin: Any + Send + Sync { fn name(&self) -> &'static str; ... } 当库在运行时卸载时,fn name(&self)的返

我正在探索使用Rust动态加载库,并希望获得正确的生命周期

我基本上遵循一般的设置,然而,该站点上的
插件
特性似乎是在动态加载的插件中创建具有
静态
生存期的引用,考虑到插件是在运行时加载和卸载的,我有点困惑这怎么可能是正确的

从链接页面复制(并缩短)的示例:

pub trait Plugin: Any + Send + Sync {
    fn name(&self) -> &'static str;
    ...
}
当库在运行时卸载时,
fn name(&self)
的返回值的生存期和
Any
supertrait对我来说听起来像是一个谎言,至少如果我正确理解卸载库将从RAM中删除所有“静态”符号,从而生成字符串,类型id,等。指向无效内存

链接站点甚至明确提到,加载的库需要在内存中停留的时间比从它们创建的插件特性对象长,但代码似乎没有以任何方式强制执行这一点

我解决这个问题的天真想法是删除
Any
trait(我不需要它),将所有输出引用绑定到
self
的生存期,并在从库中创建trait对象的函数的返回类型中注释trait对象的生存期

pub trait Plugin: Send {
    fn name<'p>(&'p self) -> &'p str;
    ...
}

pub fn load_plugin_from_library<'p>(&'p library : Library) -> Box<dyn Plugin + 'p> {
    ...
}
pub-trait插件:发送{
fn名称和p str;
...
}
pub fn从库框加载插件