Drew DeVault, de auteur van de gebruikersomgeving Sway, de e-mailclient Aerc en het samenwerkingsplatform SourceHut, heeft de programmeertaal Hare gepresenteerd, waaraan hij samen met zijn team de afgelopen tweeënhalf jaar heeft gewerkt. Hare wordt gepresenteerd als een systeem programmeertaal die dicht bij C ligt, maar eenvoudiger is dan C. Een van de belangrijkste ontwerpprincipes van Hare is de focus op vereenvoudiging en volledig vertrouwen op de acties van de programmeur (precies uitvoeren wat er is aangegeven, zonder eigen inbreng en impliciet gedrag), met behulp van hulpmiddelen om typische fouten en problemen te identificeren.
De broncode van de compiler en de toolkit wordt verspreid onder de GPLv3-licentie, en de standaardbibliotheekcode onder de MPL (Mozilla Public License). De eerste publieke release ondersteunt de besturingssystemen Linux en FreeBSD op de platforms x86_64, aarch64 en riscv64, evenals zelfstandige uitvoering op hardware zonder besturingssysteem. Ondersteuning voor de besturingssystemen NetBSD, OpenBSD, Illumos, Haiku en Plan 9 en de platforms ppc64le, i686 en arm32 is gepland.
De taal maakt gebruik van handmatige geheugenbeheer en een statisch type-systeem, waarbij elke variabele expliciet een bepaald type moet krijgen. Voor de uitvoering van een applicatie wordt een minimale runtime gekoppeld. De taal is geoptimaliseerd voor low-level taken, zoals de ontwikkeling van besturingssystemen, compilers, netwerkapplicaties en systeemtools, waarvoor het bereiken van maximale prestaties en volledige controle over de uitvoering vereist is.
Voor ontwikkelaars is er een standaard bibliotheek van functies beschikbaar die toegang biedt tot de basisinterfaces van het besturingssysteem, standaardalgoritmen en implementaties van protocollen en formaten. De bibliotheek dekt gebieden zoals invoer/uitvoer, bestandsbeheer, reguliere expressies, encryptie, netwerken, tijd- en datumoperaties, toegang tot standaard Unix-primitieven (zoals poll, fnmatch en glob), parseren en typecontrole. Separaat worden bindings geleverd om toegang te krijgen tot de mogelijkheden van OpenGL, SDL2 en libui.
Enkele voorbeelden van projecten geschreven in de Hare-taal zijn de microkernel Helios, de wachtwoordmanager Himitsu, het raytracing-systeem, het encryptieprogramma box, de bittorrent-daemon btqd, scheduled (vergelijkbaar met het cron-systeem), toothbrush (client en voor het finger-protocol). server Toekomstplannen omvatten de stabilisatie van de taal specificatie en de samenstelling van de standaardbibliotheek, de implementatie van ondersteuning voor ontbrekende platforms en architecturen, en het toevoegen van bibliotheekfuncties ter ondersteuning van TLS 1.2 en 1.3.
Een voorbeeld van code in de Hare-taal: use crypto::sha256; use encoding::hex; use fmt; use hash; use io; use os; export fn main() void = { const hash = sha256::sha256(); const file = os::open(«main.ha»)!; defer io::close(file); io::copy(&hash, file)!; let sum: [sha256::SIZE]u8 = [0…]; hash::sum(&hash, sum); hex::encode(os::stdout, sum)!; fmt::println()!; const greetings = [ «Hello, world!», «¡Hola Mundo!», «Γειά σου Κόσμε!», «Привет, мир!», «こんにちは世界!», ]; for (let i = 0z; i < len(greetings); i += 1) { fmt::println(greetings[i])!; }; let x: *int = alloc(42); fmt::printfln(» x: {}», x)!; fmt::printfln(«*x: {}», *x)!; free(x); const file = os::open(os::args[1])!; defer io::close(file)!; let buffer: *[65535]u8 = alloc([0…]); defer free(buffer); const n = io::read(file, buffer)! as size; io::write(os::stdout, buffer[..n])!; }; fn sort(items: []int) void = { … }; @test fn sort() void = { let items = [5, 4, 3, 2, 1]; sort(items); for (let i = 1z; i < len(items); i += 1) { assert(items[i — 1] <= items[i], «list is unsorted»); }; };
Bron: opennet.ru
