Rust 1.40 programspråk release

publiceras version av systemprogrammeringsspråk Rost 1.40grundades av Mozilla-projektet. Språket fokuserar på säker minneshantering, ger automatisk minneshantering och ger möjlighet att uppnå hög jobbparallellism samtidigt som man undviker användningen av en sophämtare och runtime.

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 möjligheten att markera strukturer (struct) och uppräkningar (enum med Variant block) med hjälp av attributet "#[icke_tömmande]", som det gör i framtiden, lägg till nya fält och alternativ till deklarerade strukturer och uppräkningar. Till exempel kan utvecklare av moduler som har strukturer med offentligt deklarerade fält använda "#[non_exhaustive]" för att markera strukturer som kan ha nya fält tillagda i framtiden. Fram tills nu, i denna situation, var utvecklaren tvungen att välja mellan att deklarera fält privat och att binda till en oföränderlig lista med fält. Det nya attributet tar bort denna begränsning och gör att du kan lägga till nya fält i framtiden utan risk att bryta tidigare kompilerad extern kod. I lådapaket krävs en explicit definition av masken "_ => {...}" som täcker eventuella framtida fält, annars kommer ett fel att visas när nya fält läggs till.
  • Lagt till möjligheten att anropa det procedurmässiga makrot mac!() i en typkontext. Till exempel kan du nu skriva "typ Foo = expand_to_type!(bar);" om "expand_to_type" är ett procedurmakro.
  • I "extern { ... }" block Lagt till förmågan att använda procedur- och attributmakron, inklusive "bang!()"-makron, till exempel:

    makro_regler! make_item { ($name:ident) => { fn $name(); } }

    extern {
    make_item!(alfa);
    make_item!(beta);
    }

    extern "C" {
    #[min_identitetsmakro] fn foo();
    }

  • I makron genomförs förmåga att generera "macro_rules!"-element. Genererar "macro_rules!" möjligt både i funktionsliknande makron ("mac!()") och i makron i form av attribut ("#[mac]").
  • I mappningselementet $m:meta Lagt till stöd för godtyckliga tokenuppräkningsvärden ("[TOKEN_STREAM]", "{TOKEN_STREAM}" och "(TOKEN_STREAM)"), till exempel:

    makro_regler! accept_meta { ($m:meta) => {} }
    accept_meta!( min::sökväg );
    accept_meta!( my::path = "lit" );
    accept_meta!( min::sökväg ( abc ) );
    accept_meta!( min::sökväg [ abc ] );
    accept_meta!( min::sökväg { abc } );

  • I Rust 2015-läge är felutmatning aktiverad för problem som identifieras vid kontroll av lån av variabler (lånekontroll) med NLL-tekniken (Non-Lexical Lifetimes). Tidigare ersattes varningar med fel när de kördes i Rust 2018-läge.
    Efter att förändringen utökades till Rust 2015-läget kunde utvecklarna äntligen bli av med från den gamla lånecheckaren.

    Låt oss komma ihåg att verifieringssystemet baserat på en ny mekanism för att ta hänsyn till livslängden för lånade variabler gjorde det möjligt att identifiera några problem som gick obemärkt förbi av den gamla verifieringskoden. Eftersom felutdata för sådana kontroller kan påverka kompatibiliteten med tidigare fungerande kod, utfärdades varningar till en början istället för fel.

  • Attributet "const", som bestämmer möjligheten att använda det i alla sammanhang istället för konstanter, används för funktionen is_power_of_two (för heltal utan tecken).
  • En ny del av API:t har flyttats till den stabila kategorin, inklusive todo!()-makrot och slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metoder har stabiliserats.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32} f64}::from_be_bytes, {f32,f64}::from_le_bytes och {f32,f64}::from_ne_bytes.

  • I paketförvaltaren last
    genomförs cachning av kompilatorvarningar på disk. Lade till alternativet "lastmetadata" till kommandot "lastmetadata".--filterplattform" för att endast visa paket bundna till den angivna målplattformen i kolumnen för beroendeupplösning. Lade till http.ssl-versionskonfigurationsalternativ för att definiera giltiga TLS-versioner.
    Lade till möjligheten att publicera avsnittet "utvecklingsberoende" utan att ange "version"-nyckeln.

  • Rustc-kompilatorn ger stöd på tredje nivå för målplattformar thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 och mips64el-unknown-linux-muslabi64. 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