Solod: Subconjunto de Go con gestión manual de memoria y compilación a C
Solod (So) es un proyecto de código abierto que proporciona un subconjunto de Go transcompilable a C11. El código se compila con GCC, Clang o zig cc sin un entorno de ejecución ni recolector de basura. El transpilador está escrito en Go bajo la licencia BSD y es compatible con Linux, macOS y Windows.
La gestión manual de memoria elimina el GC, la asignación automática y el conteo de referencias. La memoria se coloca en la pila por defecto, con el montón disponible mediante Alloc/Free de la biblioteca estándar. Incluye comprobaciones de tipos y verificación de límites para desbordamientos de arrays, pero no rastrea punteros colgantes ni fugas de memoria. Para depuración, se recomienda AddressSanitizer (-fsanitize=address).
Constructos compatibles
Solod conserva las características clave de Go por comodidad:
- Estructuras y métodos.
- Interfaces.
- Slices.
- Retornos de múltiples valores (resultado + error).
- Genéricos.
- Defer.
No incluye canales, goroutines ni cierres: el enfoque está en el determinismo y el rendimiento.
Integración con herramientas existentes de Go: servidores LSP, linters, IDE, go test. El código de Solod se puede llamar desde C y viceversa sin un entorno de ejecución.
Bibliotecas y casos de uso
Paquetes de Go portados a C:
- strings
- io
- bytes
- mem
- slices
Hay envoltorios sobre libc disponibles. Principales casos de uso:
- Programación de sistemas con sintaxis de Go y tipado a nivel de C.
- Portar bibliotecas de Go a proyectos en C.
- Aplicaciones de alto rendimiento sin sobrecarga de GC.
Rendimiento
Los benchmarks muestran ventajas sobre Go:
| Operación | Aceleración vs Go | Consumo de memoria |
|-------------------------------|-------------------|--------------------|
| Funciones de bytes | 1.5x | idéntico |
| Buffers de bytes (lectura) | 1.3x | - |
| Buffers de bytes (escritura) | 2–4x | - |
| Map (obtención clave int) | 3.4x | - |
| Map (modif. clave int) | 0.6x (más lento) | - |
| Map (obtención clave string) | equivalente | - |
| Map (modif. clave string) | 0.67x | - |
| Análisis/formateo de int | 2x | - |
| float | 1.5/1.2x | - |
| Funciones de strings | 1.3x | - |
| Creación de strings | 2–4x | -10–20% |
Solod es ideal para desarrolladores intermedios y senior que buscan un equilibrio entre la expresividad de Go y el control de bajo nivel de C.
Puntos clave
- Sin GC: gestión manual de memoria para un rendimiento predecible.
- Interop con C: llamadas directas sin entorno de ejecución.
- Herramientas de Go: compatibilidad con el ecosistema.
- Rendimiento: 1.3–4x más rápido que Go en operaciones clave.
- Comprobaciones: verificación de límites y seguridad de tipos sin sobrecarga de entorno de ejecución.
— Editorial Team
Aún no hay comentarios.