Drew DeVault, Sway колдонуучу чөйрөсүнүн, Aerc электрондук почта кардарынын жана SourceHut биргелешкен өнүктүрүү платформасынын автору, ал жана анын командасы акыркы эки жарым жылдан бери иштеп жаткан Hare программалоо тилин тааныштырды. Hare C тилине окшош, бирок Cге караганда жөнөкөй системалык программалоо тили катары белгилүү. Hare долбоорлоонун негизги принциптеринин арасында айтылган басым жөнөкөйлөштүрүүгө жана программисттин иш-аракеттерине толук ишенүүгө багытталган (такталганды так аткарыңыз, демилгесиз жана кыйыр жүрүм-туруму жок), типтүү каталарды жана көйгөйлөрдү аныктоо үчүн көмөкчү куралдар бар.
Компилятор жана куралдар чынжырынын булак коду GPLv3 лицензиясы боюнча, ал эми стандарттык китепкана коду MPL (Mozilla Public License) лицензиясы боюнча лицензияланган. Биринчи коомдук чыгарылыш операциялык системаларды колдоону жарыялаган. Linux жана x86_64, aarch64 жана riscv64 платформаларындагы FreeBSD, ошондой эле ачык металл менен иштөө үчүн өз алдынча ишке ашыруу. Пландарга NetBSD, OpenBSD, Illumos, Haiku жана Plan 9 операциялык системаларын жана ppc64le, i686 жана arm32 платформаларын колдоо кирет.
Тил эстутумду кол менен башкарууну жана статикалык типтеги системаны колдонот, мында ар бир өзгөрмө белгилүү бир типке ыйгарылышы керек. Тиркемени иштетүү үчүн минималдуу иштөө убактысы тиркелет. Тил максималдуу аткарууну жана толук аткарууну көзөмөлдөөнү талап кылган операциялык системаларды, компиляторлорду, тармактык тиркемелерди жана системалык утилиттерди иштеп чыгуу сыяктуу төмөнкү деңгээлдеги көйгөйлөрдү чечүү үчүн оптималдаштырылган.
Иштеп чыгуучулар үчүн операциялык системанын негизги интерфейстерине, стандарттык алгоритмдерге жана протоколдор менен форматтарды ишке ашырууга мүмкүндүк берүүчү функциялардын стандарттык китепканасы даярдалган. Китепкана киргизүү/чыгарма, файл менен иштөө, регулярдуу туюнтмалар, шифрлөө, тармактык, убакыт жана дата операциялары, Unixтин жалпы примитивдерине жетүү (мисалы, сурамжылоо, fnmatch жана glob), талдоо жана типти текшерүү сыяктуу тармактарды камтыйт. OpenGL, SDL2 жана libui мүмкүнчүлүктөрүнө кирүү үчүн байланыштар өзүнчө берилет.
Hare тилинде жазылган долбоорлордун мисалдарына Helios микроядросу, Himitsu сырсөз менеджери, raytracing системасы, box шифрлөө программасы, btqd bittorrent демону, scheduled (cron сыяктуу система), тиш щеткасы (клиент жана Server (манжа протоколу үчүн). Келечектеги пландарга тилдин спецификациясын жана стандарттык китепкананы турукташтыруу, жок платформаларды жана архитектураларды колдоону ишке ашыруу жана TLS 1.2 жана 1.3 колдоо үчүн китепкана функцияларын кошуу кирет.
Hare тилиндеги мисал код: use crypto::sha256; encoding колдонуу::hex; fmt колдонуу; хэш колдонуу; useio; колдонуу os; экспорт fn main() void = { const хэш = sha256::sha256(); const файл = os::open("main.ha")!; defer io::close(файл); io::copy(&хэш, файл)!; сумма болсун: [sha256::SIZE]u8 = [0...]; hash::sum(&хэш, сумма); hex::encode(os::stdout, сумма)!; fmt::println(); const greetings = [ “Салам, дүйнө!”, “¡Hola Mundo!”, “Γειά σου Κόσμε!”, “Салам, дүйнө!”, “こんにちは世界!”, ]; үчүн (лет i = 0z; i < len(саламдашуу); i += 1) { fmt::println(саламдашуу[i])!; }; let x: *int = alloc(42); fmt::printfln(" x: {}", x)!; fmt::printfln("*x: {}", *x)!; free(x); const файл = os::open(os::args[1]); defer io::close(файл)!; буфер болсун: *[65535]u8 = alloc([0...]); акысыз кийинкиге калтыруу (буфер); const n = io::read(файл, буфер)! өлчөмү катары; io::write(os::stdout, буфер[..n]); }; fn sort(пункттар: []int) void = { ... }; @test fn sort() void = { элементтер болсун = [5, 4, 3, 2, 1]; сорттоо(пункт); for (let i = 1z; i < len(items); i += 1) { assert(items[i - 1] <= items[i], “тизме сорттолбогон”); }; };
Source: opennet.ru
