Le secteur du développement système est dominé par un arbitrage permanent entre performance et sécurité mémoire. D'un côté, le C++ offre la vitesse au prix d'une gestion manuelle risquée ; de l'autre, Rust garantit la sécurité via un système complexe d'annotations de durée de vie (lifetimes). Le langage Goose tente de briser ce compromis en supprimant les deux composants critiques de la gestion mémoire moderne : l'allocateur de tas (heap) et le ramasse-garbage (GC).
Une architecture reposant sur des piles de données
Contrairement aux langages traditionnels où les valeurs dynamiques sont stockées sur un tas, Goose utilise un modèle où chaque valeur dynamique réside directement sur une pile de données gérée par le compilateur source. Dans ce modèle, la croissance de la mémoire se résume à l'avance d'un pointeur. La libération de la mémoire est automatique et liée à la portée (scope) : dès que le bloc de code se termine, la mémoire est libérée source.
Cette approche évite les surcoûts liés au calcul des temps de vie ou à l'exécution d'un ramasse-garbage. Pour maintenir la sécurité, le compilateur doit inférer ce sur quoi chaque référence est ancrée, rejetant toute référence susceptible de survivre à son propriétaire, le tout sans nécessiter de syntaxe spécifique pour les durées de vie source.
Des performances qui interpellent
Selon les benchmarks auto-déclarés par les développeurs du projet, cette architecture permet à Goose de surpasser les standards actuels. Dans plus de seize tests, le langage se présenterait comme étant 3,3 fois plus rapide que le C++ idiomatique et 1,12 fois plus rapide que le meilleur code Rust sécurisé source.
Au-delà de la vitesse brute, le langage revendique une efficacité mémoire supérieure, utilisant entre 1,2x et 1,9x moins de mémoire que ses concurrents source. Ces gains proviendraient de l'organisation des données et de l'absence de mécanismes de gestion de la mémoire lourds comme le comptage de références ou les destructeurs source.
Limites et interprétation
Si ces résultats sont techniquement ambitieux, ils doivent être interprétés avec prudence. Les données de performance présentées proviennent des benchmarks du dépôt lui-même source, ce qui constitue une auto-déclaration plutôt qu'une confirmation par des organismes indépendants.
De plus, si l'absence de tas simplifie la gestion pour certains cas d'usage, elle pose la question de la flexibilité du langage face à des structures de données complexes nécessitant une allocation globale ou persistante. L'efficacité de Goose repose sur un pari architectural : transformer la complexité de la gestion de la mémoire en une logique de compilation statique, supprimant ainsi les couches d'abstraction habituelles du tas.
