Rust 1.34 Programazio Lengoaia kaleratzea

Sistemaren programazio-lengoaia Rust 1.34, Mozilla proiektuak garatutakoa, kaleratu da. 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 mendekotasunak kudeatzeko, Cargo paketeen kudeatzailea garatzen ari da proiektua, eta programarako beharrezkoak diren liburutegiak klik bakarrean eskura ditzakezu. crates.io biltegia liburutegiak ostatatzeko onartzen da.

Berrikuntza nagusiak:

  • 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.

    Kanpoko erregistro bat gehitzeko ~/.cargo/config
    "nire erregistroa" aukera berri bat eskaintzen da "[erregistroak]" atalean, eta "beste kaxa" aukera bat gehitu da Cargo.toml-en menpekotasunetan kanpoko erregistroa aipatzeko "[dependentziak]" atalean. 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. doctests-etan, dokumentazioko adibideko kodea proba gisa erabiltzeko aukera ematen dutenak. Aurretik operadorea
    "?" probaren exekuzioan akatsak kudeatzeko erabil liteke "fn main()" funtzioaren presentzian edo "#[test]" funtzioetan;

  • Prozedura-makroak erabiliz definitutako atributu pertsonalizatuetan, posible da token multzo arbitrarioak erabiltzea (β€œ#[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;
  • TryFrom eta TryInto ezaugarriak egonkortu egin dira, 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 hutsezina mota bat gehitu da, erabilera gardena ahalbidetzeko.
    TryFrom lehendik dauden "From"-en inplementazio guztietarako;

  • CommandExt::before_exec funtzioa zaharkituta geratu da, fork() deiaren ondoren bifurkatuta dagoen prozesu ume baten testuinguruan exekutatu aurretik kudeatzaile bat exekutatu ahal izateko. 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, CommandExt::pre_exec funtzio segurua erabiltzea gomendatzen da.

  • 8 eta 64 biteko tamainako zenbaki oso atomiko egonkortu eta sinadu gabeko motak (adibidez, AtomicU8), baita zeinudun motak NonZeroI[8|16|32|54|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 (rustc-k Rust kodea LLVM bitkodean konpilatzen du, eta LTO optimizazioak aplika daitezke).

Iturria: opennet.ru

Gehitu iruzkin berria