Llançament del llenguatge de programació Hare 0.26

Drew DeVault, autor de l'entorn d'usuari Sway, el client de correu electrònic Aerc i la plataforma de desenvolupament col·laboratiu SourceHut, ha publicat la versió 0.26.0 del llenguatge de programació Hare. Hare es presenta com un llenguatge de programació de sistemes similar a C però més senzill. El compilador i el codi font de la cadena d'eines tenen llicència GPLv3, i el codi de la biblioteca estàndard té llicència MPL (Mozilla Public License).

El llenguatge està optimitzat per resoldre problemes de baix nivell, com ara el desenvolupament de sistemes operatius, compiladors, aplicacions de xarxa i utilitats del sistema, que requereixen el màxim rendiment i control total sobre l'execució. El llenguatge utilitza una gestió manual de memòria i un sistema de tipus estàtic, en el qual a cada variable s'ha d'assignar explícitament un tipus específic.

Per executar l'aplicació, es proporciona un temps d'execució mínim i, per al desenvolupament, es distribueix una biblioteca estàndard de funcions, que proporciona accés a les interfícies bàsiques del sistema operatiu, a més d'oferir funcions per treballar amb algorismes, protocols i formats estàndard, com ara eines per utilitzar expressions regulars i xifratge. Per al desenvolupament d'aplicacions gràfiques, s'està desenvolupant el conjunt d'eines hare-wayland, així com enllaços per accedir a les capacitats de GTK, Vulkan, OpenGL, SDL3 i libui.

En la nova versió:

  • S'ha afegit la construcció del bucle "for(…){…} else {…}" i la possibilitat d'utilitzar un bucle com a expressió per assignar un valor a una variable "item = for(…){…}". El valor que s'assignarà a la variable es pot retornar quan el bucle es trenca amb l'expressió "break value" o especificant "yield default_value" al bloc "else{…}" adjunt al bucle, que es crida si el bucle no es trenca amb break. const item = for (let sample .. items) { if (item.key == key) { break item; }; } else { yield -1; };
  • S'ha afegit la possibilitat d'utilitzar l'assignació del valor "_" per ignorar el maneig d'errors (si es produeix un error, no es generarà cap asserció). _ = os::remove(«/some/file»);
  • S'ha afegit la possibilitat d'utilitzar el valor "_" per crear camps sense nom en estructures. Aquests camps es poden utilitzar per a un farciment addicional. export type my_struct = struct @packed { x: u32, // offset: 0 _: u8, // offset: 4 y: u64, // offset: 5 };
  • Ara és possible deixar explícitament variables i camps en estructures en un estat no inicialitzat assignant-los el valor "@undefined". Anteriorment, el llenguatge requeria que totes les variables locals i globals s'inicialitzessin en el moment de la creació. Deixar-les sense inicialitzar pot ser necessari quan una variable s'ha d'inicialitzar més tard, no en el moment de la declaració, per exemple, quan es passa a una funció un punter a una variable que la funció ha d'inicialitzar. let x: my_object = @undefined;
  • S'ha afegit compatibilitat amb el sistema operatiu Dragonfly BSD. Anteriorment, s'admetien Linux, FreeBSD, NetBSD i OpenBSD.

Font: opennet.ru

Afegeix comentari