Rust 1.34 programmeertaal release

vond plaats systeem programmeertaal release Roest 1.34, ontwikkeld door het Mozilla-project. De taal richt zich op geheugenveiligheid, biedt automatisch geheugenbeheer en biedt een manier om een ​​hoge taakparallelliteit te bereiken zonder gebruik te maken van een garbage collector of runtime.

Het automatische geheugenbeheer van Rust bevrijdt de ontwikkelaar van pointermanipulatie en beschermt tegen problemen die voortkomen uit geheugenmanipulatie op laag niveau, zoals after-free geheugentoegang, null pointer-dereferenties, bufferoverruns en dergelijke. Er wordt een pakketbeheerder ontwikkeld om bibliotheken te distribueren, de assemblage te garanderen en de afhankelijkheden van het project te beheren. Cargo, zodat u met één klik de bibliotheken kunt verkrijgen die nodig zijn voor het programma. Er wordt een repository ondersteund om bibliotheken te hosten kratten.io.

De belangrijkste innovaties:

  • De Cargo-pakketbeheerder heeft tools toegevoegd om te werken met alternatieve pakketregisters die naast het openbare kratten.io-register kunnen bestaan. Ontwikkelaars van propriëtaire applicaties kunnen nu bijvoorbeeld hun eigen privéregister gebruiken, dat kan worden gebruikt bij het weergeven van afhankelijkheden in Cargo.toml, en een versiemodel toepassen dat vergelijkbaar is met kratten.io voor hun producten, en afhankelijkheden naar beide kratten verwijzen. io en naar uw eigen register.

    Om externe registers toe te voegen aan .cargo/config (bevindt zich in $HOME of in de pakketmap)
    mits sectie “[registers]”, en om een ​​extern register te gebruiken, is de optie “register” verschenen in de beschrijving van elke afhankelijkheid in Cargo.toml. Om verbinding te maken met een extra register, plaatst u eenvoudigweg het authenticatietoken in het bestand ~/.cargo/credentials en voert u de opdracht uit
    "cargo login --registry=my-registry" en om een ​​pakket te publiceren -
    "vracht publiceren -registry=mijn-register";

  • Volledige ondersteuning toegevoegd voor het gebruik van de operator “?”. bij testen doctesten, waardoor u voorbeeldcode uit de documentatie als tests kunt gebruiken. Voorheen exploitant
    "?" kan alleen worden gebruikt om fouten tijdens de testuitvoering af te handelen in de aanwezigheid van de functie “fn main()” of in de functies “#[test]”;

  • In aangepaste attributen gedefinieerd met behulp van procedurele macro's beveiligd de mogelijkheid om willekeurige sets tokens te gebruiken (“#[attr($tokens)]”, “#[attr[$tokens]] en #[attr{$tokens}]”). Voorheen konden elementen alleen worden gespecificeerd in een boom/recursieve vorm met behulp van letterlijke tekenreeksen, bijvoorbeeld “#[foo(bar, baz(quux, foo = “bar”))]”, maar nu is het mogelijk om opsommingen te gebruiken (' #[range(0. .10)]') en constructies zoals “#[bound(T: MyTrait)]”;
  • Gestabiliseerde typen (kenmerk) ProbeerVan и Probeer het, waardoor typeconversies met foutafhandeling mogelijk zijn. Methoden als from_be_bytes met integer-typen gebruiken bijvoorbeeld arrays als invoer, maar de gegevens zijn vaak van het Slice-type, en het handmatig converteren tussen arrays en slices is problematisch. Met behulp van nieuwe eigenschappen kan de opgegeven bewerking direct worden uitgevoerd door een aanroep van .try_into(), bijvoorbeeld: "let num = u32::from_be_bytes(slice.try_into()?)". Voor conversies die altijd slagen (bijvoorbeeld van type u8 naar u32) is een fouttype toegevoegd Onfeilbaar, waardoor transparant gebruik mogelijk is
    TryFrom voor alle bestaande implementaties van "From";

  • Functie is verouderd CommandExt::before_exec, waardoor een handler kon worden uitgevoerd voordat exec werd uitgevoerd, wat werd uitgevoerd in de context van een onderliggend proces dat werd gevorkt na de aanroep fork(). Onder dergelijke omstandigheden kunnen sommige bronnen van het bovenliggende proces, zoals bestandsdescriptors en toegewezen geheugengebieden, worden gedupliceerd, wat zou kunnen leiden tot ongedefinieerd gedrag en onjuiste werking van bibliotheken.
    Het wordt aanbevolen om een ​​onveilige functie te gebruiken in plaats van before_exec CommandExt::pre_exec.

  • Gestabiliseerde atomaire gehele typen met en zonder teken, variërend in grootte van 8 tot 64 bits (bijvoorbeeld AtomicU8), evenals ondertekende typen Niet-nulI[8|16|32|64|128].
  • Een nieuw deel van de API is verplaatst naar de stabiele categorie, inclusief Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] en SystemTime methoden zijn gestabiliseerd ::checked_[add|sub]. De functies iter::from_fn en iter::opvolgers zijn gestabiliseerd;
  • Voor alle typen gehele getallen zijn de methoden checking_pow, saturating_pow, packing_pow en overflowing_pow geïmplementeerd;
  • De mogelijkheid toegevoegd om optimalisaties in de koppelingsfase in te schakelen door de build-optie “-C linker-plugin-lto” op te geven.

Bron: opennet.ru

Voeg een reactie