Drew DeVault, autore dell'interfaccia utente Sway, del client email Aerc e della piattaforma di sviluppo collaborativo SourceHut, ha pubblicato la versione 0.24.2 del linguaggio di programmazione Hare (il numero di versione è formato da 0.YY.Q, dove YY sono le ultime due cifre dell'anno e Q è il numero del trimestre). Hare è presentato come un linguaggio di programmazione di sistema, simile al C ma più semplice da utilizzare. 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 l'esecuzione dell'applicazione è fornito un runtime minimo, mentre per lo sviluppo viene distribuita una libreria standard di funzioni che offre accesso alle interfacce di base del sistema operativo, oltre a fornire funzioni per lavorare con algoritmi tipici, protocolli e formati, inclusi strumenti per utilizzare espressioni regolari e crittografia. Per lo sviluppo di applicazioni grafiche viene sviluppato lo strumento hare-wayland, così come binding per accedere alle funzionalità di GTK, Vulkan, OpenGL, SDL2 e libui.
Nella nuova versione:
- Aggiunta la supporto per il sistema operativo NetBSD (in aggiunta a OpenBSD, FreeBSD e Linux già supportati).
- Aggiunta la sintassi per definire cicli "for-each" che semplificano l'iterazione sugli elementi di array e slice. let items = [1, 2, 3, 4, 5]; for (let item .. items) { fmt::println(item)!; };
- È stata fornita la possibilità di definire parametri opzionali per le funzioni, con valori predefiniti specificati al momento della definizione della funzione. fn example(x: int, y: int = 34) void = { // ... }; example(12); // è equivalente alla chiamata example(12, 34);
- È stata aumentata la performance del modulo bufio e delle API correlate che utilizzano l'input/output bufferizzato, come unix::resolvconf, unix::hosts e unix::passwd.
- Nel modulo 'regex::' è stata fornita la possibilità di usare modelli del tipo '(ha|py|sh)' per elencare più opzioni.
- È stata aggiunta la supporto per la memoria condivisa (shm_open) e il meccanismo memfd, che consente di identificare un'area di memoria tramite un descrittore di file passato tra i processi. La memoria condivisa, già utilizzata nell'implementazione del client e сервера Wayland hare-wayland.
- Sono state aggiunte funzioni crittografiche crypto::ec, crypto::ecdh e crypto::ecdsa.
Fonte: opennet.ru
