我在跨平臺Qt C++應用程序中使用庫函數的快速函數語言有哪些選擇?在C++應用程序中使用庫的良好跨平臺功能語言?
似乎幾乎所有的語言(功能與否)都可以通過簡單的方式調用C/C++代碼。我想換一種方式 - 在Qt中使用C++編寫一個應用程序,用於有狀態的業務邏輯,圖形用戶界面和其他東西,但下拉菜單並使用函數式語言作爲核心計算庫。
哪一個很容易以這種方式使用?例如,可以將OCaml代碼編譯爲靜態庫,然後由C++應用程序使用?
感謝, 裏卡德
我在跨平臺Qt C++應用程序中使用庫函數的快速函數語言有哪些選擇?在C++應用程序中使用庫的良好跨平臺功能語言?
似乎幾乎所有的語言(功能與否)都可以通過簡單的方式調用C/C++代碼。我想換一種方式 - 在Qt中使用C++編寫一個應用程序,用於有狀態的業務邏輯,圖形用戶界面和其他東西,但下拉菜單並使用函數式語言作爲核心計算庫。
哪一個很容易以這種方式使用?例如,可以將OCaml代碼編譯爲靜態庫,然後由C++應用程序使用?
感謝, 裏卡德
Haskell有這個能力,但使用Qt/QMAKE並與GHC構建過程中的相互作用可能需要一些技巧把工作:
http://www.haskell.org/haskellwiki/Calling_Haskell_from_C
還有一個叫HaskellDirect項目,這似乎相似你的目的還有:
我很想去這條路上。這是一個小型的非商業項目,除了我的業餘時間外,沒有多少風險。我假設haskell運行時不會有任何併發問題,並且我可以同時從多個線程調用庫? 雖然也許這是一個主觀問題,沒有明確的「正確」答案,但我稍後可能會接受這個答案。 – Rickard 2010-06-25 08:00:58
我對Lisp的經驗太少,但我不知道Lisp編譯器是否可以生成c-consumable字節碼,因此我只需調用庫中的函數?我想避免必須管理嵌入在應用程序中的解釋器(就像將Python嵌入到C應用程序中一樣,必須使用引用計數和PyObject * s來調用函數)。 – Rickard 2010-06-24 10:42:31
Şerbănoiu:是的,但AutoLisp是專門爲了嵌入AutoCAD而創建的。這並不意味着所有Lisp都會自動擁有可以從C++代碼輕鬆調用其功能的屬性。請注意,他並不是試圖將語言嵌入到他的C++應用程序中,而是要從他的應用程序中調用另一種語言編寫的編譯庫代碼。 – sepp2k 2010-06-24 10:43:21
我會忍不住要看看qtHaskell並做整個事情在Haskell。我的意見是基於Don Stewart在xmonad in Haskell上的卓越成就。
這很誘人,但我想盡可能少地依賴圖書館的端口(如qt)。當涉及到狀態保持邏輯時,某些事情對C++中的類也很容易實現。 無論如何感謝您的回答 - 我一定會考慮這種可能性。 – Rickard 2010-06-25 08:03:14
Lisp和Haskell是優秀的函數式語言,但如果我們考慮將C/C++代碼與語言綁定在一起的簡便性,我推薦lua。
將C函數綁定到lua上非常簡單,解釋器是超級緊湊且易於構建的庫,它是最快速的腳本語言之一,並且,與luabind一起,您可以輕鬆地綁定C++類,模板實例化等等。過去我不得不爲許多腳本語言進行綁定,而且我從來沒有發現過像lua一樣直接。如果您更願意通過swig綁定某些東西,這將允許您的應用程序支持多種腳本語言,它也支持swig。從純粹的語言角度來看,lua的元功能/元編程方面(與lisp相當)使得支持各種編程範例變得非常容易,儘管我個人認爲它最適合於函數式編程。它非常可定製,非常適合嵌入式應用。
但是,由於您已經在使用qt,因此qtHaskell也可能是一個不錯的選擇。
也許Lua對於這樣的東西來說是一個更好的選擇,但我知道嵌入並從C/C++應用程序運行Python代碼帶來的麻煩。與僅僅初始化一些運行時然後調用函數相比,要做更多的工作。儘管如此,我會看看Lua文檔中的C-api。我聽說了很多關於Lua的速度,所以它肯定很有趣。 謝謝你的回答。 – Rickard 2010-06-25 08:07:39
另外:速度依賴性,因爲功能代碼會盡可能快地執行一些繁重的計算(使用有限差分方法解決偏微分方程)。 – Rickard 2010-06-24 10:45:15