Drew DeVault, autori i ambientit të përdoruesit Sway, klientit të postës Aerc dhe platformës së bashkëpunimit SourceHut, prezantoi gjuhën e programimit Hare, në të cilën ai ka punuar me ekipin e tij për dy vite e gjysmë të fundit. Hare paraqitet si një gjuhë programimi sistemor, e afërt me gjuhën C, por më e thjeshtë se C. Një nga parimet kyçe të projektimit të Hare është orientimi drejt thjeshtësimit dhe besimi i plotë në veprimet e programuesit (të kryejë saktësisht atë që është caktuar, pa ndërhyrje ose sjellje të paqartë), duke ofruar mjete ndihmëse për identifikimin e gabimeve dhe problemeve tipike.
Kodet burimore të kompilatorit dhe mjeteve shpërndahen nën licencën GPLv3, ndërsa kodi i bibliotekës standarde nën licencën MPL (Mozilla Public License). Në publikimin e parë publik është njoftuar mbështetje për sistemet operative Linux dhe FreeBSD në platformat x86_64, aarch64 dhe riscv64, si dhe përdorim të pavarur për të ekzekutuar mbi pajisjen pa sistem operativ. Në planet përfshihet mbështetje për sistemet operative NetBSD, OpenBSD, Illumos, Haiku dhe Plan 9 dhe platformat ppc64le, i686 dhe arm32.
Gjuha përdor menaxhim të dorës së memorjes dhe një sistem të statik të tipeve, ku çdo variabël duhet të ketë caktuar qartë një tip të caktuar. Për të ekzekutuar aplikacionin, bashkëngjitet një runtime minimal. Gjuha është optimizuar për zgjidhjen e detyrave të nivelit të ulët, si zhvillimi i sistemeve operative, kompilatorëve, aplikacioneve të rrjetit dhe mjeteve sistemore, për të cilat kërkohen realizimi i performancës maksimale dhe kontrolli i plotë mbi ekzekutimin.
Për zhvilluesit është përgatitur një bibliotekë standarde funksionesh, e cila ofron qasje në ndërfaqet bazë të sistemit operativ, algoritme tipike dhe implementime të protokolleve dhe formateve. Biblioteka mbulon fusha si hyrje/ dalje, punimi me skedarë, shprehje të rregullta, enkriptim, interaksion rrjeti, operacione me kohën dhe datat, qasje në primitivët tipikë Unix (p.sh., poll, fnmatch dhe glob), analizim dhe verifikim të tipave. Veçmas ofrohen lidhjet për qasje në mundësitë e OpenGL, SDL2 dhe libui.
Si shembuj të projekteve të shkruara në gjuhën Hare përmenden mikroëndrra Helios, menaxheri i fjalëkalimeve Himitsu, sistemi i gjurmimit të rrezeve raytracing, program për enkriptim box, demon bittorrent btqd, sistemi i programimit të përgjithshëm (analog me sistemin cron), toothbrush (klienti dhe për protokollin finger). Në planet për të ardhmen theksohet stabilizimi i specifikimit të gjuhës dhe përmbajtjes së bibliotekës standarde, realizimi i mbështetjes për platformat dhe arkitekturat e munguar, dhe shtimi i funksioneve të bibliotekës për mbështetje TLS 1.2 dhe 1.3. server për protokollin finger). Nga planet e ardhshme përmendet stabilizimi i specifikimeve të gjuhës dhe përmbajtjes së bibliotekës standarde, realizimi i mbështetjes për platformat dhe arkitekturat që mungojnë, shtimi i funksioneve të bibliotekës për mbështetje TLS 1.2 dhe 1.3.
Një shembull kodi në gjuhën 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"); }; };
Burimi: opennet.ru
