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

时间:2014-01-10 01:21:18

标签: haskell protocol-buffers swig thrift idl

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

我想使用来自Haskell的大型C ++库OpenCV。 目前最接近的解决方案可能是Arjun Comar试图改编Python / Java绑定生成器。 请参阅hereherehere。 他的方法生成一个C接口,然后使用hsc2hs进行包装。 由于OpenCV的API缺乏引用透明性,以及频繁使用调用参数进行输出,因此Arjun的方法完全成功,他需要为OpenCV定义一个新的API,并根据现有的API实现它。

因此,似乎可能没有太多额外的工作去全面使用interface description languages (IDL)来定义API,例如SWIG,protobuf-with-RPC或Apache Thrift。 这将提供除Haskell之外的许多语言的接口。

我的问题:

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

  2. Google Protobuf不支持Haskell,也不支持SWIG。使用Protobuf,您可以获得C ++,Java,JavaScript和Python,据我所知,谷歌的主要语言。看看this演示文稿。没有比赛,Thrift和Protobuf是最好的内部。

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

答案 1 :(得分:2)

听起来像C ++的外部函数接口就是你想要的:

HackageGithub

免责声明:我没有使用它,只听到了很好的事情。