Rust 1.34 Programméiersprooch Fräisetzung

stattfonnt huet System Programméierungssprooch Verëffentlechung roscht 1.34, entwéckelt vum Mozilla Projet. D'Sprooch konzentréiert sech op Erënnerung Sécherheet, stellt automatesch Erënnerung Gestioun, a gëtt e Mëttel fir eng héich Aufgab parallelism ze erreechen ouni e Gerempels Sammelstécker oder Runtime benotzen.

Rust automatesch Erënnerung Gestioun befreit den Entwéckler vun Pointer Manipulatioun a schützt géint Problemer déi aus niddereg-Niveau Erënnerung Manipulatioun entstinn, wéi no-gratis Erënnerung Accès, Null Pointer dereferences, Puffer Iwwerstonnen, an dergläiche. E Package Manager gëtt entwéckelt fir Bibliothéiken ze verdeelen, Assemblée ze garantéieren an Ofhängegkeete vum Projet ze managen. cargo, erlaabt Iech d'Bibliothéike fir de Programm an engem Klick ze kréien. E Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten crates.io.

Haaptstrooss Innovatiounen:

  • De Cargo Package Manager huet Tools bäigefüügt fir mat alternativen Package Registries ze schaffen, déi mat der ëffentlecher Registry crates.io coexistéiere kënnen. Zum Beispill kënnen d'Entwéckler vu propriétaire Applikatiounen elo hiren eegene private Registry benotzen, dee benotzt ka ginn wann Dir Ofhängegkeeten op Cargo.toml liest, an e Versiounsmodell ähnlech wéi crates.io fir hir Produkter benotzen, wéi och Ofhängegkeeten op béide Këschte referenzéieren. io an an Ärem eegene Registry.

    Fir extern Registratiounen op .cargo/config ze addéieren (an $HOME oder am Package Verzeichnis)
    virgesinn Sektioun "[Registries]", a fir en externen Registry ze benotzen, ass d'Optioun "Registry" an der Beschreiwung vun all Ofhängegkeet op Cargo.toml erschien. Fir mat engem zousätzleche Registry ze verbannen, plazéiert einfach d'Authentifikatiounstoken an der ~/.cargo/credentials Datei a lafen de Kommando aus.
    "cargo Login --Registry=my-Registry" a fir e Package ze verëffentlechen -
    "cargo publizéieren -registry=my-registry";

  • Voll Ënnerstëtzung bäigefüügt fir den "?" Bedreiwer ze benotzen. an Tester doctests, erlaabt Iech Beispillcode aus der Dokumentatioun als Tester ze benotzen. Fréier Bedreiwer
    "?" kéint benotzt ginn fir Feeler während Test Ausféierung nëmmen an der Presenz vun der "fn Haaptsäit ()" Funktioun oder an der "# [Test]" Funktiounen ze verschaffen;

  • A personaliséiert Attributer definéiert mat prozedurale Makroen virgesinn d'Fäegkeet fir arbiträr Sätz vun Tokens ze benotzen ("#[attr($Tokens)]", "#[attr[$Tokens]] an #[attr{$Tokens}]"). Virdrun konnten Elementer nëmmen an engem Bam/rekursiv Form mat Stringliteralen spezifizéiert ginn, zum Beispill "#[foo(bar, baz(quux, foo = "bar"))]", awer elo ass et méiglech Opzielungen ze benotzen (' #[range(0. .10)]') a Konstruktioune wéi "#[gebonnen(T: MyTrait)]";
  • Stabiliséiert Typen (Trait) Probéiert Vun и TryInto, erlaabt Typ Konversioune mat Fehlerhandhabung. Zum Beispill, Methode wéi from_be_bytes mat ganz Zuelen Typen benotzen Arrays als Input, awer d'Donnéeë kommen dacks an engem Slice Typ, an d'Konvertéierung tëscht Arrays a Slices ass problematesch fir manuell ze maachen. Mat der Hëllef vun neie Spure kann der spezifizéierter Operatioun op der fléien duerch en Opruff zu .try_into gesuergt ginn (), Zum Beispill, "loosse num = u32 :: from_be_bytes (slice.try_into ()?)". Fir Konversiounen déi ëmmer erfollegräich sinn (zum Beispill vum Typ u8 op u32), ass e Feelertyp dobäigesat ginn Infallible, erlaabt transparent Notzung
    TryFrom fir all existent Implementatioune vu "Vun";

  • Funktioun ass ofgeschaaft ginn CommandExt::before_exec, wat erlaabt engem Handler virum Lafen exec ausgefouert ginn, déi am Kontext vun engem Kand Prozess forked no der Gabel () Opruff ausgefouert gouf. Ënner esou Konditiounen kënnen e puer Ressourcen vum Elterendeel, wéi Dateideskriptoren a mapéierte Gedächtnisberäicher, duplizéiert ginn, wat zu ondefinéiert Verhalen a falsch Operatioun vu Bibliothéiken féieren kann.
    Et ass recommandéiert eng onsécher Funktioun ze benotzen amplaz virun_exec CommandExt::pre_exec.

  • Stabiliséiert ënnerschriwwen an net ënnerschriwwenen atomarer ganzer Typen, déi an der Gréisst vun 8 bis 64 Bits reechen (zum Beispill, AtomicU8), souwéi ënnerschriwwen Typen NonZeroI[8|16|32|64|128].
  • En neien Deel vun der API gouf an déi stabil Kategorie geplënnert, dorënner den Any :: type_id, Feeler :: type_id, Slice :: sort_by_cached_key, str :: escape_*, str::split_ascii_whitespace, Instant :: checked_[add|sub] ] a SystemTime Methode goufen stabiliséiert ::checked_[add|sub]. D'iter :: from_fn an iter :: Nofolger Funktiounen goufen stabiliséiert;
  • Fir all Integer Typen sinn d'checked_pow, saturating_pow, wrapping_pow an overflowing_pow Methoden ëmgesat;
  • D'Fäegkeet bäigefüügt fir Optimisatiounen op der Linkstadium z'erméiglechen andeems Dir d'"-C linker-plugin-lto" Bauoptioun spezifizéiert.

Source: opennet.ru

Setzt e Commentaire