In Goose gli array crescono senza traslocare
Il linguaggio sperimentale Goose tiene fermi i dati mentre gli array crescono e controlla i riferimenti senza annotazioni di lifetime. La contropartita sono vincoli precisi sulla loro organizzazione.
Che succede
Chi ha conservato un riferimento a un elemento di un vettore C++ conosce la seccatura: se il contenitore cresce e sposta i dati, quel riferimento può diventare inutilizzabile. Goose, linguaggio sperimentale di Wouter van Oortmerssen, già autore di Lobster, costruisce il proprio modello di memoria attorno a una garanzia diversa: gli array crescono senza cambiare posto.
I dati dinamici vivono in stack assegnati dal compilatore, senza heap allocator né garbage collector. Per aggiungere spazio si avanza un puntatore; alla fine dell’ambito si riporta indietro. Il compilatore ricostruisce da quale variabile dipende ogni riferimento e rifiuta quelli che potrebbero sopravviverle, senza chiedere annotazioni di lifetime.
Questa libertà ha confini piuttosto rigidi: nelle funzioni ricorsive, per esempio, non si possono conservare dati espandibili attraverso la chiamata successiva; alcuni contenitori si possono scorrere ma non indicizzare direttamente. Il codice è aperto, compila in C e ci sono compilatori per Windows, macOS e Linux. I risultati favorevoli rispetto a C++ e Rust vengono dalla suite del progetto: il motivo per esplorarlo resta il modello di memoria, non una vittoria universale di velocità.
Perché conta
In Goose la stabilità dei riferimenti dipende da come si organizzano i dati fin dall’inizio. Rinunciando a parte della flessibilità dei contenitori, il linguaggio evita spostamenti e libera intere strutture con un solo arretramento del puntatore. Il lavoro risparmiato durante l’esecuzione si paga con vincoli sulla struttura del programma.
Leggi la fonte
Goose — progetto e modello di memoriaVuoi sapere di più su pillole come questa?
Nella stessa edizione
Con Framefields un video diventa un progetto TypeScript
Cursor prova le app che costruisce anche nel simulatore iPhone
In Goose gli array crescono senza traslocare
La falla Brotli raggiunge anche i client Python che scaricano pagine
Prossima Pillola