Solod: Go 可以成为更好的 C
摘要
Solod 是 Go 的一个严格子集,可编译为可读的 C11,零运行时,无GC,拥有丰富的标准库,让 Go 开发者获得系统级控制,同时为 C 程序员提供熟悉的工具链。
暂无内容
查看缓存全文
缓存时间: 2026/07/17 01:54
# Solod:Go 可以是更好的 C
来源:https://solod.dev/
Solod \(**So**\) 是 Go 的一个严格子集,可编译为常规 C 语言。
## 亮点
- 输入 Go,输出 C。编写常规 Go 代码,得到可读的 C11 输出。
- 零运行时。无垃圾回收、无引用计数、无隐式分配。
- 丰富的标准库。使用从 Go 标准库移植的熟悉类型和函数。
- 原生 C 互操作。从 So 调用 C、从 C 调用 So——无需 CGO,无额外开销。
- Go 工具开箱即用。语法高亮、LSP、代码检查及 "go test"。
So 支持结构体、方法、接口、切片、映射、多返回值以及 defer。默认所有内容都在栈上分配;堆分配通过标准库选择启用。对泛型提供有限支持,并发通过标准库提供,而非内置于语言中。
So 面向希望获得系统级控制力但又不想学习新语言的 Go 开发者,也适用于喜爱 Go 安全性、结构性和工具链的 C 程序员。
## 在线试玩
以下是一个 `main.go` 文件中的 Go 代码。点击*运行*执行,或*翻译*查看生成的 C 代码(`main.h` + `main.c`)。
```
package main
import "solod.dev/so/time"
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.")
p.Nums[0] = 42
println("1st lucky number is", p.Nums[0])
year := time.Now().Year()
println("The year is", year)
}
```
## 入门指南
虽然 So 尚未达到生产就绪状态,但我鼓励你在个人项目上尝试一下,或者如果你喜欢这个理念,可以持续关注。
在本地使用 So 的安装 (https://github.com/solod-dev/solod#installation) 和使用 (https://github.com/solod-dev/solod#usage) 说明。
快速概览的语言 (https://github.com/solod-dev/solod/blob/main/doc/spec.md) 和标准库 (https://github.com/solod-dev/solod/blob/main/doc/stdlib.md) 指南。
动手入门的 So By Example (https://github.com/solod-dev/example)。
查看内部实现或贡献的源代码 (https://github.com/solod-dev/solod)。
## 当前状态:v0.3 开发中
截至 2026 年 7 月,So 正在积极开发中。最新版本为 0.2 (https://github.com/solod-dev/solod/releases/v0.2.0),增加了对网络、WebAssembly 和独立模式的支持。下一版本 0.3 (https://github.com/solod-dev/solod/blob/main/doc/changelog.md#v03-in-progress) 将增加并发支持。
如有任何问题,欢迎在 GitHub 上 (https://github.com/orgs/solod-dev/discussions) 联系我们。
🧑💻Anton Zhiyanov (https://antonz.org/)
相似文章
就用Go
一篇带有强烈观点的开发者文章倡导使用Go编程语言,强调其简洁的语法、强大的标准库、高效的并发模型以及单二进制部署,作为对过于复杂的现代技术栈的实用替代方案。
Go 语言服务器可以实现令人印象深刻的代码导航
Go 语言服务器 (gopls) 为 Go 开发者提供了令人印象深刻的代码导航功能,增强了 IDE 的能力。
C语言中的Go风格并发
一篇详细的技术文章,探讨如何在C语言中复制Go的并发模型,使用POSIX线程、互斥锁、条件变量和工作池,作为Solod转译器项目的一部分。
Solod v0.2:网络支持、新目标、更友好的互操作
Solod v0.2 发布,新增网络支持(TCP、UDP、Unix 套接字)、新的编译目标(32位、WebAssembly、裸机)以及改进的 C 互操作性。
优化CPU密集型Go热路径的笔记
本文讨论了CPU密集型Go代码的性能优化技术,指出了泛型和接口抽象因无法内联而产生的局限性,并主张在热路径中使用代码复制。文章通过一个Brotli移植示例和深入基准测试进行了说明。