簡體   English   中英

用go + swig替換c ++

[英]replace c++ with go + swig

我最近問了這個問題https://softwareengineering.stackexchange.com/questions/129076/go-instead-of-cc-with-cgo並得到了一些非常有趣的輸入。 但是在我的問題中有一個錯誤:我認為cgo也可以用來訪問c ++代碼,但這是不可能的。 相反,你需要使用SWIG。

go faq說:“cgo程序為”外部函數接口“提供了機制,允許從Go代碼安全地調用C庫.SWIG將此功能擴展到C ++庫。”

我的問題:是否可以通過SWIG + Go訪問高級c ++框架(如QT)並提高工作效率? 我想使用Go作為“腳本語言”來利用c ++庫。

你有沒有經歷過去和swig? 是否有必須注意的陷阱?

更新/答案 :我也通過IRC問過這個問題,我認為這個問題已經解決了:

SWIG是一種相當干凈的方式來連接來自其他語言的c ++代碼。 遺憾的是,將c ++的類型與go之類的東西相匹配可能非常復雜,在大多數情況下,你必須自己指定映射。 這意味着SWIG是利用現有代碼庫重用已編寫算法的好方法。 然而,像Qt這樣的庫映射會花費你的年齡。 記住它肯定是可能的,但你不想這樣做。

那些來到這里進行gui編程的人可能想嘗試go-gtk或go版本的wxWidgets。

可能嗎? 是。

可以在相當短的時間內完成嗎? 沒有。

如果你回過頭來看看那些采用大型框架並嘗試在其上放置抽象層的項目,你會發現大多數都是“不完整”的。 您可以做一個相當不錯的開始並獲得一些初始包裝器,但是通常即使使用自動化工具(有幫助,但是有很多底層代碼),解決簡單案例的工作也需要時間。永遠不是一個完整的解決方 然后......你得到了令人討厭的剩余10%,這將永遠帶你(好吧,真的很長一段時間)。 然后首先想想它是如何變化的目標。 例如,Qt即將發布下一次重大改寫。

通常,堅持使用框架所設計的框架語言是最安全的。 雖然許多項目本身都有語言擴展。 例如,對於Qt,您應該查看QML,它提供(在許多其他事項中)與Qt綁定的javascript。 有點。 但它可能符合您的“腳本”要求。

關於這個問題的相關更新:現在可以使用cgo與C ++進行交互, 這個CL合並為Go 1.2。 但是,對於類似C的函數調用是有限的,並且不支持類,方法和C ++好東西(我希望如此)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM