Solod — un subconjunto del lenguaje Go, transpilado al lenguaje C

Presentado lenguaje de programación Solod (So), que ofrece un subconjunto del lenguaje Go, transcompilable a una representación en C (C11), adecuada para ser compilada por los compiladores GCC, Clang y zig cc. La principal diferencia de Solod con respecto a Go es el uso de gestión manual de memoria, que funciona sin un recolector de basura, sin asignación automática de memoria y sin contar referencias. El transpiler para Solod está escrito en Go y se distribuye bajo la licencia BSD. Se admite su uso en Linux, macOS y Windows.

El lenguaje soporta estructuras, métodos, interfaces, slices, retorno de múltiples valores de funciones (por ejemplo, resultado + código de error), generics y llamadas diferidas (defer). Para simplificar, el lenguaje no soporta canales, goroutines ni closures. Al desarrollar en Solod se pueden utilizar servidores LSP existentes, linters, entornos de desarrollo integrados y editores de código que soportan el lenguaje Go, así como la herramienta 'go test'.

El código escrito en Solod puede integrarse con aplicaciones en C (el lenguaje C puede llamar funciones en Solod y viceversa) y no requiere runtime adicional. Algunas de las principales áreas de aplicación incluyen la programación de sistemas con capacidades cercanas a C, pero con una sintaxis de estilo Go y asegurando la verificación de tipos. Solod también se puede utilizar para portar bibliotecas de Go para ser usadas en proyectos en C. Se han portado paquetes de Go al lenguaje C:

y etc. Además de un conjunto de bibliotecas de Go portadas, en programas escritos en Solod se puede utilizar enlaces sobre la biblioteca estándar de C, libc.

Por defecto, toda la memoria se asigna en la pila, pero a través de las funciones Alloc / Free de la biblioteca estándar se puede asignar memoria en el montón. El recolección de basura y el conteo de referencias no se utilizan, pero en Solod se proporcionan capacidades para la verificación de tipos y errores fatales al acceder fuera de los límites de un arreglo. Sin embargo, no se llevan a cabo verificaciones para evitar punteros colgantes dangling pointers ni para la falta de liberación de memoria. Como principal método para detectar problemas al trabajar con memoria se menciona el uso de AddressSanitizer -fsanitize=address en compiladores modernos.

En términos de rendimiento, los programas compilados en Solod, en la mayoría de los casos, son más rápidos que los programas escritos en Go:

  • El rendimiento de las funciones del paquete Byte es 1.5 veces más rápido con un consumo de memoria idéntico;
  • El trabajo con búferes de bytes es 1.3 veces más rápido al leer y de 2 a 4 veces más rápido al escribir;
  • En el paquete Map, la selección por clave entera es 3.4 veces más rápida, pero la modificación de claves es 1.6 veces más lenta;
  • La selección por claves de cadena es comparable al lenguaje Go, pero la modificación es 1.5 veces más lenta;
  • El análisis y formateo de números enteros es 2 veces más rápido, y con números de punto flotante es entre 1.5 y 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 consumo de memoria del 10-20%;

Fuente: linux.org.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster