【问题标题】:How to build and maintain a library for multiple languages? [closed]如何构建和维护多语言库? [关闭]
【发布时间】:2015-12-08 10:31:53
【问题描述】:

我需要实现一个可以从多种语言调用的库——Java、Python、Perl,将来可能还会更多。我讨厌用多种语言一次又一次地实现(和维护)相同的东西。

我能想到的一个选择是用 C/C++ 编写核心功能并使用 SWIG 为目标语言生成绑定;或者自己编写绑定。

它不能成为独立服务的原因有以下三个。

还有其他成熟的替代品吗?我正在寻找可供比较的选项,然后再选择一个。

理想情况下,我希望使用源到源编译器或源代码生成器来实现。但我找不到支持所有上述语言的语言 - 未来可能会添加。

如果它们提供任何优于 SWIG 的优势,我可以考虑使用任何替代绑定生成器。

提前感谢您的任何指点!

【问题讨论】:

  • 这个问题虽然总体上是合理的,但在 Stack Overflow 上是不合适的。我们在这里并不真正做对话项目,您的问题是寻找战略对话而不是战术解决方案。
  • 一般来说,确定你需要库做什么,确定测试什么和修复错误需要大部分时间。如果您将大部分时间都花在不停地编写代码上,那么您将处于非常不寻常的境地。
  • @PeterLawrey:不,我不会不停地写代码。我不想用多种语言重新实现它的原因是为了避免代码重复。重复代码通常意味着库行为存在细微差异或存在细微错误。
  • @mah:对不起,我问这个问题的时候没有考虑这个角度,我以后会记住这一点。
  • @Darkstar 在某种程度上,不同的语言偏爱不同风格的 API,但我认为你的观点是,你只需要你想要的差异,而不是偶然的。

标签: java python c++ perl


【解决方案1】:

最简单的方法是使用简单的 API 用 C 语言编写库。每种非晦涩的语言都有某种方式与 C 代码交互。

根据 API 的风格,SWIG 可以节省一些时间来生成绑定;但除非它非常大且规则,否则您可能会发现手动编写绑定更容易。

某些语言(至少是您的问题中的 Python)具有 FFI 机制,可让您使用目标语言编写整个绑定,从而使其更易于部署和维护。请注意,其中大部分都专注于 C API,而不是 C++。

【讨论】:

    【解决方案2】:

    取决于您计划如何访问该库,是否可以通过 Web 服务公开公共 API?

    通过这种方式,您可以使用任何语言编写共享模块,并通过通用协议(例如 RESTfull Web 服务)访问它。

    看看微服务架构。

    【讨论】:

    • 由于某些限制,它不能成为 RESTful 服务。
    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 2011-07-12
    • 2015-09-25
    • 1970-01-01
    • 2018-02-11
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多