IT

Le langage de programmation Goose : tout savoir sur ce nouveau venu qui promet de damer le pion au C++ et à Rust

Goose est un nouveau langage système sans tas, sans ramasse-miettes et sans annotations de durée de vie. Son créateur affirme qu'il s'exécute plus de 3 fois plus vite qu'un C++ idiomatique. Fonctionnement et intérêt de la bête.

·3 min de lecture
Le langage de programmation Goose : tout savoir sur ce nouveau venu qui promet de damer le pion au C++ et à Rust

L'un des sujets les plus discutés par les développeurs ces dernières semaines est le langage de programmation Goose. Il a été créé par Wouter van Oortmerssen, un programmeur vétéran et auteur du langage Lobster. Goose est open source sous licence Apache 2.0 et, fait des plus intéressants, son auteur affirme que le compilateur a été produit presque entièrement par l'IA à partir d'une spécification de langage conçue par l'humain.

Dans la plupart des langages, les données dynamiques telles que les tableaux et les chaînes de caractères résident sur le tas et nécessitent un ramasse-miettes (Java, Go), un comptage de références (Swift) ou des règles de durée de vie (Rust) pour les gérer. Goose n'utilise rien de tout cela. Selon sa documentation, chaque valeur dynamique réside sur des piles de données gérées par le compilateur.

  • Chaque pile est une grande réservation d'espace d'adressage (2 Go par défaut) avec un simple pointeur d'incrémentation (bump pointer)
  • Une seule valeur redimensionnable est active par pile à la fois, et elle se trouve toujours au sommet
  • Agrandir un tableau déplace simplement le pointeur — rien n'est déplacé
  • La libération de la mémoire à la sortie de la portée se résume à une simple écriture en mémoire

Le compilateur prouve ces règles à la compilation ; à l'exécution, seuls les pointeurs d'incrémentation sont suivis.

Comment fonctionne la sécurité

Chaque référence possède une « racine » statique — la variable qui délimite sa durée de vie. Le compilateur déduit les racines de lui-même et rejette les références qui survivraient à leur propriétaire. Contrairement à Rust, les programmeurs n'écrivent aucune annotation de durée de vie, et il n'y a pas de bloc unsafe.

Un aperçu de la syntaxe

Goose possède une syntaxe compacte de type C. Une structure avec des données de taille variable se déclare ainsi : struct Item { sku: u8[varint], qty: varint, cents: varint }. Il existe trois types de tableaux : à taille fixe, extensibles uniquement et extensibles-rétrécissables.

Vitesse : les chiffres de l'auteur

L'auteur a publié des résultats portant sur 16 benchmarks (moyenne géométrique). Selon lui, Goose est :

  • environ 3,3 à 3,5 fois plus rapide qu'un C++ idiomatique
  • 1,16 à 1,26 fois plus rapide qu'un C++ optimisé à la main
  • 1,12 à 1,19 fois plus rapide que le meilleur Rust sécurisé
  • consommant 1,2 à 1,9 fois moins de mémoire

Par exemple, un enregistrement de commande ne prend que 29 octets et zéro allocation en Goose, contre 160 octets et une allocation en C++, et 153 octets et quatre allocations en Rust. Gardez à l'esprit qu'il s'agit des propres benchmarks de l'auteur ; les vérifications indépendantes restent encore limitées.

Limitations

  • Les fonctions récursives ne peuvent pas conserver de données extensibles au-delà d'un appel récursif
  • Pas de closures fuyantes ni de pointeurs de fonctions
  • Compilation de programmes complets uniquement
  • L'écosystème de bibliothèques est encore très restreint

Comment l'essayer

Des compilateurs pré-compilés sont disponibles pour Windows x64, Linux x64 et macOS (Apple Silicon et Intel). Goose compile vers un unique fichier C, il s'exécute donc partout où un compilateur C est présent. Téléchargez une version sur la page aardappel/goose de GitHub, ajoutez le dossier à votre variable PATH et exécutez un exemple avec goose samples/01_tour.goose. Une extension VS Code est incluse dans l'archive.

Le verdict

Goose est une expérience fascinante dotée d'une approche résolument novatrice de la gestion de la mémoire. Les développeurs système soucieux des performances devraient le suivre de près et l'essayer. Le langage est toutefois récent : pour un usage en production, il est sage d'attendre des benchmarks indépendants et un écosystème plus étoffé.

Source: Goose (aardappel)

Articles similaires