Rust 1.75 eta unikernel Hermit 0.6.7 programazio hizkuntzaren kaleratzea

Rust 1.75 erabilera orokorreko programazio-lengoaia argitaratu da, Mozilla proiektuak sortua, baina orain Rust Foundation irabazi asmorik gabeko erakunde independentearen babespean garatua. Lengoaiak memoriaren segurtasunean oinarritzen da eta lanaren paralelismo handia lortzeko bitartekoak eskaintzen ditu zabor-biltzailea eta exekuzio-denbora erabiltzea saihestuz (exekuzio-denbora liburutegi estandarraren hasierako oinarrizko hasierara eta mantentzera murrizten da).

Rust-en memoria maneiatzeko metodoek garatzaileari erakusleak manipulatzerakoan akatsetatik salbatzen dute eta maila baxuko memoria-kudeaketaren ondorioz sortzen diren arazoetatik babesten dute, hala nola, memoria-eremu batera atzitzea askatu ondoren, erakusle nuluak deserreferentziak egitea, buffer gainditzeak, etab. Liburutegiak banatzeko, eraikuntzak emateko eta mendekotasunak kudeatzeko, proiektuak Cargo paketeen kudeatzailea garatzen du. crates.io biltegia liburutegiak ostatatzeko onartzen da.

Memoriaren segurtasuna Rust-en konpilazio garaian eskaintzen da erreferentziak egiaztatzeko, objektuen jabetzaren jarraipena eginez, objektuen iraupenen (esparruak) jarraipena eginez eta kodearen exekuzioan memoria sarbidearen zuzentasuna ebaluatuz. Rust-ek osoko gainezkatzeen aurkako babesa eskaintzen du, erabili aurretik aldagaien balioak derrigorrezko hasieratzea eskatzen du, liburutegi estandarrean akatsak hobeto kudeatzen ditu, erreferentzia eta aldagai aldaezinen kontzeptua lehenespenez aplikatzen du, idazketa estatiko sendoa eskaintzen du akats logikoak minimizatzeko.

