Drew DeVault, autorul mediului de utilizare Sway, al clientului de e-mail Aerc și al platformei de dezvoltare colaborativă SourceHut, a lansat versiunea 0.26.0 a limbajului de programare Hare. Hare este prezentat ca un limbaj de programare pentru sisteme similar cu C, dar mai simplu decât acesta. Codul sursă al compilatorului și al lanțului de instrumente sunt licențiate sub GPLv3, iar codul standard al bibliotecii este licențiat sub MPL (Mozilla Public License).
Limbajul este optimizat pentru rezolvarea problemelor de nivel scăzut, cum ar fi dezvoltarea de sisteme de operare, compilatoare, aplicații de rețea și utilități de sistem care necesită performanță maximă și control deplin asupra execuției. Limbajul folosește gestionarea manuală a memoriei și un sistem de tip static, în care fiecărei variabile trebuie atribuit în mod explicit un anumit tip.
Pentru a rula aplicația, este furnizat un timp de rulare minim, iar pentru dezvoltare este distribuită o bibliotecă standard de funcții, care oferă acces la interfețele de bază ale sistemului de operare, precum și funcții pentru lucrul cu algoritmi, protocoale și formate standard, inclusiv instrumente pentru utilizarea expresiilor regulate și a criptării. Pentru dezvoltarea aplicațiilor grafice este în curs de dezvoltare setul de instrumente hare-wayland, precum și legături pentru accesarea capabilităților GTK, Vulkan, OpenGL, SDL3 și libui.
În noua versiune:
- A fost adăugată construcția buclei „for(…){…} else {…}” și posibilitatea de a utiliza o buclă ca expresie pentru atribuirea unei valori unei variabile „item = for(…){…}”. Valoarea care va fi atribuită variabilei poate fi returnată atunci când bucla este întreruptă de expresia „break value” sau prin specificarea „yield default_value” în blocul „else{…}” atașat buclei, care este apelată dacă bucla nu este întreruptă de break. const item = for (let sample .. items) { if (item.key == key) { break item; }; } else { yield -1; };
- Adăugată posibilitatea de a utiliza atribuirea valorii „_” pentru a ignora gestionarea erorilor (dacă apare o eroare, nu va fi generată nicio aserțiune). _ = os::remove(«/some/file»);
- Adăugată posibilitatea de a utiliza valoarea „_” pentru a crea câmpuri fără nume în structuri. Astfel de câmpuri pot fi folosite pentru umplere suplimentară. export type my_struct = struct @packed { x: u32, // offset: 0 _: u8, // offset: 4 y: u64, // offset: 5 };
- Acum este posibil să lăsați explicit variabilele și câmpurile din structuri într-o stare neinițializată, atribuindu-le valoarea „@undefined”. Anterior, limbajul necesita ca toate variabilele locale și globale să fie inițializate la momentul creării. Lăsarea lor neinițializate poate fi necesară atunci când o variabilă trebuie inițializată ulterior, nu la momentul declarării, de exemplu, când un pointer către o variabilă pe care funcția trebuie să o inițializeze este transmis unei funcții. let x: my_object = @undefined;
- A fost adăugat suport pentru sistemul de operare Dragonfly BSD. Anterior, erau suportate Linux, FreeBSD, NetBSD și OpenBSD.
Sursa: opennet.ru
