Rust 1.34 Rhyddhau Iaith Rhaglennu

cymryd lle rhyddhau iaith rhaglennu system Rhwd 1.34, a ddatblygwyd gan brosiect Mozilla. Mae'r iaith yn canolbwyntio ar ddiogelwch cof, yn darparu rheolaeth cof awtomatig, ac yn darparu modd i gyflawni tasgau tebyg iawn heb ddefnyddio casglwr sbwriel neu amser 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:

  • Mae'r rheolwr pecyn Cargo wedi ychwanegu offer i weithio gyda chofrestrfeydd pecyn amgen a all gydfodoli â chofrestrfa gyhoeddus crates.io. Er enghraifft, gall datblygwyr cymwysiadau perchnogol nawr ddefnyddio eu cofrestrfa breifat eu hunain, y gellir ei defnyddio wrth restru dibyniaethau yn Cargo.toml, a chymhwyso model fersiwn tebyg i crates.io ar gyfer eu cynhyrchion, yn ogystal â chyfeirio dibyniaethau i'r ddau grât. io ac i'ch cofrestrfa eich hun.

    I ychwanegu cofrestrfeydd allanol i .cargo/config (wedi'i leoli yn $HOME neu yn y cyfeiriadur pecynnau)
    darparu adran “[cofrestrfeydd]”, ac i ddefnyddio cofrestrfa allanol, mae’r opsiwn “cofrestrfa” wedi ymddangos yn y disgrifiad o bob dibyniaeth yn Cargo.toml. I gysylltu â chofrestrfa ychwanegol, rhowch y tocyn dilysu yn y ffeil ~/.cargo/credentials a rhedeg y gorchymyn
    "cargo login --registry=my-registry" ac i gyhoeddi pecyn -
    "cargo publish -registry=my-registry";

  • Ychwanegwyd cefnogaeth lawn ar gyfer defnyddio'r gweithredwr “?”. mewn profion athrawiaethau, sy'n eich galluogi i ddefnyddio cod enghreifftiol o'r ddogfennaeth fel profion. Gweithredwr yn flaenorol
    "?" dim ond ym mhresenoldeb y swyddogaeth “fn main ()” neu yn y ffwythiannau “#[test]” y gellid ei ddefnyddio i drin gwallau wrth gyflawni prawf;

  • Mewn priodoleddau arfer a ddiffinnir gan ddefnyddio macros gweithdrefnol sicrhawyd y gallu i ddefnyddio setiau mympwyol o docynnau (“#[attr($tokens)]”, “#[attr[$tokens]] a #[attr{$tokens}]”). Yn flaenorol, dim ond trwy ddefnyddio llythrennau llinynnol y gellid pennu elfennau ar ffurf coeden/ailgylchol, er enghraifft “#[foo(bar, baz(quux, foo = “bar”))]”, ond nawr mae modd defnyddio rhifiadau (' #[ystod(0. .10)]') a chystrawennau fel “#[bound(T: MyTrait)]";
  • Mathau sefydlog (nodwedd) TryFrom и TryInto, gan ganiatáu trawsnewidiadau math gyda thrin gwall. Er enghraifft, mae dulliau fel from_be_bytes gyda mathau cyfanrif yn defnyddio araeau fel mewnbwn, ond mae'r data yn aml yn dod mewn math Sleis, ac mae trosi rhwng araeau a sleisys yn broblemus i'w wneud â llaw. Gyda chymorth nodweddion newydd, gellir cyflawni'r gweithrediad penodedig ar y hedfan trwy alwad i .try_into(), er enghraifft, “let num = u32::from_be_bytes(slice.try_into()?)”. Ar gyfer trawsnewidiadau sydd bob amser yn llwyddo (er enghraifft, o fath u8 i u32), mae math o wall wedi'i ychwanegu Analluog, gan ganiatáu defnydd tryloyw
    TryFrom ar gyfer pob gweithrediad presennol o "From";

  • Mae swyddogaeth wedi'i anghymeradwyo CommandExt::before_exec, a oedd yn caniatáu i driniwr gael ei weithredu cyn rhedeg exec, a weithredwyd yng nghyd-destun proses plentyn a fforchwyd ar ôl galwad fforch(). O dan amodau o'r fath, gallai rhai adnoddau o'r broses rhiant, megis disgrifyddion ffeiliau a mannau cof wedi'u mapio, gael eu dyblygu, a allai arwain at ymddygiad heb ei ddiffinio a gweithrediad anghywir llyfrgelloedd.
    Argymhellir defnyddio swyddogaeth anniogel yn lle before_exec CommandExt:: pre_exec.

  • Mathau cyfanrif atomig sefydlog wedi'u llofnodi a heb eu llofnodi yn amrywio o ran maint o 8 i 64 did (er enghraifft, AtomigU8), yn ogystal â mathau wedi'u llofnodi Di-SeroI[8|16|32|64|128].
  • Mae rhan newydd o'r API wedi'i symud i'r categori sefydlog, gan gynnwys y Any::type_id, Error::type_id, slice:: sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant:: checked_[ychwanegu|is. ] a dulliau SystemTime wedi'u sefydlogi ::checked_[add|sub]. Mae swyddogaethau iter::from_fn ac iter::olynwyr wedi'u sefydlogi;
  • Ar gyfer pob math o gyfanrif, gweithredir y dulliau checked_pow, saturating_pow, wrapping_pow a overflowing_pow;
  • Ychwanegwyd y gallu i alluogi optimeiddiadau yn y cam cysylltu trwy nodi'r opsiwn adeiladu “-C linker-plugin-lto”.

Ffynhonnell: opennet.ru

Ychwanegu sylw