Дрю ДеВаулт, муаллифи муҳити корбарии Sway, муштарии почтаи электронии Aerc ва платформаи рушди муштараки SourceHut, забони барномасозии Hare-ро муаррифӣ кард, ки ӯ ва дастаи ӯ дар тӯли дувуним соли охир таҳия кардаанд. Hare ҳамчун забони барномасозии системаҳо ҳисоб карда мешавад, ки ба C шабоҳат дорад, вале аз C соддатар аст. Принсипҳои асосии тарҳрезии Харе тамаркуз ба соддагардонӣ ва эътимоди комил ба амалҳои барномасозро (иҷро кардани он чизеро, ки бе ягон рафтори худсарона ё номуайян) дар бар мегиранд, бо пешниҳоди абзорҳои дастгирӣ барои муайян кардани хатогиҳо ва мушкилоти умумӣ дар бар мегиранд.
Коди сарчашмаи компилятор ва занҷири асбобҳо тибқи GPLv3 ва коди китобхонаи стандартӣ тибқи MPL (Mozilla Public License) иҷозатнома гирифтаанд. Нахустин нашри оммавӣ дастгирии системаҳои амалиётиро эълон кард. Linux ва FreeBSD дар платформаҳои x86_64, aarch64 ва riscv64, инчунин татбиқи мустақил барои амалиёти бе металл. Нақшаҳо дастгирии системаҳои оператсионии NetBSD, OpenBSD, Illumos, Haiku ва Plan 9 ва платформаҳои ppc64le, i686 ва arm32-ро дар бар мегиранд.
Забон идоракунии хотираи дастӣ ва системаи навъи статикиро истифода мебарад, ки ҳар як тағирёбандаро ба таври возеҳ як навъи мушаххас таъин мекунад. Вақти ҳадди ақал барои иҷрои барнома таъин карда мешавад. Забон барои вазифаҳои сатҳи паст, аз қабили таҳияи системаҳои оператсионӣ, компиляторҳо, замимаҳои шабакавӣ ва утилитаҳои система, ки иҷрои ҳадди аксар ва назорати пурраи иҷроро талаб мекунанд, оптимизатсия карда шудааст.
Барои таҳиягарон китобхонаи стандартии функсияҳо омода карда шудааст, ки дастрасӣ ба интерфейсҳои асосии системаи оператсионӣ, алгоритмҳои маъмулӣ ва татбиқи протоколҳо ва форматҳоро таъмин мекунад. Китобхона соҳаҳоеро дар бар мегирад, аз қабили вуруд/баромад, коркарди файл, ифодаҳои муқаррарӣ, рамзгузорӣ, шабакасозӣ, амалиёти вақт ва сана, дастрасӣ ба примитивҳои стандартии Unix (ба монанди poll, fnmatch ва glob), таҳлил ва санҷиши намуд. Барои дастрасӣ ба қобилиятҳои OpenGL, SDL2 ва libui пайвандҳои алоҳида таъмин карда мешаванд.
Намунаҳои лоиҳаҳое, ки бо забони Hare навишта шудаанд, инҳоянд: микроядрои Helios, мудири пароли Himitsu, системаи raytracing, барномаи рамзгузории қуттӣ, демони bittorrent btqd, scheduled (системаи монанд ба cron), хасуи дандон (муштарӣ ва сервер (барои протоколи ангушт). Нақшаҳои оянда иборатанд аз устувор кардани мушаххасоти забон ва китобхонаи стандартӣ, татбиқи дастгирии платформаҳо ва меъмориҳои гумшуда ва илова кардани функсияҳои китобхона барои дастгирии TLS 1.2 ва 1.3.
Рамзи мисол дар Hare: истифода crypto::sha256; encoding истифода баред::hex; fmt-ро истифода баред; истифодаи hash; истифода; истифодаи OS; содироти fn main () void = { const hash = sha256 :: sha256 (); const файл = os::open("main.ha")!; таъхир io::close(файл); io :: нусхабардорӣ (& hash, файл)!; ҷамъ кунед: [sha256::SIZE]u8 = [0...]; hash::sum(& hash, sum); hex::code(os::stdout, sum); fmt::println(); const greetings = [ “Салом, ҷаҳон!”, “¡Hola Mundo!”, “Γειά σου Κόσμε!”, “Салом, ҷаҳон!”, “こんにちは世界!”, ]; барои (бигзор i = 0z; i < len(салом); i += 1) { fmt::println(салом[i])!; }; бигзор x: *int = alloc (42); fmt::printfln(" x: {}", x); fmt::printfln("*x: {}", *x)!; озод (x); файли const = os::open(os::args[1]); таъхир io::close(файл)!; бигзор буфер: *[65535]u8 = alloc ([0...]); таъхири ройгон (буферӣ); const n = io :: хондан (файл, буфер)! ҳамчун андоза; io::write (os::stdout, буфер [..n]); }; fn sort(банди: []int) void = { ... }; @test fn sort() void = { бигзор адад = [5, 4, 3, 2, 1]; ба навъҳо ҷудо кардан (мавод); барои (бигзор i = 1z; i < len(items); i += 1) { assert(items[i - 1] <= items[i], "рӯйхат мураттаб карда нашудааст"); }; };
Манбаъ: opennet.ru
