Rust 1.53 kaleratu da. Google-k Rust laguntza gehitzea finantzatuko du Linux nukleoan

Mozilla proiektuak sortutako Rust 1.53 sistemaren programazio-lengoaia argitaratu da, baina orain irabazi asmorik gabeko Rust Foundation erakunde independentearen babespean garatua. Lengoaiak memoriaren segurtasunean oinarritzen da, memoria automatikoki kudeatzea eskaintzen du eta zereginen paralelismo handia lortzeko bitartekoak eskaintzen ditu zabor-biltzaile edo exekuzio-denbora erabili gabe (exekuzio-denbora liburutegi estandarraren hasierako oinarrizko hasierara eta mantentzera murrizten da).

Rust-en memoria-kudeaketa automatikoak akatsak ezabatzen ditu erakusleak manipulatzean eta maila baxuko memoriaren manipulaziotik sortzen diren arazoetatik babesten du, hala nola, memoria-eskualde batera atzitzea askatu ondoren, erakusle nuluen deserreferentziak, buffer gainditzeak, etab. Liburutegiak banatzeko, muntaia ziurtatzeko eta mendekotasunak kudeatzeko, Cargo paketeen kudeatzailea garatzen ari da proiektua. crates.io biltegia liburutegiak ostatatzeko onartzen da.

Berrikuntza nagusiak:

  • Arrayetarako, IntoIterator ezaugarria inplementatu da, array-elementuen iterazioa balioen arabera antolatzeko aukera ematen duena: i for [1, 2, 3] { .. }

    Iteratzaileak onartzen dituzten metodoetara matrizeak ere pasa daitezke, adibidez: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Aurretik, IntoIterator array erreferentzietarako bakarrik inplementatzen zen, hau da. balioen gainean errepikatzeko erreferentziak erabiltzea beharrezkoa zen ("&[1, 2, 3]") edo "[1, 2, 3].iter()". IntoIterator matrizeetarako inplementazioa array.into_iter()-tik (&array).into_iter()-tik (&array)-tik (&array).into_iter() konpiladore lehenago konpiladore bihurtzeak eragindako bateragarritasun-arazoek oztopatu zuten. Arazo hauek konponbide batekin konpondu ziren - konpilatzaileak array.into_iter() bihurtzen jarraituko du (&array).into_iter() IntoIterator ezaugarriaren inplementaziorik ez balego bezala, baina metodoari ".into_iter() erabiliz deitzean soilik. )" sintaxia eta deiak ukitu gabe "[1, 2, 3]-n", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3]) )".

  • "|" esapideak zehaztea posible da (EDO eragiketa logikoa) txantiloiaren edozein zatitan, adibidez, β€œBatzuk(1) | Batzuk(2)" orain "Batzuk(1 | 2)" idatz dezakezu: bat datorren emaitza { Ok (Batzuk(1 | 2)) => { .. } Err (NireErrorea { mota: Fitxategia EzAurkitu | BaimenUkatua, .. }) => { .. } _ => { .. } }
  • Identifikatzaileetan ASCII ez diren karaktereak erabiltzea onartzen da, Unicode UAX 31 zehaztapenean definitutako karaktere nazionalak barne, baina emoji karaktereak kenduta. Karaktere desberdinak baina antzekoak erabiltzen badituzu, konpilatzaileak abisua emango du. const BLΓ…HAJ: &str = "🦈"; struct δΊΊ { 名字: String, } Let Ξ± = 1; utzi sos = 2; abisua: identifikatzaile bikotea 's' eta 's' artean nahasgarritzat jotzen da
  • APIen zati berri bat egonkor kategoriara transferitu da, egonkortuta dauden hauek barne:
    • array::from_ref
    • array::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Iraupena::ZERO
    • Iraupena::MAX
    • Iraupena::zero da
    • Iraupena::saturating_add
    • Iraupena::saturating_sub
    • Iraupena::saturating_mul
    • f32::subnormala da
    • f64::subnormala da
    • IntoIterator arrayetarako
    • {osokoa}::BITS
    • io::Errorea::Ez onartzen da
    • NonZero*::zero_buruak
    • NonZero*::zero_atzetik
    • Aukera::txertatu
    • Ordenatzea::is_eq
    • Eskaera::is_ne
    • Eskaera::is_lt
    • Eskaera::is_gt
    • Eskaera::is_le
    • Eskaera::is_ge
    • OsStr::make_ascii_minuskulak
    • OsStr::make_ascii_majuskula
    • OsStr::to_ascii_minuskulaz
    • OsStr::to_ascii_maiuskulak
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • xerra::IterMut::as_slice
    • AsRef<[T]> xerrarako::IterMut
    • impl SliceIndex for (Lotuta , Lotua )
    • Vec::hedatu_barrutik
  • Wasm64-unknown-unknown plataformarako hirugarren laguntza-maila ezarri da. Hirugarren mailak oinarrizko euskarria dakar, baina proba automatizatu gabe, eraikuntza ofizialak argitaratu edo kodea eraiki daitekeen egiaztatu gabe.
  • Cargo paketeen kudeatzailea lehenespenez Git biltegiaren (HEAD) adar nagusirako "main" izena erabiltzera eraman da. Main izena maisuaren ordez erabiltzen duten biltegietan ostatatutako mendekotasunek jada ez dute adarra = "nagusia" konfiguratu behar.
  • Konpilatzailean, LLVM-ren gutxieneko bertsioaren baldintzak LLVM 10era igotzen dira.

Gainera, Rust hizkuntzan osagaiak garatzeko Linux nukleoan integrazioa garatzeko finantzaketa hornitzen dela nabarmendu daiteke. Lana Prossimo proiektuaren esparruan egingo da ISRG erakundearen (Internet Security Research Group), Let's Encrypt proiektuaren sortzailea den eta HTTPS eta teknologien garapena sustatzen dituen ISRG erakundearen babespean. Internet. Funtsak Googlek emango ditu, eta Miguel Ojeda Rust-for-Linux proiektuaren egilearen lana ordainduko du. Aurretik, ISRG eta Google-k dagoeneko finantzatu dute HTTP backend alternatibo baten sorrera curl utilityarentzat eta Apache http zerbitzarirako TLS modulu berri baten garapena.

Microsoft-en eta Google-ren arabera, ahultasunen % 70 inguru memoria ez-seguruaren tratamenduak eragiten ditu. Uste denez, Rust lengoaia nukleoaren osagaiak garatzeko (adibidez, gailu-kontrolatzaileak) garatzeko, memoria seguruaren kudeaketak eragindako ahuleziak izateko arriskua murriztea eta memoria-eskualde batera atzitzea eta buffer-en mugak gainditzea bezalako akatsak ezabatzea espero da.

Memoria segurua den manipulazioa Rust-en eskaintzen da konpilazio garaian erreferentziak egiaztatzen, objektuen jabetzaren eta objektuaren bizitzaren (esparrua) jarraipena eginez, baita kodearen exekuzioan memoriarako sarbidearen zuzentasunaren ebaluazioaren bidez ere. 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.

Iturria: opennet.ru

Gehitu iruzkin berria