gpt4 book ai didi

c - 使用 libdl 的 C 语言插件架构

转载 作者:太空狗 更新时间:2023-10-29 17:22:30 25 4
gpt4 key购买 nike

我一直在玩弄,用 C 语言编写了一个小型 IRC 框架,现在我将使用一些核心功能对其进行扩展 - 但除此之外,我希望它可以通过插件进行扩展!

直到现在,每当我写一些 IRC 相关的东西(我写了很多,现在用大约 6 种不同的语言......我着火了!)并且实际上继续实现插件架构,它在一个解释性语言具有执行(读作:滥用)的功能,就像在 Ruby 中通过 eval 插入整个脚本文件(糟糕!)。

现在我想在 C 中滥用一些东西!

基本上我可以做三件事

  1. 在我的程序中定义一个简单的脚本语言
  2. 使用现有的,嵌入解释器
  3. 使用 libdl 在运行时加载 *.so 模块

我喜欢第三个,如果可能的话,我会尽量避免使用其他两个选项。也许我是某种受虐狂,但我认为这对于学习目的既有趣又有用。

从逻辑上讲,明显的“痛苦链”是(从最低到最高)2 -> 1 -> 3,原因很简单,libdl 正在处理可能(并且将会)在我面前爆炸的原始代码通常情况下。

所以这个问题向您提出,stackoverflow 的其他用户,您认为 libdl 是否能够胜任这项任务,甚至是一个现实的想法?

最佳答案

libdl 非常适合插件架构 - 在一定范围内 :-)。它在很多不同的软件中被大量用于这种目的。它适用于主程序和插件之间有定义良好的 API/接口(interface),并且许多不同的插件实现相同的 API/接口(interface)的情况。例如,您的 IRC 客户端可能具有实现不同 IM 协议(protocol)(Jabber、MSN、Sametime 等...)网关的插件——所有这些都非常相似,因此您可以定义一个具有“发送消息”等功能的 API "、"检查回复"等 - 并编写一堆插件,每个插件都实现了不同的协议(protocol)。

效果不佳的情况是您希望插件对主程序的行为进行任意更改 - 例如,Firefox 插件可以更改浏览器选项卡的行为、它们的外观、添加/删除按钮等。这种事情用动态语言更容易实现(因此为什么大部分 Firefox 都是用 javascript 实现的),如果这是你想要的那种定制,你可能会更好地选择(2),并编写一个您的许多 UI 都是脚本语言...

关于c - 使用 libdl 的 C 语言插件架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2882771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com