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]", hvilken Det gør det muligt i fremtiden, tilføje nye felter og muligheder til deklarerede strukturer og opregninger. For eksempel kan udviklere af moduler, der har strukturer med offentligt erklærede felter, bruge "#[non_exhaustive]" til at markere strukturer, der kan have tilføjet nye felter i fremtiden. Indtil nu, i denne situation, har udvikleren været tvunget til at vælge mellem at erklære felter privat og binde til en uforanderlig liste af felter. Den nye attribut fjerner denne begrænsning og giver dig mulighed for at tilføje nye felter i fremtiden uden risiko for at bryde tidligere kompileret ekstern kode. I kassepakker kræves der en eksplicit definition af masken "_ => {...}", der dækker mulige fremtidige felter, når der matches muligheder i "match"-sektionen, ellers vil der blive vist en fejl, når nye felter tilføjes.
  • Tilføjet evnen til 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 "ekstern { ... }" blokke tilføjet evnen til at bruge procedure- og attributmakroer, herunder "bang!()"-makroer, for eksempel:

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

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

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

  • I makroer implementeret evne til at generere "macro_rules!"-elementer. Generering af "makro_regler!" muligt både i funktionslignende makroer ("mac!()") og i makroer i form af attributter ("#[mac]").
  • I $m:meta-mapping-elementet tilføjet understøttelse af vilkårlige token-opregningsværdier ("[TOKEN_STREAM]", "{TOKEN_STREAM}" og "(TOKEN_STREAM)"), for eksempel:

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

  • I Rust 2015-tilstand er fejloutput aktiveret for problemer, der identificeres ved kontrol af lån af variabler (lånekontrol) ved hjælp af NLL-teknikken (Non-Lexical Lifetimes). Tidligere blev advarsler erstattet med fejl, når de kørte i Rust 2018-tilstand.
    Efter ændringen blev udvidet til Rust 2015-tilstanden, kunne udviklere endelig slippe af med fra den gamle lånetjek.

    Lad os huske på, at verifikationssystemet baseret på en ny mekanisme til at tage hensyn til levetiden for lånte variabler gjorde det muligt at identificere nogle problemer, der gik ubemærket af den gamle verifikationskode. Da fejloutput for sådanne kontroller kunne påvirke kompatibiliteten med tidligere fungerende kode, blev der oprindeligt udsendt advarsler i stedet for fejl.

  • "const"-attributten, som bestemmer muligheden for at bruge den i enhver sammenhæng i stedet for konstanter, bruges til funktionen is_power_of_two (for heltal uden fortegn).
  • En ny del af API'et er blevet flyttet til den stabile kategori, inklusive todo!()-makroen og slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metoder er blevet stabiliseret.
    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 og {f32,f64}::from_ne_bytes.

  • I pakkeforvalteren last
    implementeret caching compiler advarsler på disk. Tilføjet muligheden "fragtmetadata" til kommandoen "fragtmetadata".--filter-platform" for kun at vise pakker bundet til den angivne målplatform i afhængighedsopløsningskolonnen. Tilføjet http.ssl-version-konfigurationsmulighed for at definere gyldige TLS-versioner.
    Tilføjet muligheden for at udgive afsnittet "dev-afhængigheder" uden at angive "version"-nøglen.

  • Rustc-kompileren leverer understøttelse på tredje niveau til målplatforme thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 og mips64el-unknown-linux-muslabi64. Det tredje niveau involverer grundlæggende support, men uden automatiseret test og offentliggørelse af officielle builds.

Kilde: opennet.ru

Tilføj en kommentar