网易首页 > 网易号 > 正文 申请入驻

Go被砍7成特性后,C语言程序员集体破防了

0
分享至

Go语言有25个关键字,Solod只用了9个。这不是精简,是截肢——但截肢后居然能跑。

Solod(简称So)是个刚开源的项目,做了一件听起来很荒唐的事:把Go语言砍掉70%的特性,只留一个严格子集,然后完整翻译成C代码。零运行时、手动内存管理、源码级互操作——这三个词放在一起,像是把Rust和C的执念强行塞进Go的语法壳里。

作者没有解释为什么叫"Solod",但社区有人猜是"So long, Go runtime"的缩写。不管真假,这个名字确实贴切。

从"Hello World"到裸机:一次翻译的解剖

看一段最简单的Go代码怎么被肢解。你写:

```go package main type Person struct { Name string Age int Nums [3]int } func (p *Person) Sleep() int { p.Age += 1 return p.Age } func main() { p := Person{Name: "Alice", Age: 30} p.Sleep() println(p.Name, "is now", p.Age, "years old.") } ```

Solod吐出两份文件。头文件`main.h`里,Go的`string`变成`so_String`结构体,方法变成裸函数指针:

```c typedef struct main_Person { so_String Name; so_int Age; so_int Nums[3]; } main_Person; so_int main_Person_Sleep(void* self); ```

实现文件`main.c`更直白。Go的隐式指针解引用没了,你得自己写`p->Age += 1`。`println`变成宏展开的`so_println`,字符串格式化用`%.*s`这种C标准写法——Go程序员在这里会愣一下,C程序员会觉得回家了一样

整个翻译过程没有垃圾回收的隐藏代码,没有goroutine调度器的初始化,没有反射的元数据表。生成的C代码就是你写的逻辑,一字一句对应。

被砍掉的和留下的:一份残酷的取舍清单

Solod的支持列表读起来像Go语言的悼词。留着的是:结构体、方法、接口、切片、多返回值、defer。这些够写大部分业务逻辑。

被砍掉的是:通道(channel)、goroutine、闭包、泛型。还有反射、CGO、panic/recover的完整机制。作者的原话是"To keep things simple"——但谁都知道,砍掉goroutine等于抽掉了Go的脊椎

这个取舍暴露了一个尴尬的事实:Go的并发原语和运行时深度绑定,想要零运行时,就得连根拔起。Solod的选择是,宁可不要并发,也要可预测的内存布局。

留下的`defer`是个例外。C语言没有finally块,资源泄漏是老大难。Solod把`defer`翻译成C的`goto`链——没错,就是Dijkstra骂了六十年的那个`goto`。但在这里,它成了自动生成的清理代码的跳转到点。一种语法糖,两种截然不同的实现哲学

谁需要这个怪胎?嵌入式和 FFI 的两难

Solod的README很诚实:目标是"systems programming in C, but with Go's syntax"。不是取代Go,是给那群必须用C、但恨透了C的人一个逃生通道。

具体场景有三类。第一类是嵌入式开发,8KB内存容不下Go的运行时,但手写C容易出错。Solod生成的C代码没有隐藏分配,栈帧大小编译期确定,适合静态分析工具。

第二类是C库的FFI绑定。用Go写绑定层,翻译后直接link进C项目,不需要cgo的指针传递规则。一个实际例子:某数据库团队用Solod重写了客户端驱动,延迟从cgo的微秒级降到纳秒级——因为消除了Go和C之间的线程切换开销。

第三类更微妙:教学。Go的语法干净,适合教编程;但学生最终要理解内存和指针。Solod是个中间态——你先写Go风格的代码,再看它翻译成什么样的C,逐步揭开抽象层。

但限制也很硬。没有泛型,你得手写`IntSlice`和`StringSlice`。没有闭包,回调函数必须传显式的`void* userdata`。没有goroutine,并发得自己调`pthread`——这时候你会发现,Solod生成的C代码和手写C一样难搞

工具链的野心:不只是翻译器

Solod的命令行设计很Go化。`so translate`输出C代码,`so build`一步到位编译,`so run`像脚本一样执行。它认Go module,不认单文件——这个选择暴露了作者的预期:你是来正经做项目的,不是写leetcode。

标准库的分层更有意思。高层包模仿Go的`math`、`strings`;低层包直接wrap libc。一个细节:`so/math.Sqrt`在x86-64上可能直接生成`sqrtsd`指令,而不是调用C的`sqrt`——作者在做跨平台的内联优化,但文档里没提,得看生成的汇编

在线Playground是个聪明的传播工具。你可以写Go代码,实时看C输出,不用装任何东西。这对犹豫要不要引入的团队很重要:先验证你的代码能不能翻译,再决定迁移成本。

但"rough around the edges"的警告不是客气。GitHub issue里有人报告:嵌套接口类型会生成错误的vtable,某些切片操作在-O2优化下会越界。项目才开源几周,这些坑需要踩。

社区的反应分裂得很有意思。Hacker News上,C程序员说"终于有人做了",Go程序员说"这失去了Go的灵魂"。一个高赞评论是:"这就像把Python翻译成C——语法还在,但写代码的快感没了。"

Solod的作者没有回应这些争论。 roadmap里列着泛型的实验性支持、更好的错误信息、Windows移植。但goroutine不在列表上——那个"So"里的"long",可能是永别。

如果让你选:用Solod写能翻译成C的Go代码,还是直接学Rust?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
果然阳谋在任何面前都是无敌的!网友:把水搅混了,也是一种智慧

果然阳谋在任何面前都是无敌的!网友:把水搅混了,也是一种智慧

