Golang Go语言代码编译为C代码

发布于 1周前 作者 nodeper 来自 Go语言

Golang Go语言代码编译为C代码
https://github.com/kitech/cygo

额外添加一点语法,给内置的 string/array/map 加方法,用着更方便。

17 回复

建议,加些文档。example 最好在 readme 里面有连接可以点进去。

更多关于Golang Go语言代码编译为C代码的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不是很懂为什么认为把 go 的功能用 c 再编译一遍能比 go 高效,难道认为 go 是脚本语言吗?这样下去的结果不是又实现了一个 go?

很赞。最近我也在学习编译原理,希望这个项目能对我有所帮助

不需要 try 只需要 catch 是打算长什么样的?就是隐含了 expand 到 block,顺带不让用户选择要 catch 的范围?

LLVMGo 直接编译也可以吧?



catch 语法这个样子的,catch 范围是整个函数级的,不太喜欢 try {} 块,改变了代码的层级结构:
https://github.com/kitech/cygo/blob/0f213381f06116d0f6f2ca6bf2ccbe70ab088882/bysrc/tpkgs/catch2/t.go#L18

从 LLVMGo 进度上看好像不会大力开发,还不如像 tinygo, mingo 这样第三方的

看来和我理解的差不多。
按我的口味,我不喜欢 try … catch … 这种要求语法上是内嵌“代码块”。技术意义上,这种 try 和 catch 必须是“语法”,其中 … 不能一等对象,因此整个基本上不得不用宏实现(如 https://gist.github.com/sebfisch/2235780 )而不能拆分成函数。
不过都打算直接内建在语言里写死了,这倒是无所谓了。

包大小是个问题不过用 gzexe upx 啥的大概能减少一半大小

v 站的老哥个个都是人才,楼主水平估计可以一个人吊打沸腾厂方舟编译器

llvmgo 确实力量不足,算是个人项目。tinygo 之类的和 llvmgo 还不一样,他们没有全兼容 Go 功能的预期,主要是把语言使用场景做了拓展,无论语言本身功能和标准库支持都不在一个水平上

粗略翻了一下 commit history,发现已经做了一年多了 …

问下 history 里面的 drswinghead,kitech,egitop,pwaller 这几个 ID 背后有几个人?

一个人,不同的 git 环境,配置不一样

所以对这项目有点用不上的感觉

那个,我可以给楼主加一个错误处理的语法糖吗。。

我看可以,不妨说说

在Go语言(Golang)社区中,直接将Go代码编译为C代码并不是一个直接支持或常见的操作。Go语言和C语言在语法、运行时、内存管理等方面存在根本差异,因此这种转换在技术上相当复杂且通常不实用。

Go语言编译的目标通常是生成高效的机器码或中间表示(如WebAssembly),而不是C代码。Go编译器(go tool compile)和链接器(go tool link)负责将Go源代码转换为可执行文件或共享库,这些输出并不与C代码直接兼容。

如果你需要在Go代码中调用C代码,或者将C代码与Go代码集成,Go提供了Cgo工具,它允许你在Go代码中调用C的函数、使用C的数据结构,甚至包含C的头文件。通过Cgo,你可以在Go项目中嵌入C代码,但这不是将Go代码转换为C代码,而是实现两种语言之间的互操作性。

如果你需要将Go程序的功能以某种形式暴露给C环境,你可能需要:

  1. 使用Cgo在Go中调用C代码,同时从Go中导出必要的接口。
  2. 将Go程序的功能封装为共享库(如.so文件),并通过C代码调用这些共享库中的函数。

总之,虽然直接将Go代码编译为C代码并不可行,但Go提供了丰富的工具(如Cgo)来实现与C代码的互操作,从而满足跨语言集成的需求。

回到顶部