Drew DeVault, l'autore dell'ambiente utente Sway, del client di posta elettronica Aerc e della piattaforma di sviluppo collaborativo SourceHut, ha introdotto il linguaggio di programmazione Hare, su cui lui e il suo team hanno lavorato negli ultimi due anni e mezzo. Hare è pubblicizzato come un linguaggio di programmazione di sistema simile al C, ma più semplice di C. Tra i principi chiave della progettazione di Hare, l'attenzione dichiarata è sulla semplificazione e sulla completa fiducia nelle azioni del programmatore (fare esattamente ciò che viene specificato, senza iniziativa e comportamento implicito), con la presenza di strumenti ausiliari per identificare errori e problemi tipici.
Il codice sorgente del compilatore e della toolchain è rilasciato sotto licenza GPLv3, mentre il codice della libreria standard è rilasciato sotto licenza MPL (Mozilla Public License). La prima versione pubblica ha annunciato il supporto per i sistemi operativi. Linux e FreeBSD su piattaforme x86_64, aarch64 e riscv64, oltre a un'implementazione standalone per il funzionamento bare-metal. Sono previsti anche il supporto per i sistemi operativi NetBSD, OpenBSD, Illumos, Haiku e Plan 9 e per le piattaforme ppc64le, i686 e arm32.
Il linguaggio utilizza la gestione manuale della memoria e un sistema di tipi statici, in cui a ciascuna variabile deve essere assegnato esplicitamente un tipo specifico. Per eseguire l'applicazione, è allegato un tempo di esecuzione minimo. Il linguaggio è ottimizzato per risolvere problemi di basso livello come lo sviluppo di sistemi operativi, compilatori, applicazioni di rete e utilità di sistema che richiedono le massime prestazioni e il pieno controllo dell'esecuzione.
Per gli sviluppatori è stata preparata una libreria standard di funzioni che fornisce l'accesso alle interfacce di base del sistema operativo, algoritmi standard e implementazioni di protocolli e formati. La libreria copre aree come input/output, manipolazione di file, espressioni regolari, crittografia, networking, operazioni di data e ora, accesso a primitive Unix comuni (come poll, fnmatch e glob), analisi e controllo dei tipi. I collegamenti per l'accesso alle funzionalità OpenGL, SDL2 e libui vengono forniti separatamente.
Esempi di progetti scritti nel linguaggio Hare includono il microkernel Helios, il gestore di password Himitsu, il sistema di raytracing, il programma di crittografia box, il demone bittorrent btqd, scheduled (un sistema simile a cron), toothbrush (un client e Server (per il protocollo finger). I piani futuri includono la stabilizzazione della specifica del linguaggio e della libreria standard, l'implementazione del supporto per piattaforme e architetture mancanti e l'aggiunta di funzioni di libreria per supportare TLS 1.2 e 1.3.
Codice di esempio in Hare: usa crypto::sha256; usa la codifica::hex; utilizzare fmt; usare l'hashish; useio; utilizzare il sistema operativo; esporta fn main() void = { const hash = sha256::sha256(); const file = os::open("main.ha")!; rinviare io::close(file); io::copia(&hash, file)!; lascia la somma: [sha256::SIZE]u8 = [0...]; hash::sum(&hash, somma); hex::encode(os::stdout, somma)!; fmt::println(!); const saluti = [ “Ciao mondo!”, “¡Hola Mundo!”, “Γειά σου Κόσμε!”, “Ciao mondo!”, “こんにちは世界!”, ]; for (let i = 0z; i < len(saluti); i += 1) { fmt::println(saluti[i])!; }; let x: *int = alloc(42); fmt::printfln(" x: {}", x)!; fmt::printfln("*x: {}", *x)!; libero(x); const file = os::open(os::args[1])!; posticipare io::close(file)!; let buffer: *[65535]u8 = alloc([0...]); differire gratuitamente(buffer); const n = io::read(file, buffer)! come dimensione; io::write(os::stdout, buffer[..n])!; }; fn sort(elementi: []int) void = { ... }; @test fn sort() void = { let elementi = [5, 4, 3, 2, 1]; ordinare(elementi); for (let i = 1z; i < len(items); i += 1) { assert(items[i - 1] <= items[i], “la lista non è ordinata”); }; };
Fonte: opennet.ru
