Rust 1.34 Programméiersprooch Fräisetzung

D'Systemprogramméierungssprooch Rust 1.34, entwéckelt vum Mozilla-Projet, gouf verëffentlecht. D'Sprooch konzentréiert sech op Erënnerung Sécherheet, stellt automatesch Erënnerung Gestioun, a stellt e Mëttel fir eng héich Aufgab parallelism 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. Fir Bibliothéiken ze verdeelen, Assemblée ze garantéieren an Ofhängegkeeten ze managen, entwéckelt de Projet de Cargo Package Manager, deen Iech erlaabt d'Bibliothéiken ze kréien, déi fir de Programm néideg sinn an engem Klick. De crates.io Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten.

Haaptinnovatiounen:

  • 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 en externen Registry op ~/.cargo/config
    eng nei Optioun "my-Registry" gëtt an der Rubrik "[Registries]" zur Verfügung gestallt, an eng "aner-Crate" Optioun gouf bäigefüügt fir den externen Registry an Ofhängegkeeten an Cargo.toml an der Rubrik "[Dependenzen]" ze ernimmen. 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 doctests, déi erlaben Iech Beispill Code 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éierten Attributer definéiert mat prozedurale Makroen, ass et méiglech 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)]";
  • D'TryFrom an TryInto Charaktere goufen stabiliséiert, wat Typ Konversioune mat Fehlerhandhabung erlaabt. 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), gouf en Infallible Fehlertyp bäigefüügt fir transparent Notzung vun
    TryFrom fir all existent Implementatioune vu "Vun";

  • Deprecéiert d'Funktioun CommandExt :: virun_exec, déi d'Ausféierung vun engem Handler virum Exec erlaabt huet, deen am Kontext vun engem Kandprozess ausgeführt gouf, deen nom Fork () Uruff forked ass. Ë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.
    Amplaz virun_exec ass et recommandéiert déi onsécher Funktioun CommandExt :: pre_exec ze benotzen.

  • Stabiliséiert ënnerschriwwen an net ënnerschriwwen atomarer ganz Zuelentypen, déi an der Gréisst vun 8 bis 64 Bits reechen (zum Beispill AtomicU8), souwéi ënnerschriwwen Typen NonZeroI[8|16|32|54|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ähigkeit bäigefüügt fir Optimisatiounen op der Verknüpfungsstadium z'erméiglechen andeems Dir d'"-C linker-plugin-lto" Bauoptioun spezifizéiert (rustc kompiléiert Rustcode an LLVM Bitcode, wat et erlaabt LTO Optimisatiounen applizéiert ze ginn).

Source: opennet.ru

Setzt e Commentaire