返回首页

Solod:无 GC 的 Go,可编译至 C

Solod 是一种开源语言,是 Go 的子集,可转译至 C11 并具有手动内存管理。支持无 GC 的关键 Go 结构、通道和协程。在内存和字符串操作中性能高于 Go。

开源 Solod:用于 C 开发的 Go 子集
Advertisement 728x90

# Solod:手动内存管理和 C 编译的 Go 子集

Solod (So) 是一个开源项目,提供 Go 的一个子集,可以转译为 C11。该代码可以使用 GCC、Clang 或 zig cc 编译,无需运行时或垃圾回收器。转译器使用 Go 编写,采用 BSD 许可,支持 Linux、macOS 和 Windows。

手动内存管理消除了垃圾回收、自动分配和引用计数。内存默认放置在栈上,通过标准库的 Alloc/Free 可以访问堆。内置类型检查和数组越界边界检查,但不跟踪悬垂指针和内存泄漏。调试时推荐使用 AddressSanitizer(-fsanitize=address)。

支持的特性

Solod 保留了 Go 的关键特性以提升便利性:

Google AdInline article slot
  • 结构体和方法。
  • 接口。
  • 切片。
  • 多值返回(结果 + 错误)。
  • 泛型。
  • Defer。

缺少通道、goroutine 和闭包——重点在于确定性和性能。

与现有 Go 工具集成:LSP 服务器、linter、IDE、go test。Solod 代码可以从 C 调用,反之亦然,无需运行时。

库和用例

已移植到 C 的 Go 包:

Google AdInline article slot
  • strings
  • io
  • bytes
  • mem
  • slices

提供 libc 的封装。主要用例:

  • 使用 Go 语法和 C 级别的类型进行系统编程。
  • 将 Go 库移植到 C 项目。
  • 无垃圾回收开销的高性能应用。

性能

基准测试显示相对于 Go 的优势:

| 操作 | 相对于 Go 的加速 | 内存消耗 |

Google AdInline article slot

|----------------------------|------------------|--------------|

| 字节函数 | 1.5 倍 | 相同 |

| 字节缓冲区(读取) | 1.3 倍 | — |

| 字节缓冲区(写入) | 2–4 倍 | — |

| 映射(int 键获取) | 3.4 倍 | — |

| 映射(int 键修改) | 0.6 倍(较慢) | — |

| 映射(string 键获取) | 持平 | — |

| 映射(string 键修改) | 0.67 倍 | — |

| int 解析/格式化 | 2 倍 | — |

| float | 1.5/1.2 倍 | — |

| 字符串函数 | 1.3 倍 | — |

| 字符串创建 | 2–4 倍 | -10–20% |

Solod 适合寻求 Go 表现力和 C 低级控制平衡的中高级开发者。

关键点

  • 无垃圾回收:手动内存管理以实现可预测性能。
  • C 互操作:无需运行时的直接调用。
  • Go 工具:与生态系统的兼容性。
  • 性能:在关键操作中比 Go 快 1.3–4 倍。
  • 检查:无运行时开销的边界检查和类型安全。

— Editorial Team

Advertisement 728x90

继续阅读