我正在寻找一种动态链接方式。
大纲是:
让我们有一个带有许多数据过滤器的应用程序,这些过滤器具有所有相同的轮廓(函数名,内部使用的数据类型,单个类的一些导出数据类型)。
对我来说,检查当前的.so文件,根据命令行参数加载只需要的文件,然后运行它会很棒。 每次添加新模块时,我都不想更改或重新编译应用程序。
今天有可能这样吗?
用System.Plugins
尝试了一些黑客攻击,每次都失败了。有时候一个人讨厌强烈的攻击行为。
修改
如果我直接写了这样的东西并给了他调用makeChunks的类型提示,那就没关系,否则什么都没有
--SharedClass --should create common interface
class (Eq c, Show c) => Chunks c where
makeChunks :: String -> [c]
--Plugin --one concrete implementation
import SharedClass
data MyChunk = SmallChunk Char deriving (Eq)
instance Chunks MyChunk where
makeChunks _ = [SmallChunk 's']
instance Show MyChunk where
show (SmallChunk s) = [s]
--main
import SharedClass
--load plugin somehow
print $ makeChunks "abcd"