工具转换(翻译)C去?

工具转换(翻译)C去?,c,go,code-translation,C,Go,Code Translation,使用什么工具将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 char

使用什么工具将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代码的某些部分需要手动更正,这是可以的。

据我所知,这样的工具还不存在。因此,您必须手动转换您的C代码

我不知道您想要转换的C代码有多复杂,但您可能需要记住,Go有一种“特殊”的处理方式。像和的用法一样。

我想现在还没有这样的(C到Go源代码转换)工具存在。你可以考虑制作自己的转换器。问题变成了:它值得吗,以及如何做到这一点

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

当然,和往常一样,邪恶在于细节

如果您想要一个转换器,您是否希望获得的Go代码可读且可编辑(那么任务会更困难,因为您希望保留代码的结构,并且还希望保留注释)?在这种情况下,您可能需要自己的C解析器(这是一项困难的任务)

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


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

我几乎可以肯定没有这样的工具,但在每种语言中,最好用自己的“编码风格”编写

还记得我们有多喜欢C预处理器技巧和指针的艺术作品吗?还记得在处理malloc/free或线程时花了多少心思吗? 围棋是不同的。您没有预处理器,但有闭包、带有方法的对象、接口、垃圾收集器、切片、goroutine和许多其他优秀特性

那么,为什么要转换代码而不是以更好更干净的方式重写代码呢

当然,我希望您不需要在C语言中编写1000K行代码,而需要移植才能运行:)

rsc是为了将基于C的Go编译器转换为Go而创建的

作为一个外部示例,akavel似乎试图使用它创建一个基于Go的lua:

是另一个项目,但它已经有一段时间没有被触及了。

看看SWIG,它将翻译C/C++标题,并将其包装为一个起点。然后您可以一点一点地移植部件。

查看此项目


详细描述见此

我没有看到与您的需求相匹配的工具,这听起来更像是要求为您编写一个工具,可能与此站点不匹配。@JoachimIsaksson已经存在类似“C到Java”或“C到Perl”的问题。这个问题也一样,你为什么要问?混合C&Go代码不是更简单吗?(GCC4.7有一个Go前端——仍然不完善,所以有时这是可能的)这个网站是关于以友好的方式互相帮助的。我要求所有的要求都被否决:)我可以将一些简单的C程序转换成Go,但这只是一个概念证明。但是你如何使用c2go将test.C程序转换成test.Go程序呢?Go还有一个调用C函数的方法,所以应该可以在Go中使用C库。