Drew DeVault tutvustas süsteemide programmeerimise keelt Hare.

Drew DeVault, Sway kasutajakeskkonna, Aerc e-posti kliendi ja SourceHut koostööpaneeli autor, tutvustas programmeerimiskeelt Hare, mille kallal ta koos oma meeskonnaga on töötanud viimased kaks ja pool aastat. Hare esitleb end kui süsteemide programmeerimise keelt, mis on lähedane C-keelele, kuid lihtsam. Hare kavandamise peamiste põhimõtete hulka kuulub suunatus lihtsustamisele ja täielik usaldus programmeerija tegevuste vastu (teha just seda, mis on ette antud, ilma iseseisva tegevuseta ja varjatud käitumiseta), samas on olemas abivahendid tüüpiliste vigade ja probleemide tuvastamiseks.

Kompilaatori ja tööriistade lähtekood on litsentseeritud GPLv3 alusel, samas kui standardraamatukogu kood on litsentseeritud MPL (Mozilla Public License) alusel. Esimeses avalikus väljaandes on kuulutatud toetust operatsioonisüsteemidele Linux ja FreeBSD platvormidel x86_64, aarch64 ja riscv64, samuti isesufficientne kasutamine riistvara peal ilma operatsioonisüsteemita. Plaanides mainitakse toetust NetBSD, OpenBSD, Illumos, Haiku ja Plan 9 operatsioonisüsteemidele ning platvormidele ppc64le, i686 ja arm32.

Keelekes on käsitsi mälu haldamine ja staatiline tüüpide süsteem, kus igale muutujale peab olema selgesõnaliselt määratud kindel tüüp. Rakenduse täitmiseks on vajalik minimaalne runtime. Keel on optimeeritud madala taseme ülesannete lahendamiseks, näiteks operatsioonisüsteemide, kompilaatorite, võrgu rakenduste ja süsteemi utiliitide arendamiseks, kus on vajalik maksimaalse jõudluse saavutamine ja täielik kontroll täitmise üle.

Arendajatele on ette valmistatud standardfunktsioonide teek, mis annab juurdepääsu operatsioonisüsteemi põhiliidestele, standardsete algoritmide ja protokollide ning formaatide реализациам. Teek katab valdkonnad nagu sisend/väljund, failide haldamine, regulaaravaldised, krüptimine, võrgu suhtlemine, aja ja kuupäevade operatsioonid, juurdepääs tüüpilistele Unix-primitividele (nt poll, fnmatch ja glob), parsimine ja tüüpide kontroll. Eraldi on antud sidemed OpenGL, SDL2 ja libui võimaluste kasutamiseks.

Hare keeles kirjutatud projektide näidetena tuuakse välja mikrokernel Helios, paroolihaldur Himitsu, kiirteki süsteem raytracing, krüptimisprogramm box, bittorrent-deemon btqd, scheduled (sarnane cron süsteemile), toothbrush (klient ja server finger protokolli). Tuleviku plaanide seas on mainitud keele spetsifikatsiooni stabiliseerimist ja standardraamatukogu koostisosade stabiliseerimist, toetamatute platvormide ja arhitektuuride toe rakendamist, raamatukogufunktsioonide lisamist TLS 1.2 ja 1.3 toe jaoks.

Hare keeles koodifail: 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»); }; };

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster