Drew DeVault, der Autor der Benutzerumgebung Sway, des E-Mail-Clients Aerc und der Plattform für gemeinschaftliche Softwareentwicklung SourceHut, hat die Version 0.26.0 der Programmiersprache Hare veröffentlicht. Hare wird als Systemprogrammiersprache präsentiert, die nahe an C ist, jedoch einfacher zu handhaben ist. Der Quellcode des Compilers und der Werkzeuge wird unter der GPLv3-Lizenz veröffentlicht, während der Code der Standardbibliothek unter der MPL (Mozilla Public License) steht.
Die Sprache ist optimiert für Lösungen von niedrig-leveligen Aufgaben, wie die Entwicklung von Betriebssystemen, Compilern, Netzwerk-Anwendungen und System-Utilities, bei denen maximale Performance und vollständige Kontrolle über die Ausführung erforderlich sind. Die Sprache verwendet manuelle Speicherverwaltung und ein statisches Typsystem, bei dem jeder Variablen ausdrücklich ein bestimmter Typ zugewiesen werden muss.
Die Anwendung wird mit einem minimalen Runtime geliefert, während für die Entwicklung eine Standardbibliothek bereitgestellt wird, die Zugriff auf grundlegende Betriebssystem-Interfaces bietet und Funktionen für gängige Algorithmen, Protokolle und Formate bereitstellt, einschließlich Mitteln zur Verwendung regulärer Ausdrücke und zur Verschlüsselung. Für die Entwicklung grafischer Anwendungen wird das Werkzeug hare-wayland entwickelt, sowie Bindungen für den Zugriff auf die Funktionen von GTK, Vulkan, OpenGL, SDL3 und libui.
In der neuen Version:
- Die Schleifenstruktur „for(...){...} else {...}“ wurde hinzugefügt, ebenso die Möglichkeit, Schleifen als Ausdruck zur Zuweisung eines Wertes an die Variable „item = for(...){...}“ zu verwenden. Der Wert, der der Variablen zugewiesen wird, kann durch die Anweisung „break Wert“ beim Beenden der Schleife zurückgegeben werden oder über die Angabe „yield Wert_standard“ im an die Schleife angehängten „else{...}“-Block, der aufgerufen wird, wenn die Schleife nicht über break unterbrochen wurde. const item = for (let sample .. items) { if (item.key == key) { break item; }; } else { yield -1; };
- Die Möglichkeit, den Wert „_“ für die Fehlerbehandlung zuzuweisen (im Falle eines Fehlers tritt keine Assertion auf), wurde hinzugefügt. _ = os::remove("/some/file");
- Die Möglichkeit, den Wert „_“ zur Erstellung unbenannter Felder in Strukturen zu verwenden, wurde eingeführt. Solche Felder können zur zusätzlichen Auffüllung genutzt werden. export type my_struct = struct @packed { x: u32, // offset: 0 _: u8, // offset: 4 y: u64, // offset: 5 };
- Die Möglichkeit wurde implementiert, Variablen und Felder in Strukturen ausdrücklich in einem nicht initialisierten Zustand zu belassen, indem ihnen der Wert „@undefined“ zugewiesen wird. Zuvor verlangte die Sprache, dass alle lokalen und globalen Variablen bei der Erstellung initialisiert werden mussten. Das Belassen ohne Initialisierung kann erforderlich sein, wenn eine Variable nicht beim Deklarieren, sondern später initialisiert werden soll, beispielsweise wenn einer Funktion ein Zeiger auf eine Variable übergeben wird, die diese Funktion initialisieren soll. let x: my_object = @undefined;
- Unterstützung für das Betriebssystem Dragonfly BSD hinzugefügt. Zuvor wurden Linux, FreeBSD, NetBSD und OpenBSD unterstützt.
Quelle: opennet.ru
