Rust 1.34 Programazio Lengoaia kaleratzea

ospatu sistemaren programazio lengoaia kaleratzea Herdoila 1.34, Mozilla proiektuak garatua. Lengoaiak memoriaren segurtasunean oinarritzen da, memoria automatikoki kudeatzen du eta zereginen paralelismo handia lortzeko bitartekoa eskaintzen du zabor-biltzaile edo exekuzio-denbora erabili gabe.

Rust-en memoria-kudeaketa automatikoak garatzailea erakusleen manipulaziotik askatzen du eta maila baxuko memoriaren manipulaziotik sortzen diren arazoetatik babesten du, hala nola, memoria librearen ondorengo sarbideetatik, erakusle nuluen deserreferentziak, buffer gainezkatzeetatik eta antzekoetatik. Liburutegiak banatzeko, muntaia ziurtatzeko eta proiektuaren mendekotasunak kudeatzeko pakete-kudeatzaile bat garatzen ari da. Zama, programarako beharrezkoak diren liburutegiak klik bakarrean eskuratu ahal izateko. Biltegi bat onartzen da liburutegiak ostatatzeko kaxak.io.

Nagusia berrikuntzak:

  • Cargo paketeen kudeatzaileak tresnak gehitu ditu crates.io erregistro publikoarekin batera egon daitezkeen paketeen erregistro alternatiboekin lan egiteko. Adibidez, jabedun aplikazioen garatzaileek beren erregistro pribatua erabil dezakete orain, Cargo.toml-en mendekotasunak zerrendatzean erabil daitekeen, eta crates.io-ren antzeko bertsio-eredu bat aplika dezakete beren produktuetarako, baita bi kaxetara menpekotasunak aipatzeko ere. io eta zure erregistrora.

    .cargo/config-era kanpoko erregistroak gehitzeko ($HOME-n edo paketeen direktorioa)
    emandako β€œ[erregistroak]” atalean, eta kanpoko erregistro bat erabiltzeko, Cargo.toml-eko dependentzia bakoitzaren deskribapenean β€œerregistroa” aukera agertu da. Erregistro gehigarri batera konektatzeko, jarri autentifikazio-tokena ~/.cargo/credentials fitxategian eta exekutatu komandoa.
    "karga-saioa --registry=nire-erregistroa" eta pakete bat argitaratzeko -
    "karga argitaratu -registry=nire-erregistroa";

  • β€œ?” operadorea erabiltzeko laguntza osoa gehitu da. probetan doktestak, dokumentazioko adibideko kodea proba gisa erabiltzeko aukera emanez. Aurretik operadorea
    "?" probaren exekuzioan akatsak kudeatzeko erabil liteke "fn main()" funtzioaren presentzian edo "#[test]" funtzioetan;

  • Prozedura-makroak erabiliz definitutako atributu pertsonalizatuetan emandako token multzo arbitrarioak erabiltzeko gaitasuna ("#[attr($tokens)]", "#[attr[$tokens]] eta #[attr{$tokens}]"). Lehen, elementuak zuhaitz/forma errekurtsiboan soilik zehazten ziren kate literalak erabiliz, adibidez, β€œ#[foo(bar, baz(quux, foo = β€œbar”)]”, baina orain enumerazioak erabiltzea posible da (' #[barrutia(0. .10)]') eta β€œ#[lotuta(T: Nire Ezaugarria)]” bezalako eraikuntzak;
  • Mota egonkortuak (ezaugarria) TryFrom ΠΈ TryInto, akatsen kudeaketarekin mota bihurketak ahalbidetuz. Esate baterako, zenbaki osoekin from_be_bytes bezalako metodoek matrizeak erabiltzen dituzte sarrera gisa, baina datuak Slice motakoak izaten dira askotan, eta array eta xerra artean bihurtzea arazoa da eskuz egiteko. Ezaugarri berrien laguntzaz, zehaztutako eragiketa hegan egin daiteke .try_into() dei baten bidez, adibidez, β€œlet num = u32::from_be_bytes(slice.try_into()?)”. Beti arrakastatsuak diren bihurketetarako (adibidez, u8 motatik u32ra), errore mota bat gehitu da erasoezinak, erabilera gardena ahalbidetuz
    TryFrom lehendik dauden "From"-en inplementazio guztietarako;

  • Funtzioa zaharkituta dago CommandExt::before_exec, exec exekutatu aurretik kudeatzaile bat exekutatzea ahalbidetzen duena, fork() deiaren ondoren bifurkatuta dagoen prozesu ume baten testuinguruan exekutatu zena. Baldintza horietan, prozesu nagusiaren baliabide batzuk, hala nola, fitxategien deskribatzaileak eta mapatutako memoria-eremuak, bikoiztu egin daitezke, eta horrek definiziorik gabeko portaera eta liburutegien funtzionamendu okerra ekar ditzake.
    Before_exec-en ordez, funtzio ez seguru bat erabiltzea gomendatzen da CommandExt::pre_exec.

  • 8 eta 64 bit arteko tamainako zenbaki oso atomiko sinatuak eta sinatu gabeko egonkortuak (adibidez, AtomicU8), baita sinatutako motak ere EzZeroI[8|16|32|64|128].
  • APIaren zati berri bat kategoria egonkorrera eraman da, besteak beste: Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] eta SystemTime metodoak egonkortu dira ::checked_[add|sub]. Iter::from_fn eta iter::successors funtzioak egonkortu dira;
  • Zenbaki oso guztientzat, checked_pow, saturating_pow, wrapping_pow eta overflowing_pow metodoak ezartzen dira;
  • Lotura fasean optimizazioak gaitzeko gaitasuna gehitu da "-C linker-plugin-lto" eraikitzeko aukera zehaztuz.

Iturria: opennet.ru

Gehitu iruzkin berria