Rust 1.40 programmeringssprog udgivelse

offentliggjort frigivelse af systemprogrammeringssprog Rust 1.40, grundlagt af Mozilla-projektet. Sproget fokuserer på hukommelsessikkerhed, giver automatisk hukommelsesstyring og giver værktøjer til at opnå høj opgaveparallelisme uden at bruge en skraldeopsamler og runtime.

Rusts automatiske hukommelseshåndtering sparer udvikleren for at manipulere pointere og beskytter mod problemer, der opstår som følge af manipulation af hukommelsen på lavt niveau, såsom adgang til et hukommelsesområde, efter at det er blevet frigivet, dereferencing af nul-pointere, bufferoverskridelser osv. For at distribuere biblioteker, sikre samling og administrere afhængigheder udvikler projektet en pakkemanager Last, som giver dig mulighed for at få de biblioteker, du skal bruge til programmet, med et enkelt klik. Et lager er understøttet til at være vært for biblioteker kasser.io.

The main innovationer:

  • Tilføjet muligheden for at markere strukturer (struct) og optællinger (enum med Variant-blok) ved hjælp af attributten "#[ikke_udtømmende]", hvilket Det gør det muligt tilføje nye felter og varianter til deklarerede strukturer og optællinger i fremtiden. For eksempel kan udviklere af moduler, der har strukturer med offentligt deklarerede felter, bruge "#[ikke_udtømmende]" til at markere strukturer, der kan få nye felter tilføjet i fremtiden. Indtil nu har udvikleren i en sådan situation været nødt til at vælge mellem at deklarere felter privat og binde til en uforanderlig liste over felter. Den nye attribut fjerner denne begrænsning og tillader, at nye felter tilføjes i fremtiden uden risiko for at ødelægge tidligere kompileret ekstern kode. I crate-pakker kræves en eksplicit definition af "_ => {...}"-masken, når varianter sammenlignes i "match"-sektionen, for at dække mulige fremtidige felter, ellers vises en fejl, når nye felter tilføjes.
  • Tilføjet Mulighed for at kalde den proceduremæssige makro mac!() i en typekontekst. For eksempel kan du nu skrive "type Foo = expand_to_type!(bar);", hvis "expand_to_type" er en proceduremæssig makro.
  • I blokke af typen "extern { … }" tilføjet muligheden for at bruge proceduremæssige og attributmakroer, herunder "bang!()"-makroer, for eksempel:

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

    ekstern
    make_item!(alpha);
    make_item!(beta);
    }

    ekstern "C" {
    #[my_identity_macro]
    fn foo();
    }

  • I makroer implementeret muligheden for at generere "macro_rules!"-elementer. Generering af "macro_rules!" er mulig både i funktionslignende makroer ("mac!()") og i attributlignende makroer ("#[mac]").
  • I $m:meta-tilknytningselementet tilføjet understøttelse af vilkårlige token-optællingsværdier ('[TOKEN_STREAM]', '{TOKEN_STREAM}' og '(TOKEN_STREAM)'), for eksempel:

    makro_regler! accept_meta { ($m:meta) => {} }
    accept_meta!(min::sti);
    accept_meta!( min::sti = "oplyst" );
    accept_meta!(min::sti(abc));
    accept_meta!(min::sti[abc]);
    accept_meta!( min::sti { abc } );

  • I Rust 2015-tilstand aktiveres fejloutput for problemer, der registreres af lånekontrollen ved hjælp af NLL-teknikken (Non-Lexical Lifetimes). Tidligere blev advarsler erstattet af fejl, når programmet kørte i Rust 2018-tilstand.
    Efter ændringen blev udvidet til Rust 2015-tilstanden, var udviklerne endelig i stand til slippe af med fra den gamle lånechecker.

    Husk, at verifikationssystemet, der var baseret på den nye mekanisme til at tage højde for levetiden for lånte variabler, gjorde det muligt at identificere nogle problemer, som den gamle verifikationskode ikke bemærkede. Da outputtet af en fejl ved sådanne kontroller kunne påvirke kompatibiliteten med tidligere fungerende kode, blev der i første omgang udstedt advarsler i stedet for fejl.

  • "const"-flaget, som bestemmer muligheden for brug i enhver kontekst i stedet for konstanter, anvendes på funktionen is_power_of_two (for usignerede heltal).
  • En ny del af API'en er blevet flyttet til den stabile kategori, inklusive den stabiliserede todo!() makro og metoderne slice::repeat, mem::take, BTreeMap::get_key_value og HashMap::get_key_value.
    Valgmulighed::as_deref, Valgmulighed::as_deref_mut, Valgmulighed::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, og {f32,f64}::from_ne_bytes.
  • I fragtpakkehåndteringen
    implementeret cachelagring af compileradvarsler på disk. Kommandoen "cargo metadata" har nu "—filterplatform" for kun at vise pakker, der er bundet til den angivne målplatform, i grafen for afhængighedsopløsning. Tilføjet konfigurationsparameter http.ssl-version for at definere gyldige TLS-versioner.
    Tilføjet muligheden for at udgive sektionen "udviklerafhængigheder" uden at angive "versions"-nøglen.
  • Rustc-compileren yder niveau 7-understøttelse til målplatformene thumbv64neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 og mips64el-unknown-linux-muslabiXNUMX. Niveau XNUMX betyder grundlæggende understøttelse, men uden automatiseret testning eller officielle builds.

Kilde: opennet.ru

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster