Solod: Go 可以成为更好的 C

Hacker News Top 工具

摘要

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

Lobsters Hottest

一篇带有强烈观点的开发者文章倡导使用Go编程语言,强调其简洁的语法、强大的标准库、高效的并发模型以及单二进制部署,作为对过于复杂的现代技术栈的实用替代方案。

C语言中的Go风格并发

Hacker News Top

一篇详细的技术文章,探讨如何在C语言中复制Go的并发模型,使用POSIX线程、互斥锁、条件变量和工作池,作为Solod转译器项目的一部分。

优化CPU密集型Go热路径的笔记

Hacker News Top

本文讨论了CPU密集型Go代码的性能优化技术,指出了泛型和接口抽象因无法内联而产生的局限性,并主张在热路径中使用代码复制。文章通过一个Brotli移植示例和深入基准测试进行了说明。