haskell - 用于为 Haskell(和其他语言)包装 C++ 库的选项

标签 haskell protocol-buffers swig thrift idl

这个问题是关于设计的/是相当开放的。

我想使用OpenCV ,一个来自 Haskell 的大型 C++ 库。 目前最接近的解决方案可能是 Arjun Comar 尝试调整 Python/Java 绑定(bind)生成器。 请参阅here , here ,和here 。 他的方法生成一个 C 接口(interface),然后使用 hsc2hs 对其进行包装。 由于 OpenCV 在其 API 中缺乏引用透明度,并且频繁使用调用参数进行输出,为了使 Arjun 的方法完全成功,他需要为 OpenCV 定义一个新的 API,并根据现有 API 来实现它.

因此,使用 interface description languages (IDL) 来全面定义 API 似乎并不需要太多额外工作。 ,例如 SWIG、protobuf-with-RPC 或 Apache Thrift。 这将为 Haskell 之外的多种语言提供接口(interface)。

我的问题:

  1. 对于无服务器解决方案,还有比 SWIG 更好的吗? (我只想调用 C++;我不想通过本地服务器。)

  2. 如果没有好的无服务器解决方案,我应该使用 protobuf-with-RPC 还是 Thrift?

    1. 相关:Thrift 的 Haskell 支持有多好? 从代码来看,它看起来需要更新(我看到对 GHC 6 的引用)。

    2. 相关:什么是好的 protobuf-with-RPC 解决方案?

最佳答案

  1. 使用 Apache Thrift,您可以获得 Haskell 支持。你是对的,代码通常不是“最新的”,但你很少关心。您可以在其他抽象级别上执行复杂的操作,并在消息传递级别上使操作尽可能简单。

  2. Google Protobuf 不支持 Haskell,SWIG 也不支持。通过 Protobuf,你可以获得 C++、Java、JavaScript 和 Python,据我所知,这是 Google 的主要语言。看看this推介会。毫无争议,Thrift 和 Protobuf 是业内最好的。

在你的情况下,你似乎必须使用 Thrift,因为它支持 Haskell。

关于haskell - 用于为 Haskell(和其他语言)包装 C++ 库的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21034542/

相关文章:

c++ - 几个带有 SWIG 的 numpy 数组

java - 如何在 Android NDK 中通过 JNI 调用 C 函数以 Java 字符串形式返回数据

haskell - Elm 的信号系统可以作为 Haskell 库使用吗?

CMake 和 FindProtobuf

python - flatc 是否验证给定 JSON 的 Flatbuffer 模式的必填字段?

lua - 如何为接受并返回 2 个表的函数创建 SWIG 类型映射

python - Python 的 hexlify 和 unhexlify 在 Haskell 中的等价物是什么?

haskell - 使用 FFI 时 C99 bool 的等效 Haskell 类型是什么?

Haskell,坚持理解类型同义词

protocol-buffers - Protobuf,嵌套映射?