Drew DeVault, författaren bakom anvÀndarmiljön Sway, e-postklienten Aerc och plattformen för gemensam utveckling SourceHut, har presenterat programmeringssprÄket Hare, som han och hans team har arbetat med under de senaste tvÄ och ett halvt Ären. Hare marknadsförs som ett systemprogrammeringssprÄk som liknar C, men Àr enklare Àn C. Bland de nyckelprinciper som ligger till grund för designen av Hare Àr fokus pÄ förenkling och fullt förtroende för programmerarens handlingar (att utföra exakt det som anges, utan sjÀlvgÄende och implicit beteende), tillsammans med stödverktyg för att identifiera vanliga fel och problem.
KÀllkoden till kompilatorn och verktygssatsen distribueras under licensen GPLv3, medan koden för standardbiblioteket omfattas av MPL (Mozilla Public License). I den första offentliga utgÄvan anges stöd för operativsystemen Linux och FreeBSD pÄ plattformarna x86_64, aarch64 och riscv64, samt autonom anvÀndning för att köra direkt pÄ hÄrdvara utan operativsystem. Planerna nÀmner stöd för operativsystemen NetBSD, OpenBSD, Illumos, Haiku och Plan 9 samt plattformarna ppc64le, i686 och arm32.
SprÄket anvÀnder manuell minneshantering och ett statiskt typ-system dÀr varje variabel explicit mÄste tilldelas en viss typ. För att köra applikationen kopplas en minimal runtime. SprÄket Àr optimerat för att lösa lÄg-nivÄ uppgifter, sÄsom utveckling av operativsystem, kompilatorer, nÀtverksapplikationer och systemverktyg, för vilka maximal prestanda och full kontroll över exekveringen krÀvs.
För utvecklare har en standardbibliotek av funktioner förberetts, vilket ger tillgÄng till grundlÀggande grÀnssnitt i operativsystemet, standardalgoritmer och implementationer av protokoll och format. Biblioteket tÀcker omrÄden som in-/utdata, filhantering, reguljÀra uttryck, kryptering, nÀtverksinteraktion, tids- och datumoperationer, tillgÄng till typiska Unix-primitiv (t.ex. poll, fnmatch och glob), parsing och typkontroll. Separata bindningar tillhandahÄlls för att fÄ tillgÄng till funktioner i OpenGL, SDL2 och libui.
Exempel pÄ projekt skrivna i Hare-sprÄket inkluderar mikro-kÀrnan Helios, lösenordshanteraren Himitsu, raytracing-systemet, krypteringsprogrammet box, bittorrent-demonen btqd, schemalÀggaren (motsvarighet till cron-systemet), toothbrush (klient och för protokollet finger). server Framöver nÀmns stabilisering av sprÄkets specifikation och standardbibliotekets innehÄll, implementering av stöd för saknade plattformar och arkitekturer, samt tillÀgg av bibliotekfunktioner för att stödja TLS 1.2 och 1.3.
Exempel pĂ„ kod i Hare-sprĂ„ket: 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»); }; };
KĂ€lla: opennet.ru
