Rust 1.34 Rhyddhau Iaith Rhaglennu

Mae'r iaith rhaglennu system Rust 1.34, a ddatblygwyd gan brosiect Mozilla, wedi'i rhyddhau. 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. Er mwyn dosbarthu llyfrgelloedd, sicrhau cydosod a rheoli dibyniaethau, mae'r prosiect yn datblygu'r rheolwr pecyn Cargo, sy'n eich galluogi i gael y llyfrgelloedd sydd eu hangen ar gyfer y rhaglen mewn un clic. Cefnogir ystorfa crates.io ar gyfer cynnal llyfrgelloedd.

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 cofrestrfa allanol i ~/.cargo/config
    darperir opsiwn newydd “fy-cofrestrfa” yn yr adran “[cofrestrfeydd]”, ac mae opsiwn “crat arall” wedi'i ychwanegu i sôn am y gofrestrfa allanol mewn dibyniaethau yn Cargo.toml yn yr adran “[dibyniaethau]”. 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 doctests, sy'n caniatáu ichi 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, mae'n bosibl defnyddio 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)]";
  • Mae nodweddion TryFrom a TryInto wedi'u sefydlogi, gan ganiatáu trawsnewidiadau math gyda thrin gwallau. 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 gwall Anffaeledig wedi'i ychwanegu i ganiatáu defnydd tryloyw o
    TryFrom ar gyfer pob gweithrediad presennol o "From";

  • Wedi anghymeradwyo'r swyddogaeth CommandExt::before_exec, a oedd yn caniatáu gweithredu triniwr cyn gweithredydd 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.
    Yn lle before_exec, argymhellir defnyddio'r swyddogaeth anniogel 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, AtomicU8), yn ogystal â mathau wedi'u llofnodi NonZeroI[8|16|32|54|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” (mae rust yn llunio cod Rust i god didau LLVM, sy'n caniatáu i optimeiddiadau LTO gael eu cymhwyso).

Ffynhonnell: opennet.ru

Ychwanegu sylw