Berrikuntza nagusiak:

  • Ezaugarri pribatuetan "async fn" eta "->impl Trait" idazkera erabiltzeko gaitasuna gehitu da. Adibidez, β€œ->impl Trait” erabiliz, iterador bat itzultzen duen ezaugarri-metodo bat idatz dezakezu: ezaugarri Edukiontzi { fn items(&self) -> impl Iterator; } MyContainer-erako impl edukiontzia { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Ezaugarriak "async fn" erabiliz ere sor ditzakezu: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // honela zabalduko da: // fn fetch(&self, url: Url) -> impl Future; }

  • Erakusleekiko byte-desplazamenduak kalkulatzeko APIa gehitu da. Erakusle hutsekin lan egitean (β€œ*const T” eta β€œ*mut T”), baliteke erakusleari desplazamendu bat gehitzeko eragiketak behar izatea. Aurretik, horretarako β€œ::add(1)” bezalako eraikuntza bat erabiltzea posible zen, β€œsize_of::()”-ren tamainari zegokion byte kopurua gehituz. API berriak eragiketa hau sinplifikatzen du eta byte-desplazamenduak manipulatzea ahalbidetzen du motak lehenik "*const u8" edo "*mut u8"-ra igorri gabe.
    • erakuslea::byte_add
    • erakuslea::byte_offset
    • erakuslea::byte_offset_from
    • erakuslea::byte_sub
    • erakuslea::wrapping_byte_add
    • erakuslea:: wrapping_byte_offset
    • erakuslea:: wrapping_byte_sub
  • Rustc konpilatzailearen errendimendua areagotzeko lanean jarraitu da. BOLT optimizatzailea gehitu da, estekaren ondorengo fasean exekutatzen dena eta aurrez prestatutako exekuzio-profil bateko informazioa erabiltzen duena. BOLT erabiltzeak konpiladorearen exekuzioa %2 inguru bizkortzeko aukera ematen du liburustc_driver.so liburutegiko kodearen diseinua aldatuz prozesadorearen cachea eraginkorrago erabiltzeko.

    Rustc konpilatzailea "-Ccodegen-units=1" aukerarekin eraikitzea barne, LLVM-en optimizazioaren kalitatea hobetzeko. Egindako probek errendimenduaren igoera erakusten dute β€œ-Ccodegen-units=1” eraikuntzaren kasuan, gutxi gorabehera %1.5. Gehitutako optimizazioak lehenespenez gaituta daude x86_64-unknown-linux-gnu plataformarako soilik.

    Aurretik aipatutako optimizazioak Google-k probatu zituen Rust-en idatzitako Android plataformako osagaien eraikuntza-denbora murrizteko. Android eraikitzerakoan "-C codegen-units=1" erabiltzeak tresna-kitaren tamaina % 5.5 murriztea eta errendimendua % 1.8 handitzea ahalbidetu digu, tresna-kitaren eraikuntza-denbora ia bikoiztu zen bitartean.

    Lotura-denborako zabor bilketa ("--gc-sections") gaituz gero, errendimenduaren irabazia % 1.9ra igo zen, lotura-denboraren optimizazioa (LTO) % 7.7ra eta profilean oinarritutako optimizazioak (PGO) % 19.8ra arte. Azkenean, BOLT utilitatea erabiliz optimizazioak aplikatu ziren, eta horrek eraikitze-abiadura %24.7ra igotzea ahalbidetu zuen, baina tresna-kitaren tamaina %10.9 handitu zen.

    Rust 1.75 eta unikernel Hermit 0.6.7 programazio hizkuntzaren kaleratzea

  • APIaren zati berri bat egonkorren kategoriara eraman da, eta ezaugarrien metodoak eta inplementazioak egonkortu dira:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • Fitxategia::set_modified
    • Fitxategia::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Aukera::as_slice
    • Aukera::as_mut_slice
    • erakuslea::byte_add
    • erakuslea::byte_offset
    • erakuslea::byte_offset_from
    • erakuslea::byte_sub
    • erakuslea::wrapping_byte_add
    • erakuslea:: wrapping_byte_offset
    • erakuslea:: wrapping_byte_sub
  • "const" atributua, konstanteen ordez edozein testuingurutan erabiltzeko aukera zehazten duena, funtzioetan erabiltzen da:
    • Ipv6Addr::to_ipv4_mapped
    • AgianUninit::assume_init_read
    • AgianUninit::zeroed
    • mem::diskriminatzailea
    • mem::zeroed
  • Hirugarren laguntza-maila csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd eta mipsel-unknown-netbsd plataformetarako ezarri da. Hirugarren mailak oinarrizko euskarria dakar, baina proba automatizatu gabe, eraikuntza ofizialak argitaratu edo kodea eraiki daitekeen egiaztatu gabe.

Gainera, Hermit proiektuaren bertsio berri bat nabarmendu dezakegu, zeinak kernel espezializatu bat garatzen du (unikernel), Rust lengoaian idatzia, geruza gehigarririk gabe hipervisor edo hardware hutsaren gainean exekutatu daitezkeen aplikazio autonomoak eraikitzeko tresnak eskaintzen dituena. eta sistema eragilerik gabe. Eraikitakoan, aplikazioa liburutegi batera estatikoki lotzen da, eta horrek modu independentean inplementatzen ditu beharrezko funtzionalitate guztiak, sistema eragilearen nukleoari eta sistemako liburutegiei lotuta egon gabe. Proiektuaren kodea Apache 2.0 eta MIT lizentziapean banatzen da. Assembly-a Rust, Go, Fortran, C eta C++-n idatzitako aplikazioen exekuzio autonomorako onartzen da. Proiektua QEMU eta KVM erabiliz Hermit abiarazteko aukera ematen duen abiarazle propioa garatzen ari da.

Iturria: opennet.ru

Gehitu iruzkin berria