Drew DeVault, autore dell'ambiente utente Sway, del client email Aerc e della piattaforma di sviluppo collaborativo SourceHut, ha pubblicato la versione 0.26.0 del linguaggio di programmazione Hare. Hare viene presentato come un linguaggio di programmazione di sistema, simile al linguaggio C, ma più semplice. Il codice sorgente del compilatore e degli strumenti è distribuito con licenza GPLv3, mentre il codice della libreria standard è sotto licenza MPL (Mozilla Public License).
Il linguaggio è ottimizzato per affrontare compiti a basso livello, come lo sviluppo di sistemi operativi, compilatori, applicazioni di rete e utilità di sistema, per i quali è richiesta l'ottimizzazione delle prestazioni e il controllo completo sull'esecuzione. Nel linguaggio viene utilizzata la gestione manuale della memoria e un sistema di tipi statico in cui ogni variabile deve avere esplicitamente assegnato un tipo specifico.
Per eseguire l'applicazione è fornito un runtime minimo, mentre per lo sviluppo è disponibile una libreria standard di funzioni che fornisce accesso alle interfacce di base del sistema operativo, oltre a offrire funzionalità per lavorare con algoritmi tipici, protocolli e formati, inclusi strumenti per l'uso di espressioni regolari e crittografia. Per lo sviluppo di applicazioni grafiche è in fase di sviluppo l'insieme di strumenti hare-wayland, insieme a binding per accedere alle funzionalità di GTK, Vulkan, OpenGL, SDL3 e libui.
Nella nuova versione:
- È stata aggiunta la struttura del ciclo «for(…){…} else {…}» e la possibilità di utilizzare il ciclo come espressione per assegnare un valore alla variabile «item = for(…){…}». Il valore che verrà assegnato alla variabile può essere restituito interrompendo il ciclo con l'espressione «break valore» o specificando «yield valore_di_default» nel blocco «else{…}» associato al ciclo, che viene chiamato se il ciclo non è stato interrotto tramite break. const item = for (let sample .. items) { if (item.key == key) { break item; }; } else { yield -1; };
- È stata aggiunta la possibilità di utilizzare l'assegnazione al valore «_» per ignorare la gestione degli errori (in caso di errore non verrà generato alcun assertion). _ = os::remove(«/some/file»);
- È stata aggiunta la possibilità di utilizzare il valore «_» per creare campi senza nome nelle strutture. Questi campi possono essere utilizzati per un riempimento aggiuntivo. export type my_struct = struct @packed { x: u32, // offset: 0 _: u8, // offset: 4 y: u64, // offset: 5 };
- È stata implementata la possibilità di lasciare esplicitamente variabili e campi all'interno delle strutture in uno stato non inizializzato, assegnando loro il valore «@undefined». In precedenza, il linguaggio richiedeva che tutte le variabili locali e globali fossero inizializzate al momento della creazione. Lasciare le variabili non inizializzate può essere necessario quando una variabile deve essere inizializzata non al momento della dichiarazione, ma successivamente, ad esempio quando viene passato a una funzione un puntatore a una variabile che questa funzione deve inizializzare. let x: my_object = @undefined;
- Aggiunta la supporto per il sistema operativo Dragonfly BSD. In precedenza, erano supportati Linux, FreeBSD, NetBSD e OpenBSD.
Fonte: opennet.ru
