Se presenta el lenguaje de programación Solod (So). Este lenguaje proporciona un subconjunto del lenguaje Go transcompilado a una representación C11 compatible con los compiladores GCC, Clang y zig cc. Una diferencia clave entre Solod, Go y Tinygo radica en su gestión manual de memoria, que opera sin recolector de basura, asignación automática de memoria ni conteo de referencias. El transpilador de Solod está escrito en Go y se distribuye bajo la licencia BSD. Es compatible con Linux, macOS y Windows.
El lenguaje admite estructuras, métodos, interfaces, slices, funciones que devuelven múltiples valores (por ejemplo, resultado + código de error), genéricos y llamadas diferidas (defer). Para simplificar, el lenguaje no admite canales, corrutinas ni cierres. El desarrollo en solitario puede utilizar servidores LSP, analizadores de código, entornos de desarrollo integrados y editores de código compatibles con Go, así como el conjunto de herramientas "go test".
El código escrito en Solod se puede integrar con aplicaciones C (C puede llamar a funciones de Solod y viceversa) y no requiere un entorno de ejecución. Entre sus principales áreas de aplicación se encuentra la programación de sistemas, con capacidades similares a las de C, pero con sintaxis y comprobación de tipos al estilo Go. Solod también permite portar bibliotecas de Go para su uso en proyectos C. Paquetes de Go como strings, io, bytes, mem, slices y otros se han portado a C. Además del conjunto de bibliotecas de Go portadas, los programas Solod pueden usar enlaces para la biblioteca estándar de C, libc.
Por defecto, toda la memoria se asigna en la pila, pero es posible la asignación en el montón mediante las funciones `Alloc` y `Free` de la biblioteca estándar. No se utilizan la recolección de basura ni el conteo de referencias, pero Solod proporciona funciones para la verificación de tipos y detecta fallos al acceder a un array fuera de los límites. No se comprueban los retornos de punteros colgantes ni la liberación incorrecta de memoria. Se menciona el uso de `AddressSanitizer` (`-fsanitize=address`) en los compiladores modernos como el método principal para detectar problemas de memoria.
En términos de rendimiento, los programas compilados escritos en Solod son generalmente más rápidos que los programas Go. Por ejemplo, las funciones del paquete Byte se ejecutan 1.5 veces más rápido con un consumo de memoria idéntico. Las operaciones de búfer de bytes son 1.3 veces más rápidas para la lectura y de 2 a 4 veces más rápidas para la escritura. En el paquete Map, la recuperación de claves enteras es 3.4 veces más rápida, pero la modificación de claves es 1.6 veces más lenta. La recuperación de claves de cadena es similar a la de Go, pero la modificación es 1.5 veces más lenta. El análisis y formato de enteros es 2 veces más rápido, y el análisis de punto flotante es 1,5/1.2 veces más rápido. Las funciones de cadena son 1.3 veces más rápidas, y la creación de cadenas es de 2 a 4 veces más rápida con una reducción del 10-20% en el consumo de memoria.
Fuente: opennet.ru
