Rust 1.38 programspråk release

publiceras version av systemprogrammeringsspråk Rost 1.38, grundat av Mozilla-projektet. Språket fokuserar på minnessäkerhet, tillhandahåller automatisk minneshantering och tillhandahåller ett sätt att uppnå hög arbetsparallellism utan att använda en sophämtare eller körtid.

Rusts automatiska minneshantering frigör utvecklaren från pekarmanipulation och skyddar mot problem som uppstår från minnesmanipulation på låg nivå, såsom efterfri minnesåtkomst, nollpekaredereferenser, buffertöverskridningar och liknande. En pakethanterare utvecklas för att distribuera bibliotek, säkerställa montering och hantera beroenden av projektet. Laddning, vilket gör att du kan få de bibliotek du behöver för programmet med ett klick. Ett arkiv stöds för värdbibliotek lådor.io.

Den huvudsakliga innovationer:

  • Lade till ett pipelined kompileringsläge (pipelined), där byggandet av ett beroende lådapaket börjar så snart beroendemetadata blir tillgänglig, utan att vänta på att kompileringen ska slutföras. När man kompilerar ett paket behöver inte beroenden vara helt sammansatta, utan bara definiera metadata, som inkluderar listor över typer, beroenden och exporterade element. Metadata görs tillgänglig tidigt i kompileringsprocessen, så länkade paket kan nu kompileras mycket tidigare. När man bygger enstaka paket påverkar det föreslagna läget inte prestanda, men om bygget täcker paket med förgrenade beroenden kan den totala byggtiden minskas med 10-20 %;
  • Säkerställer upptäckt av felaktig användning av funktioner std::mem::oinitierad и std::mem::nollställd. Till exempel, std::mem::uninitialized är praktiskt för att snabbt skapa arrayer, men det vilseleder kompilatorn eftersom det verkar vara initialiserat, men i verkligheten förblir värdet oinitierat. Funktionen mem::uninitialized är redan markerad som föråldrad och det rekommenderas att använda en mellantyp istället Kanske Unit. När det gäller mem::zeroed kan denna funktion orsaka problem med typer som inte kan acceptera nollvärden.

    För att hjälpa till att identifiera odefinierat beteende lägger den nya utgåvan till en luddkontroll i kompilatorn som upptäcker några problem med mem::uninitialized eller mem::zeroed. Till exempel får du nu ett felmeddelande när du försöker använda mem::uninitialized eller mem::zeroed med typerna &T och Box‹T›, som representerar pekarobjekt som inte kan acceptera nollvärden;

  • Attributet "#[utfasad]" har utökats för att tillåta lådpaket att markeras som föråldrade och schemaläggas för framtida radering. Från och med Rust 1.38 kan detta attribut även användas för makron;
  • Lade till möjligheten att använda "#[global_allocator]"-attributet i undermoduler;
  • Funktion tillagd std::any::typnamn, som låter dig ta reda på namnet på typen, vilket kan vara användbart för felsökningsändamål. Till exempel, under programkörning kan du ta reda på vilken typ av funktionen kallades:

    fn gen_värde‹T: Standard>() -› T {
    println!("Initierar en instans av {}", std::any::typnamn::‹T›());
    Default::default()
    }

    fn main() {
    låt _: i32 = gen_värde(); # "i32" kommer att skrivas ut
    låt _: String = gen_värde(); # kommer att skriva ut "alloc::string::String"
    }

  • Utökade funktioner i standardbiblioteket:
    • slice::{concat, connect, join} kan nu ta värdet &[T] utöver &T;
    • "*const T" och "*mut T" implementerar nu markör::Unpin;
    • "Arc‹[T]›" och "Rc‹[T]›" implementerar nu FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} implementerar nu DoubleEndedIterator.
    • ascii::EscapeDefault implementerar Clone och Display.
  • En ny del av API:er har överförts till den stabila kategorin, inklusive metoder som har stabiliserats
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Duration::as_secs_f{32|64},
    • Duration::div_duration_f{32|64},
    • Duration::div_f{32|64},
    • Duration::from_secs_f{32|64},
    • Duration::mul_f{32|64},
    • divisionsverksamhet med resterande del
      div_euclid och rem_euclid för alla heltalsprimitiver;

  • Lade till stöd för att specificera alternativet "--funktioner" flera gånger för att aktivera olika funktioner i lastpakethanteraren;
  • Kompilatorn tillhandahåller en tredje nivå stöd för målplattformar aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc-mål, armv7-unknown-linux -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl och riscv32i-unknown-none-elf. Den tredje nivån innebär grundläggande support, men utan automatiserad testning och publicering av officiella builds.

Källa: opennet.ru

Lägg en kommentar