繁体   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