系统编程语言的新选手Solod(简称So)最近发布了v0.1版本。它的定位很直接:保留Go的语法和开发体验,但去掉运行时开销,实现与C的零成本互调用。

这个项目瞄准两类人。一是想用Go写底层代码、直接调C库,却不想学新语言和标准库的开发者;二是喜欢Go代码风格的C程序员。v0版本只做了一件事——把Go的子集翻译成C。v0.1则往前迈了一步:移植Go的标准库,同时让C互操作更简单。

打开网易新闻 查看精彩图片

标准库是这次更新的重头戏。So直接搬来了Go的io、bufio、fmt做通用I/O抽象;bytes、strings、strconv、unicode/utf8处理字节和文本;slices、maps提供泛型堆分配数据结构;crypto/rand和math/rand生成随机数;flag、os、path应对命令行和文件操作;log/slog做结构化日志;time处理时间。此外So还自建了两个包:mem提供可插拔分配器接口的内存分配,c包则是底层C互操作的工具集。

打开网易新闻 查看精彩图片

作者用"基于SQLite的持久化键值存储"演示了新特性。由于So尚未实现database/sql,需要直接调用SQLite的C API。通过so:include指令引入头文件,再用sobind工具生成extern声明,就能把C的常量、类型、函数映射到So代码里。so:extern指令对常量和类型是必需的,函数则可以直接声明无体函数,转译器会自动识别为extern声明。

打开网易新闻 查看精彩图片

这种设计让So在保持Go式语法的同时,获得了直接操作底层的能力。不用CGO那样的额外层,也没有运行时垃圾回收的开销。对于需要在性能敏感场景使用Go语法的开发者,这提供了一条中间路径。