我一直在尝试用 C 语言编写一个小型 IRC 框架,现在我将扩展它的一些核心功能 - 但除此之外,我希望它可以通过插件进行扩展!
到目前为止,每当我写一些与 IRC 相关的东西(我写了很多东西,现在大约有 6 种不同的语言......我很着火!)并且实际上继续实现一个插件架构,它是在一种解释性语言中有做(读:滥用)的设施,比如堵塞整个脚本文件槽eval
在 Ruby 中(糟糕!)。
现在我想滥用 C 语言中的一些东西!
基本上我可以做三件事
- 在我的程序中定义一个简单的脚本语言
- 使用现有的,嵌入解释器
- 使用 libdl 在运行时加载 *.so 模块
我喜欢第三种,并且尽可能避免其他两种选择。也许我是某种受虐狂,但我认为这对于学习目的来说既有趣又有用。
从逻辑上讲,明显的“痛苦链”将是(从最低到最高)2 -> 1 -> 3,原因很简单,libdl 正在处理可能(并且将会)经常在我面前爆炸的原始代码。
所以这个问题向你提出,stackoverflow 的其他用户,你认为 libdl 能够胜任这项任务吗?甚至是一个现实的想法吗?
libdl
非常适合插件架构 - 在一定的范围内:-)。它在许多不同的软件中被大量用于此类目的。它适用于主程序和插件之间有明确定义的 API/接口,并且许多不同的插件实现相同的 API/接口的情况。例如,您的 IRC 客户端可能具有实现不同 IM 协议(Jabber、MSN、Sametime 等)的网关的插件 - 所有这些都非常相似,因此您可以定义一个具有“发送消息”等功能的 API ”、“检查回复”等 - 并编写一堆插件,每个插件都实现不同的协议。
它工作得不太好的情况是您希望插件对主程序的行为进行任意更改 - 例如,Firefox 插件可以更改浏览器选项卡的行为、它们的外观、添加/删除按钮等。这种事情在动态语言中更容易实现(这就是为什么 Firefox 的大部分都是用 javascript 实现的),如果这是您想要的自定义类型,那么您最好使用您的选项(2),并编写一个很多用户界面都是用脚本语言编写的...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)