Inilabas ni Drew DeVault, ang awtor ng Sway user environment, ang Aerc email client, at ang SourceHut collaborative development platform, ang bersyon 0.26.0 ng Hare programming language. Ang Hare ay kinikilala bilang isang systems programming language na katulad ng C ngunit mas simple kaysa sa C. Ang compiler at toolchain source code ay lisensyado sa ilalim ng GPLv3, at ang standard library code ay lisensyado sa ilalim ng MPL (Mozilla Public License).
Ang wika ay na-optimize para sa paglutas ng mga problema sa mababang antas tulad ng pagbuo ng mga operating system, compiler, network application at system utilities na nangangailangan ng maximum na performance at ganap na kontrol sa pagpapatupad. Ang wika ay gumagamit ng manu-manong pamamahala ng memorya at isang static na uri ng sistema, kung saan ang bawat variable ay dapat na tahasang magtalaga ng isang partikular na uri.
Upang patakbuhin ang application, isang minimal na runtime ang ibinibigay, at para sa pag-unlad, ang isang karaniwang library ng mga function ay ipinamamahagi, na nagbibigay ng access sa mga pangunahing interface ng operating system, pati na rin ang pag-aalok ng mga function para sa pagtatrabaho sa mga karaniwang algorithm, protocol at mga format, kabilang ang mga tool para sa paggamit ng mga regular na expression at pag-encrypt. Para sa pagbuo ng mga graphical na application, ang hare-wayland toolkit ay binuo, pati na rin ang mga binding para sa pag-access sa mga kakayahan ng GTK, Vulkan, OpenGL, SDL3 at libui.
Sa bagong bersyon:
- Idinagdag ang "for(…){…} else {…}" loop construct at ang kakayahang gumamit ng loop bilang expression para sa pagtatalaga ng value sa isang variable na "item = for(…){…}". Ang value na itatalaga sa variable ay maaaring ibalik kapag ang loop ay nasira ng "break value" expression o sa pamamagitan ng pagtukoy ng "yield default_value" sa "else{…}" block na nakakabit sa loop, na tinatawag kung ang loop ay hindi nasira ng break. const item = for (let sample .. items) { if (item.key == key) { break item; }; } else { yield -1; };
- Idinagdag ang kakayahang gamitin ang pagtatalaga ng halaga na "_" upang balewalain ang paghawak ng error (kung magkaroon ng error, walang ilalabas na assertion). _ = os::remove(«/some/file»);
- Idinagdag ang kakayahang gamitin ang halagang "_" upang lumikha ng mga walang pangalang field sa mga istruktura. Maaaring gamitin ang mga naturang field para sa karagdagang padding. export type my_struct = struct @packed { x: u32, // offset: 0 _: u8, // offset: 4 y: u64, // offset: 5 };
- Posible na ngayong tahasang iwan ang mga variable at field sa mga istruktura sa isang hindi pa nasisimulan na estado sa pamamagitan ng pagtatalaga sa mga ito ng halagang "@undefined." Dati, hinihiling ng wika na ang lahat ng lokal at pandaigdigang variable ay ma-initialize sa oras ng paglikha. Ang pag-iwan sa mga ito nang hindi nasisimulan ay maaaring kailanganin kapag ang isang variable ay kailangang ma-initialize sa ibang pagkakataon, hindi sa oras ng deklarasyon, halimbawa, kapag ang isang pointer sa isang variable na dapat i-initialize ng function ay ipinapasa sa isang function. let x: my_object = @undefined;
- Naidagdag ang suporta para sa operating system ng Dragonfly BSD. Dati, sinusuportahan ang Linux, FreeBSD, NetBSD, at OpenBSD.
Pinagmulan: opennet.ru
