Solod 0.4 traduce Go a C sin runtime y ya genera bindings de librerías C
El subconjunto de Go que compila a C estrena generador automático de bindings, 31 de sus 37 paquetes de biblioteca estándar en modo freestanding y nuevos flags de compilación cruzada y análisis.

Solod es un subconjunto de Go que se traduce a C. Sin runtime, con gestión manual de memoria e interoperabilidad a nivel de código fuente. La versión 0.4 ya está publicada y llega con tres frentes: un generador automático de bindings para librerías C de terceros, buena parte de la biblioteca estándar funcionando en modo freestanding y cambios en las herramientas de compilación y pruebas.
El proyecto apunta a dos públicos: desarrolladores de Go que quieren control de bajo nivel sin aprender otro lenguaje, y desarrolladores de C a los que les gusta el estilo de Go.
Bindings sin escribirlos a mano
Sobind es lo más visible del lanzamiento. Parsea ficheros .h y emite un fuente Solod con las structs, uniones, constantes, variables, typedefs de punteros a función y declaraciones que hagan falta. El autor ha dejado preparados bindings para libuv, raylib, sodium y sqlite, y sostiene que el resultado suele usarse tal cual, sin retoques manuales. Llamar a C desde Solod no tiene coste añadido, porque el código Solod acaba siendo C normal; la frontera con cgo que se paga en Go aquí no existe.
La biblioteca estándar, más independiente
De los 37 paquetes de la stdlib, 31 funcionan en modo freestanding, es decir, sin depender de una implementación concreta de libc ni de un runtime de sistema operativo. Un grupo lo hace sin restricciones: bufio, bytes, encoding/json, errors, io, maps, slices, strconv, strings, unicode o unsafe, entre otros. Los demás necesitan un gancho que ponga el usuario: fmt para imprimir texto formateado, testing para sacar resultados, crypto/crand para leer bytes aleatorios, time para consultar el reloj, y uuid, que tira de los dos últimos. sync/atomic solo va en destinos con instrucciones libres de bloqueo.
En tipos, las aserciones comma-ok ya funcionan con interfaces no vacías; antes solo existían la aserción directa y la comprobación sin valor. El paquete c añade tipos como c.Size, c.SSize, c.Ptrdiff, c.Intptr, c.LongDouble y c.ConstVoid, además de cast como c.Bitcast, que relee los bits de un valor como otro tipo del mismo tamaño, y c.StringData o c.SliceData, que evitan el rodeo por unsafe.Pointer y unsafe.SliceData.
Herramientas
so test acepta patrones terminados en ... y lanza los tests de todos los paquetes que cuelguen de ese directorio de una sola vez: una traducción, una compilación y una ejecución. El flag -pkg-file limita la ejecución a los paquetes listados en un fichero. so build, so test, so bench y so run estrenan -target para compilación cruzada, con los mismos valores que aceptan clang y zig cc tras --target=, y -check para análisis estático y sanitizers, en sus modos warn, sanitize y analyze.
El nivel de optimización por defecto es -O2 y se cambia con CFLAGS. En Windows, la biblioteca estándar compila para windows/amd64 y windows/arm64: todo el conjunto freestanding funciona, y los paquetes que necesitan POSIX no.
Para quien programa en Go y necesita bajar al metal sin salir del lenguaje, o para quien viene de C y prefiere esa sintaxis, la generación automática de bindings es lo que más cambia el día a día: integrar una librería C deja de ser un proyecto en sí mismo. Queda comprobar cómo se porta Sobind con cabeceras grandes y con macros retorcidas, que es donde estos generadores suelen enseñar las costuras.

