Publikimi i gjuhës programuese Rust 1.34

Ndodhi lëshimi i gjuhës programuese të sistemit Ndryshku 1.34, zhvilluar nga projekti Mozilla. Gjuha fokusohet në sigurinë e kujtesës, siguron menaxhimin automatik të kujtesës dhe ofron një mjet për të arritur paralelizëm të lartë të detyrave pa përdorur një grumbullues mbeturinash ose kohëzgjatjeje.

Menaxhimi automatik i kujtesës i Rust e çliron zhvilluesin nga manipulimi i treguesit dhe mbron nga problemet që lindin nga manipulimi i nivelit të ulët të kujtesës, të tilla si akseset e memories pa pagesë, çreferencat e treguesit null, tejkalimet e buferit dhe të ngjashme. Një menaxher paketash po zhvillohet për të shpërndarë bibliotekat, për të siguruar montimin dhe për të menaxhuar varësitë nga projekti. ngarkesë, duke ju lejuar të merrni bibliotekat e nevojshme për programin me një klik. Një depo mbështetet për të pritur bibliotekat arka.io.

Kryesore risitë:

  • Menaxheri i paketave Cargo ka shtuar mjete për të punuar me regjistrat alternativë të paketave që mund të bashkëjetojnë me regjistrin publik crates.io. Për shembull, zhvilluesit e aplikacioneve të pronarit mund të përdorin tani regjistrin e tyre privat, i cili mund të përdoret kur listojnë varësitë në Cargo.toml dhe të aplikojnë një model versionimi të ngjashëm me crates.io për produktet e tyre, si dhe t'i referojnë varësitë në të dy arkat. io dhe në regjistrin tuaj.

    Për të shtuar regjistra të jashtëm në .cargo/config (të vendosura në $HOME ose në drejtorinë e paketës)
    me kusht seksioni "[regjistrat]", dhe për të përdorur një regjistër të jashtëm, opsioni "regjistri" është shfaqur në përshkrimin e çdo varësie në Cargo.toml. Për t'u lidhur me një regjistër shtesë, thjesht vendosni tokenin e vërtetimit në skedarin ~/.cargo/credentials dhe ekzekutoni komandën
    "cargo login --registry=my-registry" dhe për të publikuar një paketë -
    "cargo public -registry=my-registry";

  • U shtua mbështetje e plotë për përdorimin e operatorit “?”. në teste doktestet, duke ju lejuar të përdorni kodin shembull nga dokumentacioni si teste. Operator më parë
    "?" mund të përdoret për të trajtuar gabimet gjatë ekzekutimit të testit vetëm në prani të funksionit "fn main()" ose në funksionet "#[test]";

  • Në atributet e personalizuara të përcaktuara duke përdorur makro procedurale siguruar aftësia për të përdorur grupe arbitrare të argumenteve (“#[attr($tokens)]”, “#[attr[$tokens]] dhe #[attr{$tokens}]”). Më parë, elementët mund të specifikoheshin vetëm në një formë peme/rekurzive duke përdorur vargje literale, për shembull "#[foo(bar, baz(quux, foo = "bar"))]", por tani është e mundur të përdoren numërimet (' #[range(0. .10)]') dhe konstruksione si “#[bound(T: MyTrait)]”;
  • Llojet e stabilizuara (tipar) Provoni Nga и Provoni Into, duke lejuar konvertimet e tipit me trajtimin e gabimeve. Për shembull, metodat si from_be_bytes me lloje të numrave të plotë përdorin vargje si hyrje, por të dhënat shpesh vijnë në një lloj Slice dhe konvertimi midis vargjeve dhe fetave është problematik për t'u bërë manualisht. Me ndihmën e tipareve të reja, operacioni i specifikuar mund të kryhet menjëherë përmes një thirrjeje në .try_into(), për shembull, "le num = u32::from_be_bytes(slice.try_into()?)". Për konvertimet që gjithmonë kanë sukses (për shembull, nga lloji u8 në u32), është shtuar një lloj gabimi i pagabueshëm, duke lejuar përdorim transparent
    TryFrom për të gjitha implementimet ekzistuese të "Nga";

  • Funksioni është zhvlerësuar CommandExt::para_exec, i cili lejoi që një mbajtës të ekzekutohej përpara se të ekzekutohej exec, i cili u ekzekutua në kontekstin e një procesi fëmijësh të pirun pas thirrjes së fork(). Në kushte të tilla, disa burime të procesit prind, si përshkruesit e skedarëve dhe zonat e memories së hartuar, mund të dublikohen, gjë që mund të çojë në sjellje të papërcaktuara dhe funksionim të gabuar të bibliotekave.
    Rekomandohet të përdorni një funksion të pasigurt në vend të Before_exec CommandExt::pre_exec.

  • Llojet e numrave të plotë atomikë të stabilizuar dhe të panënshkruar që variojnë në madhësi nga 8 në 64 bit (për shembull, AtomicU8), si dhe llojet e nënshkruara JoZeroI[8|16|32|64|128].
  • Një pjesë e re e API-së është zhvendosur në kategorinë e qëndrueshme, duke përfshirë Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] dhe metodat SystemTime janë stabilizuar ::checked_[add|sub]. Funksionet iter::from_fn dhe iter::successors janë stabilizuar;
  • Për të gjitha llojet e numrave të plotë, janë zbatuar metodat checked_pow, saturating_pow, wrapping_pow dhe overflowing_pow;
  • U shtua aftësia për të aktivizuar optimizimet në fazën e lidhjes duke specifikuar opsionin e ndërtimit "-C linker-plugin-lto".

Burimi: opennet.ru

Shto një koment