2014-01-10 52 views
2

這個問題關於設計/是相當開放式的。爲Haskell(和其他語言)打包C++庫的選項

我想使用來自Haskell的大型C++庫OpenCV。 目前最接近的解決方案可能是Arjun Comar嘗試改編Python/Java綁定生成器。 見here,herehere。 他的方法生成一個C接口,然後使用hsc2hs進行包裝。 由於OpenCV在其API中缺少參照透明性,並且經常使用調用參數進行輸出,所以對於Arjun完全成功的方法,他需要爲OpenCV定義一個新的API,並根據現有的一。

因此,看起來使用interface description languages (IDL)(例如SWIG,RPC with protobuf或Apache Thrift)可能不需要太多的額外工作來定義API。 除Haskell外,這將提供許多語言的接口。

我的問題:

  1. 有什麼比呷好一個免費服務器的解決方案? (我只想調用C++;我寧願不通過本地服務器)

  2. 如果沒有好的免服務器解決方案,我應該使用protobuf-with-RPC還是Thrift?

    1. 相關:Thrift的Haskell支持有多好? 從代碼看,它看起來像需要更新(我看到參考GHC 6)。

    2. 相關:什麼是一個好的protobuf-RPC解決方案?

+0

AlphaHeavy有一個用於Haskell的protobuf庫,這非常好。我建議看看。 –

回答

4
  1. 與Apache節儉,你哈斯克爾支持。你是對的,代碼通常不是「最新」的,但你很少關心。您可以在其他抽象層次上執行復雜的事情,並在消息傳遞級別儘可能簡化事情。

  2. Google Protobuf不支持Haskell,也不支持SWIG。據我所知,通過Protobuf,您可以獲得C++,Java,JavaScript和Python,這是Google的主要語言。看看this演示文稿。沒有比賽,Thrift和Protobuf是最好的內部。

在你的情況下,你似乎必須與Thrift一起去,因爲它支持Haskell。

+0

基於一些隨機的Google搜索和我在代碼中讀到的東西,我得到的印象是,Haskell位在Thrift的主服務器中無法正常工作。不過,我會試試看。 – emchristiansen

+1

有Haskell protobuf庫。我在一年左右沒有使用過它們,但是在2013年初,它們已經工作了。 –

2

這聽起來像C++的外國功能界面是你想要什麼:

HackageGithub

聲明:我沒有用它,只是聽說過的好東西。