Drew DeVault, avtor uporabniškega okolja Sway, poštnega odjemalca Aerc in platforme za sodelovanje SourceHut, je predstavil programski jezik Hare, na katerem je skupaj s svojo ekipo delal zadnji dve leti in pol. Hare se predstavlja kot jezik sistemskega programiranja, ki je blizu jeziku C, a je preprostejši od njega. Med ključnimi načeli oblikovanja Hare je usmerjenost k poenostavitvi in popolnemu zaupanju v dejanja programerja (izvajanje točno tistega, kar je navedeno, brez lastne ustvarjalnosti in implicitnega obnašanja), ob prisotnosti pomožnih orodij za odkrivanje tipičnih napak in težav.
Izvorne kode kompilatorja in orodij se distribucirajo pod licenco GPLv3, medtem ko je koda standardne knjižnice pod licenco MPL (Mozilla Public License). V prvem javnem izdanju je navedena podpora za operacijske sisteme Linux in FreeBSD na platformah x86_64, aarch64 in riscv64, ter samostojna uporaba za zagon na strojni opremi brez operacijskega sistema. V načrtu je omenjena podpora za operacijske sisteme NetBSD, OpenBSD, Illumos, Haiku in Plan 9 ter platforme ppc64le, i686 in arm32.
V jeziku se uporablja ročno upravljanje z pomnilnikom in statična sistem tipov, pri čemer mora vsaki spremenljivki biti izrecno dodeljen določen tip. Za izvajanje aplikacije je pritrjena minimalna izvajalna enota. Jezik je optimiziran za reševanje nizkonivojskih nalog, kot so razvoj operacijskih sistemov, kompilatorjev, omrežnih aplikacij in sistemskih pripomočkov, pri katerih je dosego maksimalne zmogljivosti in popoln nadzor nad izvajanjem ključen.
Za razvijalce je pripravljena standardna knjižnica funkcij, ki zagotavlja dostop do osnovnih vmesnikov operacijskega sistema, tipičnih algoritmov ter implementacij protokolov in formatov. Knjižnica pokriva področja, kot so vhod/izhod, delo s datotekami, regularni izrazi, šifriranje, omrežno delovanje, operacije s časom in datumi, dostop do tipičnih Unix-primitivov (na primer poll, fnmatch in glob), parciranje in preverjanje tipov. Ločeno so na voljo povezave za dostop do zmogljivosti OpenGL, SDL2 in libui.
Kot primeri projektov, napisanih v jeziku Hare, se omenjajo mikrojedro Helios, upravitelj gesel Himitsu, sistem za sledenje žarkom raytracing, program za šifriranje box, bittorrent demon btqd, scheduled (analogi sistema cron), toothbrush (odjemalec in za protokol finger). strežnik Med načrti za prihodnost je izpostavljena stabilizacija specifikacije jezika in sestave standardne knjižnice, implementacija podpore za manjkajoče platforme in arhitekture ter dodajanje knjižničnih funkcij za podporo TLS 1.2 in 1.3.
Primer kode v jeziku Hare: 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»); }; };
Izvor: opennet.ru
