Rust 1.40 Rhyddhau Iaith Rhaglennu

Cyhoeddwyd rhyddhau iaith rhaglennu system Rhwd 1.40, a sefydlwyd gan brosiect Mozilla. Mae'r iaith yn canolbwyntio ar ddiogelwch cof, yn darparu rheolaeth cof awtomatig, ac yn darparu offer ar gyfer cyflawni cyfochrogrwydd tasg uchel heb ddefnyddio casglwr sbwriel a Rhedeg.

Mae rheolaeth cof awtomatig Rust yn rhyddhau'r datblygwr rhag trin pwyntydd ac yn amddiffyn rhag problemau sy'n deillio o drin cof lefel isel, megis mynediad cof ôl-rhad ac am ddim, cyfeiriadau pwyntydd nwl, gor-redeg byffer, ac ati. Mae rheolwr pecyn yn cael ei ddatblygu i ddosbarthu llyfrgelloedd, sicrhau cydosod a rheoli dibyniaethau gan y prosiect. Tâl, sy'n eich galluogi i gael y llyfrgelloedd sydd eu hangen ar gyfer y rhaglen mewn un clic. Cefnogir ystorfa i gynnal llyfrgelloedd cewyll.io.

Y prif arloesiadau:

  • Ychwanegwyd y gallu i farcio strwythurau (strwythur) a rhifiadau (enum gyda bloc Amrywiad) gan ddefnyddio'r priodoledd "#[di_hollol]", sydd yn caniatáu yn y dyfodol, ychwanegu meysydd ac opsiynau newydd at strwythurau a chyfrifiadau datganedig. Er enghraifft, gall datblygwyr modiwlau sydd â strwythurau â meysydd sydd wedi'u datgan yn gyhoeddus ddefnyddio "#[non_exhaustive]" i farcio strwythurau a allai gynnwys meysydd newydd yn y dyfodol. Hyd yn hyn, mewn sefyllfa o'r fath, gorfodwyd y datblygwr i ddewis rhwng datgan meysydd yn breifat a rhwymo i restr ddigyfnewid o feysydd. Mae'r priodoledd newydd yn dileu'r cyfyngiad hwn ac yn caniatáu ichi ychwanegu meysydd newydd yn y dyfodol heb y risg o dorri cod allanol a luniwyd yn flaenorol. Mewn pecynnau crât, wrth baru opsiynau yn yr adran “match”, mae angen diffiniad penodol o'r mwgwd “_ => {...}”, sy'n cwmpasu meysydd posibl yn y dyfodol, fel arall bydd gwall yn cael ei arddangos wrth ychwanegu meysydd newydd.
  • Wedi adio y gallu i alw'r macro gweithdrefnol mac!() mewn cyd-destun math. Er enghraifft, gallwch nawr ysgrifennu “type Foo = expand_to_type! (bar);” os yw “expand_to_type” yn facro gweithdrefnol.
  • Mewn blociau "extern { ... }". wedi adio y gallu i ddefnyddio macros gweithdrefnol a phriodoledd, gan gynnwys macros “bang!()”, er enghraifft:

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

    allanol {
    gwneud_eitem!(alffa);
    gwneud_item!(beta);
    }

    allanol "C" {
    #[fy_identity_macro] fn foo();
    }

  • Mewn macros gweithredu y gallu i gynhyrchu elfennau “macro_rules!”. Cynhyrchu "macro_rules!" yn bosibl mewn macros tebyg i ffwythiant (“mac! ()”) ac mewn macros ar ffurf priodoleddau (“#[mac]”).
  • Yn yr elfen mapio $m:meta wedi adio cefnogaeth ar gyfer gwerthoedd rhifo tocynnu mympwyol ("[TOKEN_STREAM]", "{TOKEN_STREAM}" a "(TOKEN_STRREAM)"), er enghraifft:

    macro_rheolau! accept_meta { ( $m:meta) => {} }
    derbyn_meta! ( fy :: llwybr );
    derbyn_meta!( fy::path = "goleu" );
    derbyn_meta! ( fy :: llwybr (abc) );
    derbyn_meta! ( fy :: llwybr [ abc ] );
    derbyn_meta! ( fy :: llwybr { abc } );

  • Yn y modd Rust 2015, mae allbwn gwallau wedi'i alluogi ar gyfer problemau a nodir wrth wirio benthyca newidynnau (gwiriwr benthyca) gan ddefnyddio'r dechneg NLL (Non-Lexical Lifetimes). Yn flaenorol, mae rhybuddion wedi'u disodli gan wallau wrth redeg yn y modd Rust 2018.
    Ar ôl i'r newid gael ei ymestyn i'r modd Rust 2015, roedd datblygwyr yn gallu o'r diwedd cael gwared o'r hen wiriwr benthyg.

    Gadewch inni gofio bod y system ddilysu sy'n seiliedig ar fecanwaith newydd ar gyfer ystyried oes y newidynnau a fenthycwyd wedi ei gwneud hi'n bosibl nodi rhai problemau nad oedd yr hen god dilysu yn sylwi arnynt. Gan y gallai allbwn gwallau ar gyfer gwiriadau o'r fath effeithio ar gydnawsedd â chod a oedd yn gweithio'n flaenorol, cyhoeddwyd rhybuddion i ddechrau yn lle gwallau.

  • Defnyddir y briodwedd “const”, sy'n pennu'r posibilrwydd o'i ddefnyddio mewn unrhyw gyd-destun yn lle cysonion, ar gyfer y swyddogaeth is_power_of_two (ar gyfer cyfanrifau heb eu llofnodi).
  • Mae cyfran newydd o'r API wedi'i symud i'r categori stabl, gan gynnwys y todo!() macro a'r sleisen::ailadrodd, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, mae dulliau wedi'u sefydlogi.
    Opsiwn:: as_deref, Opsiwn:: as_deref_mut, Opsiwn:: fflatio, UdpSocket:: peer_addr, {f32,f64} :: to_be_bytes, {f32,f64} :: to_le_bytes, {f32,f64} :: to_ne_32bytes, {f64,f32} f64}::from_be_bytes, {f32,f64}::from_le_bytes, a {fXNUMX,fXNUMX}::from_ne_bytes.

  • Yn y cargo rheolwr pecyn
    gweithredu caching rhybuddion casglwr ar ddisg. Mae'r opsiwn "metadata cargo" wedi'i ychwanegu at y gorchymyn "metadata cargo".--hidlo-llwyfan" " i ddangos pecynnau sydd wedi eu rhwymo i'r platfform targed penodedig yn y golofn datrysiad dibyniaeth yn unig. Ychwanegwyd opsiwn ffurfweddu fersiwn http.ssl i ddiffinio fersiynau TLS dilys.
    Ychwanegwyd y gallu i gyhoeddi'r adran "dev-dibyniaethau" heb nodi'r allwedd "version".

  • Mae'r crynhoydd rustc yn darparu cefnogaeth trydydd lefel ar gyfer llwyfannau targed thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 a mips64el-unknown-linux-muslabi64. Mae'r drydedd lefel yn cynnwys cymorth sylfaenol, ond heb brofi awtomataidd a chyhoeddi adeiladau swyddogol.

Ffynhonnell: opennet.ru

Ychwanegu sylw