本文介绍了一种名为 Solod (So) 的编程语言。它提供了一个 Go 语言的子集,并将其转译为适用于 GCC、Clang 和 zig cc 编译器的 C (C11) 表示。Solod 与 Go 和 Tinygo 的主要区别在于它使用手动内存管理,无需垃圾回收器、自动内存分配或引用计数。Solod 的转译器使用 Go 语言编写,并以 BSD 许可证发布。它支持 Linux, macOS и Windows.
该语言支持结构体、方法、接口、切片、返回多个值(例如,结果 + 错误代码)的函数、泛型和延迟调用(defer)。为简单起见,该语言不支持通道、协程或闭包。独立开发可以利用现有的支持 Go 语言的 LSP 服务器、代码检查工具、集成开发环境和代码编辑器,以及“go test”工具链。
用 Solod 编写的代码可以与 C 应用程序集成(C 可以调用 Solod 函数,反之亦然),并且不需要运行时环境。其主要应用领域包括系统编程,功能类似于 C,但采用 Go 风格的语法和类型检查。Solod 还可以用于将 Go 库移植到 C 项目中。诸如 strings、io、bytes、mem、slice 等 Go 包已被移植到 C。除了这些移植的 Go 库之外,Solod 程序还可以使用标准 C 库 libc 的绑定。
默认情况下,所有内存都分配在栈上,但也可以使用标准库的 Alloc/Free 函数进行堆内存分配。Solod 不使用垃圾回收和引用计数,但提供了类型检查功能,并在访问数组越界时崩溃。悬空指针返回和内存释放错误不会进行检查。现代编译器中提到的 AddressSanitizer(-fsanitize=address)是检测内存问题的主要方法。
就性能而言,用 Solod 编写的编译程序通常比 Go 程序更快。例如,Byte 包中的函数在内存消耗相同的情况下,性能提升了 1.5 倍。字节缓冲区操作的读取速度提升了 1.3 倍,写入速度提升了 2-4 倍。在 Map 包中,整数键的检索速度提升了 3.4 倍,但键的修改速度降低了 1.6 倍。字符串键的检索速度与 Go 相当,但修改速度降低了 1.5 倍。整数的解析和格式化速度提升了 2 倍,浮点数的解析速度提升了 1.5/1.2 倍。字符串函数的性能提升了 1.3 倍,字符串的创建速度提升了 2-4 倍,同时内存消耗降低了 10-20%。
来源: opennet.ru
