IT

El lenguaje de programación Goose: todo sobre el nuevo lenguaje que promete superar a C++ y Rust

Goose es un nuevo lenguaje de sistemas sin montón (heap), sin recolector de basura y sin anotaciones de tiempo de vida. Su creador afirma que se ejecuta más de 3 veces más rápido que el C++ idiomático. Así es como funciona y si vale la pena probarlo.

·3 min de lectura
El lenguaje de programación Goose: todo sobre el nuevo lenguaje que promete superar a C++ y Rust

Uno de los temas más comentados entre los desarrolladores en las últimas semanas es el lenguaje de programación Goose. Fue creado por Wouter van Oortmerssen, un programador veterano y autor del lenguaje Lobster. Goose es de código abierto bajo la licencia Apache 2.0 y, lo que es más interesante, su autor afirma que el compilador se produjo casi en su totalidad con IA, a partir de una especificación de lenguaje diseñada por humanos.

En la mayoría de los lenguajes, los datos dinámicos como matrices y cadenas residen en el montón y necesitan un recolector de basura (Java, Go), conteo de referencias (Swift) o reglas de tiempo de vida (Rust) para gestionarlos. Goose no utiliza ninguna de estas opciones. Según su documentación, cada valor dinámico reside en pilas de datos gestionadas por el compilador.

  • Cada pila es una gran reserva de espacio de direcciones (2 GB por defecto) con un puntero de incremento simple (bump pointer)
  • Solo un valor redimensionable está activo por pila a la vez, y siempre se encuentra en la cima
  • Ampliar una matriz simplemente avanza el puntero; no se mueve nada
  • Liberar memoria al salir del ámbito es una simple operación de almacenamiento

El compilador comprueba estas reglas en tiempo de compilación; en tiempo de ejecución solo se realiza un seguimiento de los punteros de incremento.

Cómo funciona la seguridad

Cada referencia tiene una «raíz» estática: la variable que delimita su tiempo de vida. El compilador infiere las raíces por sí mismo y rechaza las referencias que vivan más que su propietario. A diferencia de Rust, los programadores no escriben anotaciones de tiempo de vida y no existe el bloque unsafe.

Una muestra de la sintaxis

Goose tiene una sintaxis compacta similar a C. Una estructura con datos de tamaño variable se declara así: struct Item { sku: u8[varint], qty: varint, cents: varint }. Hay tres tipos de matrices: de tamaño fijo, de solo crecimiento y de crecimiento y reducción.

Velocidad: las cifras del autor

El autor publicó resultados en 16 pruebas de rendimiento o benchmarks (media geométrica). Según estos datos, Goose es:

  • aproximadamente entre 3,3 y 3,5 veces más rápido que el C++ idiomático
  • entre 1,16 y 1,26 veces más rápido que el C++ optimizado a mano
  • entre 1,12 y 1,19 veces más rápido que el mejor Rust seguro
  • utiliza entre 1,2 y 1,9 veces menos memoria

Por ejemplo, un registro de pedido ocupa 29 bytes y cero asignaciones en Goose, frente a los 160 bytes y una asignación en C++, y los 153 bytes y cuatro asignaciones en Rust. Hay que tener en cuenta que estas son las pruebas de rendimiento del propio autor; la verificación independiente aún es limitada.

Limitaciones

  • Las funciones recursivas no pueden conservar datos aumentables a través de una llamada recursiva
  • No hay cierres (closures) que escapen ni punteros a funciones
  • Compilación de programa completo únicamente
  • El ecosistema de bibliotecas sigue siendo muy pequeño

Cómo probarlo

Hay compiladores precompilados disponibles para Windows x64, Linux x64 y macOS (Apple Silicon e Intel). Goose se compila en un único archivo C, por lo que se ejecuta en cualquier lugar donde lo haga un compilador de C. Descarga una versión desde la página aardappel/goose en GitHub, añade la carpeta a tu variable PATH y ejecuta un ejemplo con goose samples/01_tour.goose. El archivo incluye una extensión para VS Code.

El veredicto

Goose es un experimento fascinante con un enfoque verdaderamente novedoso para la gestión de memoria. Los programadores de sistemas que se preocupan por el rendimiento deberían seguirle la pista y probarlo. Pero el lenguaje es nuevo: para un uso en producción, es prudente esperar a pruebas independientes y a un ecosistema más amplio.

Fuente: Goose (aardappel)

Artículos relacionados