Drew DeVault, höfundur notendaumhverfisins Sway, tölvupóstforritsins Aerc og samvinnuþróunarvettvangsins SourceHut, kynnti forritunarmálið Hare, sem hann og teymi hans hafa verið að þróa undanfarin tvö og hálft ár. Hare er auglýst sem kerfisforritunarmál, svipað og C en einfaldara. Helstu hönnunarreglur Hare fela í sér áherslu á einföldun og algjört traust á aðgerðum forritarans (að gera nákvæmlega það sem tilgreint er, án handahófskenndrar eða óbeinnar hegðunar), með því að veita stuðningsverkfæri til að bera kennsl á algeng villur og vandamál.
Frumkóði þýðandans og verkfærakeðjunnar er leyfisbundinn samkvæmt GPLv3, og staðlaður bókasafnskóði er leyfisbundinn samkvæmt MPL (Mozilla Public License). Fyrsta opinbera útgáfan tilkynnti stuðning við stýrikerfi. Linux og FreeBSD á x86_64, aarch64 og riscv64 kerfum, sem og sjálfstæða útfærslu fyrir ber-málm rekstur. Áætlanirnar fela í sér stuðning við NetBSD, OpenBSD, Illumos, Haiku og Plan 9 stýrikerfi og ppc64le, i686 og arm32 kerfi.
Tungumálið notar handvirka minnisstjórnun og kyrrstætt týpukerfi, sem krefst þess að hverri breytu sé sérstaklega úthlutað ákveðinni gerð. Lágmarks keyrslutími er úthlutaður keyrslu forrita. Tungumálið er fínstillt fyrir lágstigs verkefni, svo sem þróun stýrikerfa, þýðenda, netforrita og kerfisgagna, sem krefjast hámarksafkasta og fullrar keyrslustýringar.
Staðlað föllasafn hefur verið útbúið fyrir forritara, sem veitir aðgang að grunn stýrikerfisviðmótum, dæmigerðum reikniritum og útfærslum á samskiptareglum og sniðum. Bókasafnið nær yfir svið eins og inntak/úttak, skráarmeðhöndlun, reglulegar segðir, dulkóðun, net, tíma- og dagsetningaraðgerðir, aðgang að stöðluðum Unix frumstæðum (eins og poll, fnmatch og glob), greiningu og tegundarprófun. Sérstakar bindingar eru veittar fyrir aðgang að OpenGL, SDL2 og libui eiginleikum.
Dæmi um verkefni sem skrifuð eru á Hare-málinu eru meðal annars örkjarninn Helios, lykilorðastjórinn Himitsu, geislarekningarkerfið, dulkóðunarforritið Box, bittorrent-þjónninn btqd, scheduled (kerfi sem líkist cron), tannbursti (viðskiptavinur og ...). netþjóni (fyrir fingrasamskiptareglur). Framtíðaráætlanir fela í sér að stöðuga tungumálaskilgreininguna og staðlaða bókasafnið, innleiða stuðning fyrir vantar palla og arkitektúr og bæta við bókasafnsvirkni til að styðja TLS 1.2 og 1.3.
Dæmikóði í Hare: use crypto::sha256; use encoding::hex; use fmt; use hash; useio; use os; export fn main() void = { const hash = sha256::sha256(); const file = os::open("main.ha")!; defer io::close(skrá); io::copy(&hash, skrá)!; let sum: [sha256::SIZE]u8 = [0...]; hash::sum(&hash, sum); hex::encode(os::stdout, sum)!; fmt::println()!; const greetings = [“Halló, heimur!”, “¡Hola Mundo!”, “Gleði þinn heimur!”, “Halló, heimur!”, “Það er óþægilegt að vera hér!”, ]; fyrir (láta i = 0z; i < len(kveðjur); i += 1) { fmt::println(kveðjur[i])!; }; látið x: *int = alloc(42); fmt::printfln("x: {}", x)!; fmt::printfln("*x: {}", *x)!; frjáls(x); const skrá = os::open(os::args[1])!; defer io::close(skrá)!; látið biðminni: *[65535]u8 = alloc([0...]); defer frjáls(biðminni); const n = io::read(skrá, biðminni)! sem stærð; io::write(os::stdout, biðminni[..n])!; }; fn flokka(atriði: []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], “listinn er óraðaður”); }; };
Heimild: opennet.ru
