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

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


千万里不及你
浏览 368回答 3
3回答

青春有我

我想今天不存在这样的(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语言。

慕田峪4524236

我几乎可以肯定没有这样的工具,但是恕我直言,每种语言最好以自己的“编码样式”编写。还记得我们都热爱C预处理器技巧和真正具有指针的艺术作品吗?还记得处理malloc / free或线程需要花费多少精力吗?去是不同的。您没有预处理器,但是有闭包,带有方法的对象,接口,垃圾收集器,切片,goroutines和许多其他不错的功能。那么,为什么要转换代码而不是用更好,更简洁的方式重写代码呢?当然,我希望您没有C语言中要移植到Go的1000K行代码:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go