Den Drew DeVault, den Auteur vum Sway User Ëmfeld, dem Aerc E-Mail Client, an der SourceHut kollaborativ Entwécklungsplattform, huet d'Hare Programméierungssprooch agefouert, un där hien a seng Equipe fir déi lescht zwee an en halleft Joer geschafft hunn. Hare gëtt als Systemprogramméierungssprooch ähnlech wéi C ugesinn, awer méi einfach wéi C. Ënnert de Schlëssel Designprinzipien vum Hare ass de uginnene Fokus op Vereinfachung a komplett Vertrauen an d'Aktiounen vum Programméierer (maacht genau wat spezifizéiert ass, ouni Initiativ an implizit Verhalen), mat der Präsenz vun Hëllefsinstrumenter fir typesch Feeler a Probleemer z'identifizéieren.
De Quellcode vum Compiler an der Toolchain ass ënner der GPLv3 lizenzéiert, an de Standardbibliothéikscode ass ënner der MPL (Mozilla Public License) lizenzéiert. Déi éischt ëffentlech Verëffentlechung huet Ënnerstëtzung fir Betribssystemer ugekënnegt. Linux a FreeBSD op x86_64, aarch64, a riscv64 Plattformen, souwéi eng Standalone Implementatioun fir Bare-Metal Operatioun. D'Pläng enthalen Ënnerstëtzung fir NetBSD, OpenBSD, Illumos, Haiku, a Plan 9 Betribssystemer a ppc64le, i686, an arm32 Plattformen.
D'Sprooch benotzt manuell Erënnerung Gestioun an engem statesch Typ System, an deem all Variabel muss explizit eng spezifesch Zort zougewisen ginn. Fir d'Applikatioun ze lafen, ass e Minimum Runtime befestegt. D'Sprooch ass optimiséiert fir Low-Level Probleemer ze léisen wéi d'Entwécklung vu Betribssystemer, Compilers, Netzwierkapplikatiounen a System Utilities déi maximal Leeschtung a voll Ausféierungskontroll erfuerderen.
Eng Standardbibliothéik vu Funktiounen gouf fir Entwéckler virbereet, déi Zougang zu de Basisinterfaces vum Betribssystem ubitt, Standardalgorithmen an Implementatioune vu Protokoller a Formater. D'Bibliothéik deckt Beräicher wéi Input / Output, Dateimanipulatioun, regelméisseg Ausdrock, Verschlësselung, Vernetzung, Zäit- an Datumoperatiounen, Zougang zu gemeinsame Unix Primitiven (wéi Pollen, fnmatch a Glob), Parsing an Typprüfung. Bindungen fir Zougang zu OpenGL, SDL2 a libui Fäegkeeten ginn separat geliwwert.
Beispiller vu Projeten, déi an der Hare-Sprooch geschriwwe goufen, sinn den Helios-Mikrokernel, den Himitsu-Passwuertmanager, de Raytracing-System, de Box-Verschlësselungsprogramm, de btqd Bittorrent-Daemon, scheduled (e cron-ähnlecht System), toothbrush (e Client an ...). Server (fir de Fangerprotokoll). Zukünfteg Pläng gehéieren d'Stabiliséierung vun der Sproochspezifikatioun an der Standardbibliothéik, d'Ëmsetzung vun Ënnerstëtzung fir fehlend Plattformen an Architekturen, an d'Zousätzlech vu Bibliothéiksfunktiounen fir TLS 1.2 an 1.3 z'ënnerstëtzen.
Beispill Code an Hare: benotzen Krypto :: sha256; benotzen Kodéierung :: Hex; benotzen fmt; benotzen Hash; useio; benotzen os; export fn main () void = { const hash = sha256 :: sha256 (); const Datei = os::open("main.ha"!); defer io::close (Datei); io::copy(&hash, Datei)!; loosse Zomm: [sha256::SIZE]u8 = [0...]; hash :: Zomm (& Hash, Zomm); hex::encode(os::stdout, sum); fmt::println(); const Greetings = [ "Hallo, Welt!", "¡Hola Mundo!", "Γειά σου Κόσμε!", "Hallo, Welt!", "こんにちは世界!", ]; fir (loosst i = 0z; i < len(Begréissung); i += 1) { fmt::println(Begréissung[i])!; }; lass x: *int = alloc(42); fmt::printfln(" x: {}", x); fmt::printfln("*x: {}", *x)!; fräi(x); const Datei = os::open(os::args[1])!; defer io::close (Datei)!; loosse Puffer: *[65535]u8 = alloc([0...]); defer fräi (Puffer); const n = io::read(Datei, Puffer)! wéi Gréisst; io::write(os::stdout, buffer[..n])!; }; fn sort(Items: []int) void = { ... }; @test fn sort() void = {lass items = [5, 4, 3, 2, 1]; Zort (Artikelen); fir (loosst i = 1z; i < len (Elementer); i += 1) { behaapten (Elementer [i - 1] <= Artikelen [i], "Lëscht ass net sortéiert"); }; };
Source: opennet.ru
