首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开发语言无关插件系统

开发语言无关插件系统
EN

Software Engineering用户
提问于 2017-10-07 15:49:37
回答 1查看 2K关注 0票数 5

我想做一些软件,严重依赖插件。我计划用C++编写它,很可能是用C++、Python和可能是Java构建插件,但最有可能是C++和python,但我不想排除任何可能更加晦涩或不常见的语言。如何设计一个可以在我的C++程序中使用的插件,这个插件可以不绑定到语言(或者允许最广泛的兼容性)?

我认为可以这样做的一种方法是在C++中提供一个API (因为它允许本机代码工作),并设计一个系统来调用带有参数传递为参数的可执行文件。只要我的程序和插件有一个规范什么将传递进来和应该发生什么与输出,这应该(理论上)是一个获得最大兼容性的有效方法。

插件将负责处理文件形式的数据(S),并输出更多的文件。插件完成的实际任务取决于插件,但是输出应该始终是一个文件。当有文件要处理时,插件将与我的程序并行运行,并被调用。一个插件可以同时运行多个实例,处理不同的文件。完成任务所需的时间是没有限制的(从我的程序的角度来看),但是完成得越快越好。插件不会直接影响主程序,只有当文件被赋予工作和收集结果时,这就是为什么我认为我的可执行策略可能适用于我的特定用例的原因。

EN

回答 1

Software Engineering用户

发布于 2017-10-07 16:36:05

进程边界插件是一个非常适合的地方,你必须作出的妥协(在下面讨论)是可以接受的。

我工作的项目有许多不同类型的插件,对于我们的应用程序,妥协不会造成任何问题。与他们的接口有很多种方法;我们的设计选择是插件程序通过标准I/O与JSON通信,自从今年早些时候投入生产以来,我们对这一决定非常满意,因为它使我们作为开发人员和用户更容易扩展我们的系统。

优点:

  • 开发者的灵活性。插件可以用作者觉得舒服的任何语言编写,也可以是适合工作的工具。
  • 进化能力。您的系统技术栈可以更改,而不必同时重写所有插件。
  • 安全。如果一个插件以灾难性的方式失败,你的程序足够接近听到卡布姆,但距离足够远,它不会被任何弹片击中。
  • 可测试性。这个插件可以在命令行进行测试和修改,而不必将它们与您的系统或复杂的测试跳汰机连接起来。

缺点,两者都与开销有关:

  • 序列化。您传递给另一个程序的数据必须是某种标准格式,这种格式可能与内存中的数据不一样。这意味着在事务的两端都会花费时间编码和解码数据。您还必须选择一种格式,该格式的库可以像插件作者可能使用的那样广泛地用于多种语言。
  • 启动。如果您对那些使用时间较短且具有较高启动开销的程序进行大量调用(Python是后者的典型子程序),您会发现系统上的负载增加了很多。我们在我的项目中遇到了这个问题,并将其中一个插件从单一用途切换到流式传输,在该插件中,程序只启动一次,每次都有一小块工作要处理。(这是伴随着维护不同大小池的代码,以便未使用的程序不会逗留太久。)对于您的应用程序来说,这听起来不像是一个问题,但对于其他人来说,这加上序列化和通信可能会增加不可接受的延迟。
票数 7
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/358750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档