Rust 1.66 Programazio Lengoaia kaleratzea

Rust 1.66 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:

  • Zenbaki osoen irudikapenetan ("#[repr(Int)]" atributua), diskriminatzailearen adierazle esplizitua onartzen da (zenbaketaren aldaera-zenbakia), nahiz eta enumerazioak eremuak dituen. #[repr(u8)] enum Foo { A(u8), # diskriminatzailea 0 B(i8), # diskriminatzailea 1 C(bool) = 42, # diskriminatzailea 42 }
  • Funtzio core::hint::black_box gehitu da, jasotako balioa besterik gabe itzultzen duena. Konpilatzaileak funtzio hau zerbait egiten ari dela uste duenez, black_box funtzioa erabil daiteke konpiladoreen optimizazioak begiztak desgaitzeko, kodearen errendimenduaren probak egiterakoan edo sortutako makina kodea aztertzerakoan (konpilatzaileak kodea erabili gabeko kontuan hartu eta kentzeko). Adibidez, beheko adibidean, black_box(v.as_ptr()) konpilatzaileari v bektorea erabiltzen ez dela pentsatzea eragozten dio. erabili std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); kutxa_beltza(v.as_ptr()); }}
  • "Cargo" pakete-kudeatzaileak "kendu" komandoa eskaintzen du, Cargo.toml manifestutik komando-lerrotik menpekotasunak kentzeko aukera ematen duena.
  • APIaren zati berri bat egonkorren kategoriara eraman da, eta ezaugarrien metodoak eta inplementazioak egonkortu dira:
    • proc_macro::Span::iturburu_testua
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{lehen, azken, pop_lehen, pop_azken}
    • BTreeMap::{first_key_value, last_key_value, first_sarrera, azken_sarrera, pop_first, pop_last}
    • Gehitu AsFd inplementazioak stdio blokeo motetarako WASI erabiltzean.
    • inplikatu TryFrom > Kutxarako<[T; N]>
    • core::hint::black_box
    • Iraupena::try_from_secs_{f32,f64}
    • Aukera::deskonprimitu
    • std::os::fd
  • "..X" eta "..=X" barrutiak onartzen dira txantiloietan.
  • Rustc konpilatzailearen aurrealdea eta LLVM backend-a eraikitzean, LTO (Link Time Optimization) eta BOLT (Binary Optimization and Layout Tool) optimizazio moduak erabiltzen dira ondoriozko kodearen errendimendua areagotzeko eta memoria-kontsumoa murrizteko.
  • Armv5te-none-eabi eta thumbv5te-none-eabi plataformetarako XNUMX. mailako euskarria ezarri da. Hirugarren mailak oinarrizko euskarria dakar, baina proba automatizatu gabe, eraikuntza ofizialak argitaratu eta kodea eraikitzeko gaitasuna egiaztatzea.
  • macOS Liburutegi Orokorrak lotzeko laguntza gehitu da.

Horrez gain, Rust lengoaiaren (gccrs) frontend-eko konpilatzailea GCC kode-basean sartzea nabarmendu daiteke. Frontend-a GCC 13 adarrean sartuta dago, 2023ko maiatzean kaleratuko dena. GCC 13-tik hasita, GCC tresna-kit estandarra Rust programak konpilatzeko erabili ahal izango da LLVM garapenak erabiliz eraikitako rustc konpilatzailea instalatu beharrik gabe. Rust inplementazioa GCC 13-n beta egoeran egongo da, lehenespenez gaituta ez.

Iturria: opennet.ru

Gehitu iruzkin berria