夜深爱杂谈
2026-04-07 17:50:08
为啥肺癌发现就是晚期?提醒:若有1粗1麻2痛,要及早筛查

为啥肺癌发现就是晚期?提醒:若有1粗1麻2痛,要及早筛查

鬼菜生活
2026-04-09 18:02:27
当你觉得自己没用时,可以点进来看看元宇宙的现状。

当你觉得自己没用时,可以点进来看看元宇宙的现状。

差评XPIN
2026-04-08 00:13:54
李思思离开央视后现状:一手好牌打稀烂,真不怪别人

李思思离开央视后现状:一手好牌打稀烂,真不怪别人

风信子的花
2026-04-09 09:57:37
蓝营集体表态,郑丽文再获强援!卢秀燕柯志恩改口,彻底认清现实

蓝营集体表态,郑丽文再获强援!卢秀燕柯志恩改口,彻底认清现实

孤城落叶
2026-04-09 22:10:26
4月必办!2个证件全国发放,人人都有,没领的抓紧办

4月必办!2个证件全国发放,人人都有,没领的抓紧办

混沌录
2026-04-08 18:28:12
茅台代销政策落地:部分专卖店生肖等稀缺品“秒空” 小酒“不用抢”

茅台代销政策落地:部分专卖店生肖等稀缺品“秒空” 小酒“不用抢”

财联社
2026-04-09 20:39:04
“下次绝对把你撞了”,浙江一保时捷车主违规越线逆行,并当交警面威胁

“下次绝对把你撞了”,浙江一保时捷车主违规越线逆行,并当交警面威胁

大象新闻
2026-04-09 18:45:03
CBA正在“杀死”中国男篮!6大乱象不除,我们过不了日韩这一关

CBA正在“杀死”中国男篮!6大乱象不除,我们过不了日韩这一关

蛋疼体育
2026-04-07 17:54:23
李亚鹏直播表示心疼张雪捐冠军奖杯:自己朋友拍到就把奖杯送回去

李亚鹏直播表示心疼张雪捐冠军奖杯:自己朋友拍到就把奖杯送回去

观鱼听雨
2026-04-09 21:17:28
宿迁一景区海选项羽NPC,来自徐州的刘姓男子夺冠!景区回应:真不是故意安排

宿迁一景区海选项羽NPC,来自徐州的刘姓男子夺冠!景区回应:真不是故意安排

大风新闻
2026-04-07 15:31:07
"猪八戒"马德华摊牌了!透露陈丽华追悼会细节,迟重瑞状态曝光

"猪八戒"马德华摊牌了!透露陈丽华追悼会细节,迟重瑞状态曝光

观察鉴娱
2026-04-09 10:22:56
"我不要活了!"上海一阿婆崩溃,买了近30年的保险全被退!警方:若继续持有价值百万

"我不要活了!"上海一阿婆崩溃,买了近30年的保险全被退!警方:若继续持有价值百万

台州交通广播
2026-04-09 22:32:54
不要再盼房价暴跌了!2026年最惨的不是炒房客,而是我们普通人!

不要再盼房价暴跌了!2026年最惨的不是炒房客,而是我们普通人!

细说职场
2026-04-08 11:31:03
库里FMVP率全历史垫底?25%扎心数字撕开NBA最大黑幕

库里FMVP率全历史垫底?25%扎心数字撕开NBA最大黑幕

茅塞盾开本尊
2026-04-07 13:50:54
特朗普称停火“不包括”黎巴嫩和黎真主党

特朗普称停火“不包括”黎巴嫩和黎真主党

财联社
2026-04-08 23:12:39
巴基斯坦总理表态

巴基斯坦总理表态

极目新闻
2026-04-08 09:52:09
郭艾伦时隔近一年再向周深道歉:无意伤害任何人

郭艾伦时隔近一年再向周深道歉:无意伤害任何人

懂球帝
2026-04-07 23:14:17
你敢地面入侵,我就派志愿军,伊朗迎来新帮手,海湾7国沉默不语

你敢地面入侵,我就派志愿军,伊朗迎来新帮手,海湾7国沉默不语

国际阿尝
2026-04-06 22:56:37
吴镇宇问懵短剧顶流王格格:晒成绩单还是来炫耀?李诚儒补刀:回你的短剧赛道

吴镇宇问懵短剧顶流王格格:晒成绩单还是来炫耀?李诚儒补刀:回你的短剧赛道

可乐谈情感
2026-04-09 01:07:14
2026-04-09 23:19:00
报错免疫体
报错免疫体
一名在需求评审和数据异常中反复横跳的产品运营。
1017文章数 9关注度
往期回顾 全部

科技要闻

Meta凌晨首发闭源大模型 扎克伯格又行了?

头条要闻

白宫打击伊朗决策内幕披露:鲁比奥曾直言以计划乱扯

头条要闻

白宫打击伊朗决策内幕披露:鲁比奥曾直言以计划乱扯

体育要闻

8万人面前心脏骤停 现在他还站在球场上

娱乐要闻

金莎官宣结婚 与老公孙丞潇相差18岁

财经要闻

停火又悬了,最糟糕的情况要来了?

汽车要闻

文飞掌舵,给神行者带来了什么?

态度原创

本地
房产
旅游
数码
手机

本地新闻

12吨巧克力有难,全网化身超级侦探添乱

房产要闻

利润暴跌44%!那个春节被骂惨了的海峡股份 正在经历什么?

旅游要闻

海南“三月三” 白沙邀您赴约

数码要闻

TP-LINK普联推出TL-7DR3600双频Wi-Fi 7路由器,169.9元

手机要闻

摩托罗拉小折叠渲染图曝光,大小折叠屏都将发布

无障碍浏览 进入关怀版