replace c++ with go + swig

replace c++ with go + swig

本文关键字:swig go with c++ replace      更新时间:2023-10-16

我最近问了这个问题https://softwareengineering.stackexchange.com/questions/129076/go-instead-of-c-c-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这样的库会花费你很长时间。请注意,这肯定是可能的,但你不想这么做。

那些来这里使用go进行gui编程的人可能想要尝试go-gtk或wxWidgets的go版本。

有可能吗?对

能在相当短的时间内完成吗?编号

如果你回头看看其他采用大型框架并试图在其上添加抽象层的项目,你会发现大多数都是"不完整的"。你可能会有一个相当好的开始,并准备好一些初始的包装器,但通常情况下,当有很多底层代码需要包装时,即使是解决简单案例的工作也需要时间,即使是使用自动化工具(这很有帮助,但从来都不是一个完整的解决方案)。然后。。。你会得到剩下的10%,这将永远带你走(好吧,至少真的很长一段时间)。然后想想它最初是如何成为一个不断变化的目标的。例如,Qt即将发布下一个主要的重写版本。

一般来说,最安全的做法是坚持使用框架的设计语言。尽管许多项目本身都有语言扩展。例如,对于Qt,您应该查看QML,它提供了一个与Qt绑定的javascript。有点。但它可能满足您的"脚本"需求。

关于这个问题的相关更新:现在可以使用带有这个CL的cgo与C++进行交互,这个CL已为Go 1.2合并。然而,它仅限于类似C的函数调用,并且不支持类、方法和C++好东西(我希望目前还不支持)。