Drew DeVault, autori i mjedisit të përdoruesit Sway, klientit të postës Aerc dhe platformës për zhvillim të përbashkët SourceHut, publikoi versionin 0.26.0 të gjuhës së programimit Hare. Hare paraqitet si një gjuhë programimi sistemore, e ngjashme me gjuhën C, por më e thjeshtë se C. Kodi burimor i kompilatorit dhe mjeteve shpërndahet nën licencën GPLv3, ndërsa kodi i bibliotekës standarde nën licencën MPL (Mozilla Public License).
Gjuha është optimizuar për zgjidhjen e detyrave të nivelit të ulët, si zhvillimi i sistemeve operative, kompilerëve, aplikacioneve rrjet dhe mjeteve sistemore, për të cilat kërkohet arritja e performancës maksimale dhe kontrolli të plotë mbi ekzekutimin. Në këtë gjuhë aplikohet menaxhimi manual i memories dhe një sistem i tipave statik, ku çdo variabël duhet t'i caktohet një tip i caktuar.
Për realizimin e aplikacionit ofrohet një runtime minimal, ndërsa për zhvillim shpërndahet një bibliotekë standarde funksionesh, e cila siguron akses në ndërfaqet bazë të sistemit operativ, si dhe ofron funksione për punë me algoritme tipike, protokolle dhe formate, duke përfshirë mjete për përdorimin e shprehjeve të rregullta dhe enkriptimeve. Për zhvillimin e aplikacioneve grafike, po zhvillohet mjetet e hare-wayland, si dhe lidhje për akses në mundësitë e GTK, Vulkan, OpenGL, SDL3 dhe libui.
Në këtë version të ri:
- ĂshtĂ« shtuar struktura e ciklit «for(âŠ){âŠ} else {âŠ}» dhe mundĂ«sia e pĂ«rdorimit tĂ« ciklit si njĂ« shprehje pĂ«r caktimin e vlerĂ«s pĂ«r njĂ« variabĂ«l «item = for(âŠ){âŠ}». Vlera qĂ« do t'i caktohet variablĂ«s mund tĂ« kthehet nĂ« rast tĂ« ndĂ«rprerjes sĂ« ciklit me shprehjen «break vlerë» ose pĂ«rmes pĂ«rcaktimit «yield vlerĂ«_pĂ«r_kĂ«tu» nĂ« bllokun e bashkuar me ciklin «else{âŠ}», i cili thirret nĂ«se cikli nuk Ă«shtĂ« ndĂ«rprerĂ« pĂ«rmes break. const item = for (let sample .. items) { if (item.key == key) { break item; }; } else { yield -1; };
- Shtuar mundësinë e përdorimit të atribuimit të vlerës «_» për të injoruar përpunimin e gabimeve (në rast se ndodh një gabim, nuk do të ndodhë asnjë assertion). _ = os::remove(«/some/file»);
- Shtuar mundësinë e përdorimit të vlerës «_» për krijimin e fushave pa emër në struktura. Këto fusha mund të përdoren për mbushje shtesë. export type my_struct = struct @packed { x: u32, // offset: 0 _: u8, // offset: 4 y: u64, // offset: 5 };
- Realizuar mundësinë e lënies eksplicite të variablave dhe fushave në struktura në një gjendje të pa inicializuar, përmes atribuimit të vlerës «@undefined». Më parë, gjuha kërkonte që të gjithë variablat lokalë dhe globalë të ishin të inicializuar gjatë krijimit. Lënia pa inicializim mund të jetë e nevojshme kur një variabël duhet të inicializohet jo gjatë shpalljes, por më vonë, për shembull, kur një tregues për një variabël i jepet funksionit, të cilin ky funksion duhet ta inicializojë. let x: my_object = @undefined;
- Shtuar mbështetje për sistemin operativ Dragonfly BSD. Më parë, ishin mbështetur Linux, FreeBSD, NetBSD dhe OpenBSD.
Burimi: opennet.ru
