Drew DeVault, avtor uporabniškega okolja Sway, e-poštnega odjemalca Aerc in platforme za skupni razvoj SourceHut, je izdal različico 0.26.0 programskega jezika Hare. Hare se oglašuje kot sistemski programski jezik, podoben jeziku C, vendar enostavnejši od njega. Izvorna koda prevajalnika in orodjarne je licencirana pod licenco GPLv3, koda standardne knjižnice pa pod licenco MPL (Mozilla Public License).
Jezik je optimiziran za reševanje problemov nizke ravni, kot je razvoj operacijskih sistemov, prevajalnikov, omrežnih aplikacij in sistemskih pripomočkov, ki zahtevajo največjo zmogljivost in popoln nadzor nad izvajanjem. Jezik uporablja ročno upravljanje pomnilnika in sistem statičnega tipa, v katerem mora biti vsaki spremenljivki izrecno dodeljen določen tip.
Za zagon aplikacije je na voljo minimalen čas izvajanja, za razvoj pa je distribuirana standardna knjižnica funkcij, ki omogoča dostop do osnovnih vmesnikov operacijskega sistema in ponuja funkcije za delo s standardnimi algoritmi, protokoli in formati, vključno z orodja za uporabo regularnih izrazov in šifriranje. Za razvoj grafičnih aplikacij se razvija komplet orodij hare-wayland ter vezave za dostop do zmogljivosti GTK, Vulkan, OpenGL, SDL3 in libui.
V novi različici:
- Dodana je konstrukcija zanke "for(…){…} else {…}" in možnost uporabe zanke kot izraza za dodelitev vrednosti spremenljivki "item = for(…){…}". Vrednost, ki bo dodeljena spremenljivki, se lahko vrne, ko zanko prekine izraz "break value" ali z določitvijo "yield default_value" v bloku "else{…}", ki je priložen zanki in se pokliče, če zanke ne prekine izraz break. const item = for (let sample .. items) { if (item.key == key) { break item; }; } else { yield -1; };
- Dodana je možnost uporabe dodelitve vrednosti "_" za ignoriranje obravnave napak (če pride do napake, se ne sproži nobena trditev). _ = os::remove(«/some/file»);
- Dodana je možnost uporabe vrednosti "_" za ustvarjanje neimenovanih polj v strukturah. Takšna polja se lahko uporabijo za dodatno zapolnjevanje. export type my_struct = struct @packed { x: u32, // offset: 0 _: u8, // offset: 4 y: u64, // offset: 5 };
- Zdaj je mogoče spremenljivke in polja v strukturah eksplicitno pustiti v neinicializiranem stanju tako, da jim dodelimo vrednost »@undefined«. Prej je jezik zahteval, da so bile vse lokalne in globalne spremenljivke inicializirane ob času ustvarjanja. Pustiti jih neinicializirane je lahko potrebno, kadar je treba spremenljivko inicializirati pozneje, ne ob času deklaracije, na primer, ko se funkciji posreduje kazalec na spremenljivko, ki jo mora funkcija inicializirati. let x: my_object = @undefined;
- Dodana je bila podpora za operacijski sistem Dragonfly BSD. Prej so bili podprti Linux, FreeBSD, NetBSD in OpenBSD.
Vir: opennet.ru
