Drew DeWalt prezante langaj pwogram Hare Systems

Drew DeVault, otè anviwònman itilizatè Sway, kliyan imel Aerc, ak platfòm devlopman kolaboratif SourceHut, te prezante langaj pwogram Hare, kote li menm ak ekip li a ap travay sou dezan edmi ki sot pase yo. Hare fè konnen kòm yon langaj pwogramasyon sistèm ki sanble ak C, men pi senp pase C. Pami prensip konsepsyon kle Hare, konsantre a se sou senplifikasyon ak konfyans konplè nan aksyon pwogramè a (fè egzakteman sa yo espesifye, san inisyativ ak konpòtman implicite), ak prezans nan zouti oksilyè pou idantifye erè tipik ak pwoblèm.

Kòd sous konpilatè a ak chèn zouti a gen lisans GPLv3, epi kòd bibliyotèk estanda a gen lisans MPL (Mozilla Public License). Premye vèsyon piblik la te anonse sipò pou sistèm operasyon yo Linux ak FreeBSD sou platfòm x86_64, aarch64, ak riscv64, ansanm ak yon aplikasyon endepandan pou operasyon bare-metal. Plan yo gen ladan sipò pou sistèm operasyon NetBSD, OpenBSD, Illumos, Haiku, ak Plan 9 ansanm ak platfòm ppc64le, i686, ak arm32.

Lang lan sèvi ak jesyon manyèl memwa ak yon sistèm kalite estatik, nan ki chak varyab dwe klèman asiyen yon kalite espesifik. Pou kouri aplikasyon an, yo tache yon tan minimòm. Langaj la optimize pou rezoud pwoblèm ki ba nivo tankou devlope sistèm opere, konpilateur, aplikasyon rezo ak sèvis piblik sistèm ki mande pou pèfòmans maksimòm ak kontwòl egzekisyon konplè.

Yon bibliyotèk estanda fonksyon yo te prepare pou devlopè yo, ki bay aksè a koòdone debaz yo nan sistèm operasyon an, algoritm estanda ak aplikasyon pwotokòl ak fòma. Bibliyotèk la kouvri domèn tankou antre/sòti, manipilasyon fichye, ekspresyon regilye, chifreman, rezo, lè ak dat operasyon yo, aksè a primitif Unix komen (tankou sondaj, fnmatch ak glob), analiz ak tcheke tip. Liaison pou jwenn aksè nan OpenGL, SDL2 ak kapasite libui yo bay separeman.

Men kèk egzanp pwojè ki ekri nan langaj Hare: mikronwayo Helios la, jesyonè modpas Himitsu a, sistèm raytracing la, pwogram chifreman bwat la, demon bittorrent btqd la, scheduled (yon sistèm ki sanble ak cron), bwòs dan (yon kliyan ak...). sèvè (pou pwotokòl dwèt la). Plan pou lavni yo gen ladan yo estabilizasyon spesifikasyon lang lan ak bibliyotèk estanda a, aplikasyon sipò pou platfòm ak achitekti ki manke yo, epi ajoute fonksyon bibliyotèk pou sipòte TLS 1.2 ak 1.3.

Egzanp kòd nan Hare: itilize crypto::sha256; sèvi ak kodaj::hex; itilize fmt; sèvi ak hash; useio; sèvi ak os; ekspòtasyon fn main() void = {const hash = sha256::sha256(); fichye const = os::open ("main.ha"!); ranvwaye io::fèmen(dosye); io::kopi (&hash, dosye)!; kite sòm: [sha256::SIZE]u8 = [0...]; hash::sum(&hash, sòm); hex::encode(os::stdout, sum)!; fmt::println()!; const greetings = [ "Bonjou, lemonn!", "¡Hola Mundo!", "Γειά σου Κόσμε!", "Bonjou, lemonn!", "こんにちは世界!", ]; pou (kite mwen = 0z; mwen < len(bonjou); mwen += 1) { fmt::println(bonjou [mwen])!; }; kite x: *int = alloc(42); fmt::printfln ("x: {}", x)!; fmt::printfln("*x: {}", *x)!; gratis (x); fichye const = os::open(os::args[1])!; defer io::close(file)!; kite tampon: *[65535]u8 = alloc([0...]); ranvwaye gratis (tanpon); const n = io::li (fichye, tanpon)! kòm gwosè; io::write(os::stdout, buffer[..n])!; }; fn sort(atik: []int) void = { ... }; @test fn sort() void = { kite atik = [5, 4, 3, 2, 1]; sòt (atik); pou (ki se mwen = 1z; mwen < len(atik); mwen += 1) { assert (atik [i - 1] <= atik [i], "lis se unsorted"); }; };

Sous: opennet.ru

Achte hosting serye pou sit ki gen pwoteksyon DDoS, sèvè VPS VDS 🔥 Achte yon hébergement sit entènèt serye ak pwoteksyon DDoS, sèvè VPS VDS | ProHoster