为了账号安全,请及时绑定邮箱和手机立即绑定

将C转换(翻译)为Go的工具?

将C转换(翻译)为Go的工具?

Go
千万里不及你 2021-04-30 14:15:51
使用什么工具将C源代码转换为Go源代码?例如,如果C代码包含:struct Node {    struct Node *left, *right;    void        *data;};char charAt(char *s, int i) {    return s[i];}该工具生成的相应Go代码应为:type Node struct {    left, right *Node    data        interface{}}func charAt(s string, i int) byte {    return s[i]}该工具不一定是完美的。如果生成的Go代码的某些部分需要手动纠正,则可以。
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

我想今天不存在这样的(C到Go源代码转换)工具。您可能会考虑制作自己的转换器。问题变成:这值得吗?如何做到这一点?

可能不值得付出努力,因为Go和C可能以某种方式可互操作。例如,如果您使用GCC 4.6(或将要发布的4.7,即最新快照),则可以小心地将C&Go代码链接在一起。

当然,像往常一样,罪恶在于细节。

如果需要转换器,是否要使获得的Go代码可读且可编辑(那么,由于要保留代码的结构,并且还希望保留注释,那么任务就比较困难了)?在这种情况下,您可能需要自己的C解析器(这是一项艰巨的任务)。

如果您不关心生成的Go代码的可读性,则可以例如扩展现有的编译器来完成工作。例如,GCC通过插件或MELT扩展是可扩展的,您可以自定义GCC(使用MELT或GCC自己的C插件),以将Gimple表示形式(GCC内部指令的主要内部表示形式)转换为不可读的Go代码。这以某种方式更简单(但仍需要一周以上的工作时间)。

当然,Go接口,通道甚至内存管理(垃圾收集的内存)都没有标准的C语言。


查看完整回答
反对 回复 2021-05-10
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

我几乎可以肯定没有这样的工具,但是恕我直言,每种语言最好以自己的“编码样式”编写。

还记得我们都热爱C预处理器技巧和真正具有指针的艺术作品吗?还记得处理malloc / free或线程需要花费多少精力吗?去是不同的。您没有预处理器,但是有闭包,带有方法的对象,接口,垃圾收集器,切片,goroutines和许多其他不错的功能。

那么,为什么要转换代码而不是用更好,更简洁的方式重写代码呢?

当然,我希望您没有C语言中要移植到Go的1000K行代码:)


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 335 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信