Drew DeVault, a szerzője a Sway felhasználói környezetnek, az Aerc levelezőkliensek és a SourceHut közösségi fejlesztési platformnak, bemutatta a Hare programozási nyelvet, amelyen az utolsó két és fél évben a csapatával dolgozott. A Hare egy olyan rendszerprogramozási nyelvként jelenik meg, amely a C nyelvhez hasonló, de egyszerűbbnél. A Hare tervezésének kulcsfontosságú elvei között szerepel az egyszerűsítés és a programozóra való teljes bizalom (azt végrehajtani, amit megadnak, önálló cselekvés és implicit viselkedés nélkül), miközben olyan segédeszközök állnak rendelkezésre, amelyek segítenek az elterjedt hibák és problémák azonosításában.
A fordító és az eszközkészlet forráskódja GPLv3 licenc alatt, míg a standard könyvtár kódja MPL (Mozilla Public License) licenc alatt terjesztésre kerül. Az első nyilvános kiadásban a Linux és FreeBSD operációs rendszerek támogatását hirdetik x86_64, aarch64 és riscv64 platformokon, valamint önálló használatot a hardver felett operációs rendszer nélkül. A jövőbeli tervek között szerepel a NetBSD, OpenBSD, Illumos, Haiku és Plan 9 operációs rendszerek, valamint a ppc64le, i686 és arm32 platformok támogatása.
A nyelvben manuális memória kezelés és statikus típusrendszer alkalmazásra kerül, amelyben minden változóhoz egyértelműen meg kell adni egy adott típust. Az alkalmazás futtatásához egy minimális runtime csatolódik. A nyelv optimalizálva van alacsony szintű feladatok megoldására, mint az operációs rendszerek, fordítók, hálózati alkalmazások és rendszersegédprogramok fejlesztése, ahol a maximális teljesítmény és a végrehajtás teljes ellenőrzése szükséges.
A fejlesztők számára egy standard függvénykönyvtár készült, amely hozzáférést biztosít az operációs rendszer alapvető interfészeihez, tipikus algoritmusokhoz és protokollokhoz, valamint formátumokhoz. A könyvtár lefedi az olyan területeket, mint a bemenet/kimenet, fájlkezelés, reguláris kifejezések, titkosítás, hálózati kapcsolatok, idő- és dátumkezelés, hozzáférés a tipikus Unix-primitivekhez (például poll, fnmatch és glob), elemzés és típusellenőrzés. Külön is elérhetők kötődések az OpenGL, SDL2 és libui képességeihez.
A Hare nyelven írt projektek példái között említést nyer a Helios mikrokernel, a Himitsu jelszókezelő, a raytracing nyomkövető rendszer, a box titkosító program, a bittorrent demon btqd, a scheduled (a cron rendszer analógja), valamint a toothbrush (ügyfél és a finger protokollhoz). szerver A jövőbeli tervekből kiemelhető a nyelv specifikációjának stabilizálása és a szabványos könyvtár tartalmának kidolgozása, hiányzó platformok és architektúrák támogatásának megvalósítása, valamint a TLS 1.2 és 1.3 támogatásához szükséges könyvtári funkciók hozzáadása.
Példa a Hare nyelvű kódra: use crypto::sha256; use encoding::hex; use fmt; use hash; use io; use os; export fn main() void = { const hash = sha256::sha256(); const file = os::open(«main.ha»)!; defer io::close(file); io::copy(&hash, file)!; let sum: [sha256::SIZE]u8 = [0…]; hash::sum(&hash, sum); hex::encode(os::stdout, sum)!; fmt::println()!; const greetings = [ «Hello, world!», «¡Hola Mundo!», «Γειά σου Κόσμε!», «Привет, мир!», «こんにちは世界!」, ]; for (let i = 0z; i < len(greetings); i += 1) { fmt::println(greetings[i])!; }; let x: *int = alloc(42); fmt::printfln(» x: {}», x)!; fmt::printfln(«*x: {}», *x)!; free(x); const file = os::open(os::args[1])!; defer io::close(file)!; let buffer: *[65535]u8 = alloc([0…]); defer free(buffer); const n = io::read(file, buffer)! as size; io::write(os::stdout, buffer[..n])!; }; fn sort(items: []int) void = { … }; @test fn sort() void = { let items = [5, 4, 3, 2, 1]; sort(items); for (let i = 1z; i < len(items); i += 1) { assert(items[i — 1] <= items[i], «list is unsorted»); }; };
Forrás: opennet.ru
