Gefa út forritunarmálið Rust 1.75 og unikernel Hermit 0.6.7

Útgáfa Rust 1.75 almennt forritunarmálsins, stofnað af Mozilla verkefninu, en nú þróað undir merkjum óháðu sjálfseignarstofnunarinnar Rust Foundation, hefur verið gefin út. Tungumálið leggur áherslu á minnisöryggi og veitir leiðina til að ná mikilli samhliða vinnu á sama tíma og forðast notkun á sorphirðu og keyrslutíma (keyrslutími minnkar í grunnuppsetningu og viðhald á venjulegu bókasafni).

Minni meðhöndlunaraðferðir Rust bjarga þróunaraðilanum frá villum við meðhöndlun ábendinga og vernda gegn vandamálum sem koma upp vegna minnis meðhöndlunar á lágu stigi, eins og aðgangur að minnissvæði eftir að það hefur verið losað, frávísun núllbenda, offramkeyrsla á biðminni o.s.frv. Til að dreifa bókasöfnum, útvega smíði og stjórna ósjálfstæði, þróar verkefnið farmpakkastjórann. Crates.io geymslan er studd til að hýsa bókasöfn.

Minni öryggi er veitt í Rust á þýðingu tíma með tilvísun athugun, halda utan um eignarhald hlut, halda utan um líftíma hlut (umfang) og meta réttmæti minni aðgangs meðan kóða er keyrt. Ryð veitir einnig vernd gegn heiltöluflæði, krefst skyldubundinnar frumstillingar breytugilda fyrir notkun, meðhöndlar villur betur í stöðluðu bókasafni, beitir hugmyndinni um óbreytanlegar tilvísanir og breytur sjálfgefið, býður upp á sterka truflanir innsláttar til að lágmarka rökfræðilegar villur.

Helstu nýjungar:

  • Bætti við möguleikanum á að nota „async fn“ og „->impl Trait“ merkinguna í einkaeinkennum. Til dæmis, með því að nota “->impl Trait” geturðu skrifað eiginleikaaðferð sem skilar endurtekningu: eiginleiki Container { fn items(&self) -> impl Iterator; } impl Container fyrir MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Þú getur líka búið til eiginleika með því að nota "async fn": eiginleiki HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // verður stækkað í: // fn fetch(&self, url: Url) -> impl Future; }

  • Bætt við API til að reikna bætajöfnun miðað við ábendingar. Þegar unnið er með beina bendila („*const T“ og „*mut T“), gæti þurft aðgerðir til að bæta á móti á bendilinn. Fyrir þetta var hægt að nota smíði eins og „::add(1)“, bæta við fjölda bæta sem samsvarar stærð „size_of::()“. Nýja API einfaldar þessa aðgerð og gerir það mögulegt að vinna með bætajöfnun án þess að varpa tegundunum fyrst í "*const u8" eða "*mut u8".
    • bendill::byte_add
    • bendil::byte_offset
    • bendil::bæta_offset_from
    • bendil::byte_sub
    • bendill::wrapping_byte_add
    • bendill::umbúðir_bæta_offset
    • bendil::wrapping_byte_sub
  • Áframhaldandi vinna við að auka afköst rustc þýðanda. Bætti við BOLT fínstillingu, sem keyrir á stigi eftir tengil og notar upplýsingar frá fyrirfram útbúnu framkvæmdarsniði. Notkun BOLT gerir þér kleift að flýta fyrir keyrslu þýðanda um um 2% með því að breyta útliti librustc_driver.so bókasafnskóðans fyrir skilvirkari notkun á skyndiminni örgjörva.

    Innifalið að byggja rustc þýðanda með "-Ccodegen-units=1" valkostinum til að bæta gæði hagræðingar í LLVM. Prófanir sem framkvæmdar voru sýna aukningu á frammistöðu þegar um er að ræða „-Ccodegen-units=1“ byggingu um það bil 1.5%. Viðbættu fínstillingarnar eru sjálfgefnar aðeins virkar fyrir x86_64-unknown-linux-gnu pallinn.

    Hinar áðurnefndu hagræðingar voru prófaðar af Google til að draga úr byggingartíma Android vettvangsíhluta skrifaðar í Rust. Með því að nota "-C codegen-units=1" við smíði Android leyfðum við okkur að minnka stærð verkfærakistunnar um 5.5% og auka afköst þess um 1.8%, á meðan byggingartími verkfærakistunnar sjálfrar næstum tvöfaldaðist.

    Með því að virkja sorpsöfnun á tenglatíma („--gc-sections“) færði árangursaukningin allt að 1.9%, virkjaði hagræðingu á tengingartíma (LTO) allt að 7.7% og hagræðingu sem byggir á sniðum (PGO) allt að 19.8%. Í úrslitaleiknum var hagræðingu beitt með því að nota BOLT tólið, sem leyfði aukningu á byggingarhraða í 24.7%, en stærð verkfærakistunnar jókst um 10.9%.

    Gefa út forritunarmálið Rust 1.75 og unikernel Hermit 0.6.7

  • Nýr hluti af API hefur verið færður í flokkinn stöðugt, þar með talið aðferðir og útfærslur á eiginleikum hafa verið stöðugar:
    • Atóm*::frá_ptr
    • FileTimes
    • FileTimesExt
    • Skrá::set_modified
    • Skrá::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Valkostur::sem_sneið
    • Valkostur::as_mut_slice
    • bendill::byte_add
    • bendil::byte_offset
    • bendil::bæta_offset_from
    • bendil::byte_sub
    • bendill::wrapping_byte_add
    • bendill::umbúðir_bæta_offset
    • bendil::wrapping_byte_sub
  • "const" eigindin, sem ákvarðar möguleikann á að nota hann í hvaða samhengi sem er í stað fasta, er notaður í föllum:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::núlluð
    • mem::mismunandi
    • mem::núlluð
  • Þriðja stig stuðnings hefur verið innleitt fyrir csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd og mipsel-unknown-netbsd pallana. Þriðja stigið felur í sér grunnstuðning, en án sjálfvirkrar prófunar, útgáfu opinberra smíða eða athuga hvort hægt sé að smíða kóðann.

Að auki getum við tekið eftir nýrri útgáfu af Hermit verkefninu, sem þróar sérhæfðan kjarna (unikernel), skrifuð á Rust tungumálinu, sem býður upp á verkfæri til að byggja upp sjálfstætt forrit sem geta keyrt ofan á ofurvisor eða hreinan vélbúnað án viðbótarlaga og án stýrikerfis. Þegar það er byggt er forritið statískt tengt við bókasafn, sem útfærir sjálfstætt alla nauðsynlega virkni, án þess að vera bundið við stýrikerfiskjarna og kerfissöfn. Verkefniskóðanum er dreift undir Apache 2.0 og MIT leyfi. Samsetning er studd fyrir sjálfstæða framkvæmd forrita sem eru skrifuð í Rust, Go, Fortran, C og C++. Verkefnið er einnig að þróa sinn eigin ræsiforrit sem gerir þér kleift að ræsa Hermit með QEMU og KVM.

Heimild: opennet.ru

Bæta við athugasemd