相关疑难解决方法(0)

Rust有一个dlopen等价物

Rust是否有办法使程序可插入.在C中,我创建的插件是.so文件,我用dlopen加载.Rust提供了一种做同样事情的本地方式吗?

plugins rust

29
推荐指数
2
解决办法
6358
查看次数

Idiomatic Rust插件系统

我想为插件系统外包一些代码.在我的项目中,我有一个特性叫做Provider我的插件系统的代码.如果激活"消费者"功能,则可以使用插件; 如果你不这样做,你就是插件的作者.

我希望插件的作者通过编译到共享库来将他们的代码放入我的程序中.共享库是一个很好的设计决策吗?无论如何,插件的限制是使用Rust.

插件主机是否必须采用C方式加载共享库:加载一个未编译的函数?

我只想让作者使用这个特性Provider来实现他们的插件,就是这样.在看了一下sharedliblibloading之后,似乎不可能以惯用的Rust方式加载插件.

我只想将特征对象加载到我的ProviderLoader:

// lib.rs

pub struct Sample { ... }

pub trait Provider { 
    fn get_sample(&self) -> Sample;
}

pub struct ProviderLoader {
    plugins: Vec<Box<Provider>>
}
Run Code Online (Sandbox Code Playgroud)

程序发布时,文件树看起来像:

.
??? fancy_program.exe
??? providers
    ??? fp_awesomedude.dll
    ??? fp_niceplugin.dll
Run Code Online (Sandbox Code Playgroud)

如果将插件编译为共享库,那可能吗?这也会影响插件箱类型的决定.

你有其他想法吗?也许我走错路,以便共享的libs不是圣杯.

我首先在Rust论坛上发布了这个.一位朋友建议我试试Stack Overflow.

plugins rust

15
推荐指数
2
解决办法
2865
查看次数

在 Rust 中,什么是 `fn() -&gt; ()`?

我掌握了 Fn(大写-F)特征:Fn, FnMut, FnOnce. 我知道它们是特质,并且像特质一样工作。

但是fn(小写-f)呢?它在编辑器中有不同的颜色,这告诉我这不是特征。它也可以用在其他地方不能使用的地方(反之亦然),尽管在其他情况下它的行为似乎相似。我在文档中找不到任何直接解释它的内容。

function traits rust

5
推荐指数
1
解决办法
648
查看次数

标签 统计

rust ×3

plugins ×2

function ×1

traits ×1