Go 代码编译为 C 代码

2020-02-27 12:29:13 +08:00
 yatseni
https://github.com/kitech/cygo

额外添加一点语法,给内置的 string/array/map 加方法,用着更方便。
4799 次点击
所在节点    Go 编程语言
16 条回复
guonaihong
2020-02-27 12:44:20 +08:00
建议,加些文档。example 最好在 readme 里面有连接可以点进去。
Mitt
2020-02-27 12:49:17 +08:00
不是很懂为什么认为把 go 的功能用 c 再编译一遍能比 go 高效,难道认为 go 是脚本语言吗?这样下去的结果不是又实现了一个 go?
CismonX
2020-02-27 13:06:12 +08:00
很赞。最近我也在学习编译原理,希望这个项目能对我有所帮助
FrankHB
2020-02-27 14:17:40 +08:00
不需要 try 只需要 catch 是打算长什么样的?就是隐含了 expand 到 block,顺带不让用户选择要 catch 的范围?
janxin
2020-02-27 14:33:38 +08:00
LLVMGo 直接编译也可以吧?
yatseni
2020-02-27 14:40:14 +08:00
@FrankHB

`catch` 语法这个样子的,catch 范围是整个函数级的,不太喜欢 try {} 块,改变了代码的层级结构:
https://github.com/kitech/cygo/blob/0f213381f06116d0f6f2ca6bf2ccbe70ab088882/bysrc/tpkgs/catch2/t.go#L18
yatseni
2020-02-27 14:46:27 +08:00
@janxin 从 LLVMGo 进度上看好像不会大力开发,还不如像 tinygo, mingo 这样第三方的
FrankHB
2020-02-27 14:55:44 +08:00
看来和我理解的差不多。
按我的口味,我不喜欢 try ... catch ... 这种要求语法上是内嵌“代码块”。技术意义上,这种 try 和 catch 必须是“语法”,其中 ... 不能一等对象,因此整个基本上不得不用宏实现(如 https://gist.github.com/sebfisch/2235780 )而不能拆分成函数。
不过都打算直接内建在语言里写死了,这倒是无所谓了。
ai277014717
2020-02-27 15:55:19 +08:00
包大小是个问题不过用 gzexe upx 啥的大概能减少一半大小
dick20cm
2020-02-27 16:44:22 +08:00
v 站的老哥个个都是人才,楼主水平估计可以一个人吊打沸腾厂方舟编译器
janxin
2020-02-27 17:50:17 +08:00
@yatseni llvmgo 确实力量不足,算是个人项目。tinygo 之类的和 llvmgo 还不一样,他们没有全兼容 Go 功能的预期,主要是把语言使用场景做了拓展,无论语言本身功能和标准库支持都不在一个水平上
secondwtq
2020-02-27 17:56:38 +08:00
粗略翻了一下 commit history,发现已经做了一年多了 ...

问下 history 里面的 drswinghead,kitech,egitop,pwaller 这几个 ID 背后有几个人?
yatseni
2020-02-27 18:28:55 +08:00
@secondwtq 一个人,不同的 git 环境,配置不一样

@janxin 所以对这项目有点用不上的感觉
ChristopherWu
2020-02-28 11:28:22 +08:00
@yatseni 那个,我可以给楼主加一个错误处理的语法糖吗。。
dexter
2020-02-28 12:59:31 +08:00
已点赞
yatseni
2020-02-29 14:36:48 +08:00
@ChristopherWu 我看可以,不妨说说

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/648000

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX