Rust 1.38 Programméiersprooch Fräisetzung

publizéiert System Programméierungssprooch Verëffentlechung roscht 1.38, gegrënnt vum Mozilla-Projet. 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. 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:

  • En pipelined Compilation Modus (pipelined) bäigefüügt, an deem de Bau vun engem ofhängege Crate Package ufänkt soubal d'Ofhängegkeet Metadaten verfügbar sinn, ouni op seng Kompilatioun ze waarden fir ze kompletéieren. Wann Dir e Package kompiléiert, brauche d'Ofhängegkeeten net komplett zesummegesat ze ginn, just d'Metadaten ze definéieren, déi Lëschte vun Typen, Ofhängegkeeten an exportéiert Elementer enthalen. Metadaten ginn fréi am Kompiléierungsprozess verfügbar gemaach, sou datt verlinkte Packagen elo vill méi fréi zesummegesat kënne ginn. Wann Dir eenzel Packagen baut, beaflosst de proposéierte Modus net d'Performance, awer wann de Bau deckt Packagen mat verzweifelten Ofhängegkeeten, kann d'Gesamtbauzäit ëm 10-20% reduzéiert ginn;
  • Assuréiert Detektioun vu falschen Notzung vu Funktiounen std::mem::net initialiséiert и std::mem::null. Zum Beispill, std :: mem :: uninitialiséiert ass praktesch fir séier Arrays ze kreéieren, awer et täuscht de Compiler well et schéngt initialiséiert ze sinn, awer a Wierklechkeet bleift de Wäert net initialiséiert. D'Mem :: uninitialiséiert Funktioun ass scho als ofgeschaaft markéiert an et ass recommandéiert amplaz en Zwëschentyp ze benotzen Vläicht Eenheet. Wéi fir mem :: zeroed, kann dës Funktioun Problemer mat Zorte Ursaach, datt null Wäerter akzeptéieren kann.

    Fir ze hëllefen ondefinéiert Verhalen z'identifizéieren, füügt déi nei Verëffentlechung e Lintcheck un de Compiler, deen e puer Probleemer mat mem :: uninitialiséiert oder mem :: null erkennt. Zum Beispill kritt Dir elo e Feeler wann Dir probéiert mem :: uninitialized oder mem :: zeroed mat Typen &T a Box‹T› ze benotzen, déi Zeigerobjekter duerstellen déi Nullwäerter net akzeptéieren kënnen;

  • D'Attribut "#[deprecated]" gouf erweidert fir datt Crate Packagen als obsolet markéiert kënne ginn a fir zukünfteg Läschen geplangt ginn. Vun Rust 1.38, kann dësen Attribut och fir macros benotzt ginn;
  • D'Fäegkeet bäigefüügt fir den "#[global_allocator]" Attribut an Ënnermodulen ze benotzen;
  • Zousätzlech Funktioun std::any::type_name, wat Iech erlaabt den Numm vum Typ erauszefannen, wat fir Debugging Zwecker nëtzlech ka sinn. Zum Beispill, während der Ausféierung vum Programm kënnt Dir erausfannen fir wéi eng Zort d'Funktioun genannt gouf:

    fn gen_value‹T: Default>() -› T {
    println!("Initialiséierung vun enger Instanz vun {}", std::any::type_name::‹T›());
    Default::default()
    }

    fn main() {
    loossen _: i32 = gen_value(); # "i32" gëtt gedréckt
    loossen _: String = gen_value(); # wäert "alloc::string::String" drécken
    }

  • Erweidert Funktiounen vun der Standardbibliothéik:
    • Slice :: {concat, connect, join} kann elo de Wäert &[T] nieft &T;
    • "*const T" an "*mut T" implementéieren elo Marker :: Unpin;
    • "Arc‹[T]›" an "Rc‹[T]›" implementéieren elo FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} implementéiert elo DoubleEndedIterator.
    • ascii :: EscapeDefault implementéiert Klonen a Display.
  • En neien Deel vun APIen gouf an déi stabil Kategorie transferéiert, dorënner Methoden déi stabiliséiert goufen
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Dauer::as_secs_f{32|64},
    • Dauer::div_duration_f{32|64},
    • Dauer::div_f{32|64},
    • Dauer::vun_secs_f{32|64},
    • Dauer::mul_f{32|64},
    • Divisioun Operatiounen mat Rescht
      div_euclid an rem_euclid fir all integer Primitiv;

  • Ënnerstëtzung bäigefüügt fir d'Optioun "--Features" e puer Mol ze spezifizéieren fir verschidde Funktiounen am Cargo Package Manager z'aktivéieren;
  • De Compiler bitt en Drëttel Grad Ënnerstëtzung fir Zilplattformen aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc Ziler, armv7-onbekannt-linux -gnueabi, armv7-onbekannt-linux-musleabi, hexagon-onbekannt-linux-musl an riscv32i-onbekannt-none-elf. Den drëtten Niveau beinhalt Basis Ënnerstëtzung, awer ouni automatiséiert Testen a Verëffentlechung vun offiziellen Builds.

Source: opennet.ru

Setzt e Commentaire