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
Solod 是一种新的系统编程语言,它是 Go 的一个子集,复用 Go 的工具链和标准库,同时编译为 C11,提供手动内存管理。
Solod 0.4:改进的C互操作性
Solod 0.4通过自动生成绑定、更多独立软件包和为开发者改进的工具,增强了C互操作性。
独立运行
本文介绍了如何将一个名为 Solod 的 Go 到 C 翻译工具变得独立运行的技术,方法是移植标准库包以使其无需 libc 即可工作,使用独立头文件和编译器内建函数等手段。
Golang开发者应该尝试Odin
本文主张Golang开发者应该探索Odin,这是一种新的编程语言,通过内存管理和数组编程等功能解决了Go的一些局限性。
就用Go
一篇带有强烈观点的开发者文章倡导使用Go编程语言,强调其简洁的语法、强大的标准库、高效的并发模型以及单二进制部署,作为对过于复杂的现代技术栈的实用替代方案。