publisert utgivelse av systemprogrammeringsspråk Rust 1.40, grunnlagt av Mozilla-prosjektet. Språket fokuserer på minnesikkerhet, gir automatisk minnehåndtering og gir verktøy for å oppnå høy oppgaveparallellisme uten å bruke en søppeloppsamler og runtime.
Rusts automatiske minnebehandling frigjør utvikleren fra pekermanipulasjon og beskytter mot problemer som oppstår fra lavnivå minnemanipulering, for eksempel etterfrie minnetilganger, null-pekerdereferanser, bufferoverskridelser og lignende. En pakkebehandler utvikles for å distribuere biblioteker, sikre montering og administrere avhengigheter av prosjektet. Cargo, slik at du kan få bibliotekene som trengs for programmet med ett klikk. Et depot støttes for å være vert for biblioteker kasser.io.
Lagt til muligheten til å merke strukturer (struct) og oppregninger (enum med Variant-blokk) ved å bruke attributtet "#[ikke_uttømmende]", hvilken den lar i fremtiden, legg til nye felt og alternativer til deklarerte strukturer og oppregninger. For eksempel kan utviklere av moduler som har strukturer med offentlig deklarerte felt bruke "#[non_exhaustive]" for å merke strukturer som kan ha nye felt lagt til i fremtiden. Inntil nå, i denne situasjonen, ble utvikleren tvunget til å velge mellom å deklarere felt privat og å binde seg til en uforanderlig liste over felt. Det nye attributtet fjerner denne begrensningen og lar deg legge til nye felt i fremtiden uten risiko for å bryte tidligere kompilert ekstern kode. I kassepakker kreves det en eksplisitt definisjon av masken "_ => {...}" når alternativer i "match"-delen samsvarer, som dekker mulige fremtidige felt, ellers vil en feil vises når nye felt legges til.
La til muligheten til å kalle den prosessuelle makroen mac!() i en typekontekst. For eksempel kan du nå skrive "type Foo = expand_to_type!(bar);" hvis "expand_to_type" er en prosedyremakro.
I "ekstern { ... }" blokker la til muligheten til å bruke prosedyre- og attributtmakroer, inkludert "bang!()"-makroer, for eksempel:
I makroer implementert evne til å generere "macro_rules!"-elementer. Genererer "makro_regler!" mulig både i funksjonslignende makroer (“mac!()”) og i makroer i form av attributter (“#[mac]”).
I $m:meta-tilordningselementet la til støtte for vilkårlige token-oppregningsverdier ("[TOKEN_STREAM]", "{TOKEN_STREAM}" og "(TOKEN_STREAM)"), for eksempel:
makro_regler! accept_meta { ($m:meta) => {} }
accept_meta!( min::bane );
accept_meta!( min::path = "lit" );
accept_meta!( min::bane ( a b c ) );
accept_meta!( min::bane [ a b c ] );
accept_meta!( min::bane { a b c } );
I Rust 2015-modus er feilutgang aktivert for problemer identifisert ved kontroll av lån av variabler (lånekontroll) ved hjelp av NLL-teknikken (Non-Lexical Lifetimes). Tidligere ble advarsler erstattet med feil ved kjøring i Rust 2018-modus.
Etter at endringen ble utvidet til Rust 2015-modus, kunne utviklere endelig bli kvitt fra den gamle lånebrikken.
La oss huske at verifikasjonssystemet basert på en ny mekanisme for å ta hensyn til levetiden til lånte variabler gjorde det mulig å identifisere noen problemer som gikk ubemerket av den gamle verifikasjonskoden. Siden feilutdata for slike kontroller kan påvirke kompatibiliteten med tidligere fungerende kode, ble det opprinnelig utstedt advarsler i stedet for feil.
«const»-attributtet, som bestemmer muligheten for å bruke det i enhver kontekst i stedet for konstanter, brukes for funksjonen is_power_of_two (for heltall uten fortegn).
En ny del av API-en har blitt flyttet til den stabile kategorien, inkludert todo!()-makroen og slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metodene har blitt stabilisert.
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} f32}::from_be_bytes, {f64,f32}::from_le_bytes og {f64,fXNUMX}::from_ne_bytes.
I pakkeforvalter last implementert caching kompilator advarsler på disk. Lagt til alternativet "lastmetadata" til kommandoen "lastmetadata".--filter-plattform" for å vise bare pakker bundet til den angitte målplattformen i kolonnen for avhengighetsoppløsning. Lagt til http.ssl-versjonskonfigurasjonsalternativ for å definere gyldige TLS-versjoner.
Lagt til muligheten til å publisere delen "utviklingsavhengigheter" uten å spesifisere "versjon"-nøkkelen.
Rustc-kompilatoren gir støtte på tredje nivå for målplattformer thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 og mips64el-unknown-linux-muslabi64. Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing og publisering av offisielle bygg.