Drew DeVault, autor i mjedisit të përdoruesit Sway, klientit të email-it Aerc dhe platformës së zhvillimit bashkëpunues SourceHut, ka publikuar versionin 0.26.0 të gjuhës së programimit Hare. Hare reklamohet si një gjuhë programimi sistemesh e ngjashme me C, por më e thjeshtë se C. Kodi burimor i përpiluesit dhe zinxhirit të mjeteve janë të licencuar sipas GPLv3, dhe kodi standard i bibliotekës është i licencuar sipas MPL (Licenca Publike Mozilla).
Gjuha është e optimizuar për zgjidhjen e problemeve të nivelit të ulët si zhvillimi i sistemeve operative, përpiluesit, aplikacionet e rrjetit dhe shërbimet e sistemit që kërkojnë performancë maksimale dhe kontroll të plotë mbi ekzekutimin. Gjuha përdor menaxhimin manual të kujtesës dhe një sistem të tipit statik, në të cilin çdo ndryshore duhet t'i caktohet në mënyrë eksplicite një lloj specifik.
Për të ekzekutuar aplikacionin, ofrohet një kohë minimale ekzekutimi dhe për zhvillim, shpërndahet një bibliotekë standarde funksionesh, duke siguruar akses në ndërfaqet bazë të sistemit operativ, si dhe duke ofruar funksione për të punuar me algoritme standarde, protokolle dhe formate, duke përfshirë mjete për përdorimin e shprehjeve të rregullta dhe enkriptimit. Për zhvillimin e aplikacioneve grafike, është duke u zhvilluar paketa e veglave Hare-wayland, si dhe lidhjet për aksesin në aftësitë e GTK, Vulkan, OpenGL, SDL3 dhe libui.
NĂ« versionin e ri:
- U shtua konstrukti i ciklit "for(âŠ){âŠ} else {âŠ}" dhe aftĂ«sia pĂ«r tĂ« pĂ«rdorur njĂ« cikli si shprehje pĂ«r caktimin e njĂ« vlere nĂ« njĂ« variabĂ«l "item = for(âŠ){âŠ}". Vlera qĂ« do t'i caktohet variablit mund tĂ« kthehet kur cikli ndĂ«rpritet nga shprehja "break value" ose duke specifikuar "yield default_value" nĂ« bllokun "else{âŠ}" tĂ« bashkangjitur nĂ« ciklin, i cili thirret nĂ«se cikli nuk ndĂ«rpritet nga break. const item = for (let sample .. items) { if (item.key == key) { break item; }; } else { yield -1; };
- U shtua mundësia për të përdorur caktimin e vlerës "_" për të injoruar trajtimin e gabimeve (nëse ndodh një gabim, nuk do të ngrihet asnjë pohim). _ = os::remove(«/some/file»);
- U shtua mundësia për të përdorur vlerën "_" për të krijuar fusha pa emër në struktura. Fusha të tilla 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 };
- Tani është e mundur të lihen në mënyrë eksplicite variablat dhe fushat në struktura në një gjendje të painicializuar duke u caktuar atyre vlerën "@undefined". Më parë, gjuha kërkonte që të gjitha variablat lokale dhe globale të inicializoheshin në kohën e krijimit. Lënia e tyre të painicializuara mund të jetë e nevojshme kur një variabël duhet të inicializohet më vonë, jo në kohën e deklarimit, për shembull, kur një tregues për një variabël që funksioni duhet ta inicializojë i kalohet një funksioni. le x: my_object = @undefined;
- Shtuar mbështetje për sistemin operativ Dragonfly BSD. Mbështetur më parë Linux, FreeBSD, NetBSD dhe OpenBSD.
Burimi: opennet.ru
