这个问题是关于设计/是相当开放的。
我想使用来自Haskell的大型C ++库OpenCV。 目前最接近的解决方案可能是Arjun Comar试图改编Python / Java绑定生成器。 请参阅here,here和here。 他的方法生成一个C接口,然后使用hsc2hs进行包装。 由于OpenCV的API缺乏引用透明性,以及频繁使用调用参数进行输出,因此Arjun的方法完全成功,他需要为OpenCV定义一个新的API,并根据现有的API实现它。
因此,似乎可能没有太多额外的工作去全面使用interface description languages (IDL)来定义API,例如SWIG,protobuf-with-RPC或Apache Thrift。 这将提供除Haskell之外的许多语言的接口。
我的问题:
对于无服务器的解决方案,有什么比SWIG更好的吗? (我只想调用C ++;我宁愿不通过本地服务器。)
如果没有好的无服务器解决方案,我应该使用protobuf-with-RPC还是Thrift?
相关:Thrift的Haskell支持有多好? 从代码中看,它看起来需要更新(我看到对GHC 6的引用)。
相关:什么是一个很好的protobuf-with-RPC解决方案?
答案 0 :(得分:4)
使用Apache Thrift,您可以获得Haskell支持。你是对的,代码通常不是“最新的”,但你很少关心。您可以在其他抽象级别上执行复杂的操作,并在消息传递级别保持尽可能简单。
Google Protobuf不支持Haskell,也不支持SWIG。使用Protobuf,您可以获得C ++,Java,JavaScript和Python,据我所知,谷歌的主要语言。看看this演示文稿。没有比赛,Thrift和Protobuf是最好的内部。
在您的情况下,您似乎必须使用Thrift,因为它支持Haskell。
答案 1 :(得分:2)