15 c go code-translation
用什么工具将C源代码转换成Go源代码?
例如,如果C代码包含:
struct Node {
struct Node *left, *right;
void *data;
};
char charAt(char *s, int i) {
return s[i];
}
Run Code Online (Sandbox Code Playgroud)
该工具生成的相应Go代码应为:
type Node struct {
left, right *Node
data interface{}
}
func charAt(s string, i int) byte {
return s[i]
}
Run Code Online (Sandbox Code Playgroud)
该工具不需要完美.如果生成的Go代码的某些部分需要手动纠正,则可以.
Jos*_*hua 15
rsc创建了github.com/rsc/c2go,将基于c的Go编译器转换为Go.
作为一个外部的例子,akavel似乎试图用它来创建一个基于Go的lua:github.com/akavel/goluago/
github.com/xyproto/c2go是另一个项目,但它在一段时间内没有被触及.
我想现在不存在这样的(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 对应项。
| 归档时间: |
|
| 查看次数: |
10767 次 |
| 最近记录: |