Mae rhyddhau'r iaith raglennu system Rust 1.53, a sefydlwyd gan brosiect Mozilla, ond sydd bellach wedi'i ddatblygu dan nawdd y sefydliad dielw annibynnol Rust Foundation, wedi'i gyhoeddi. Mae'r iaith yn canolbwyntio ar ddiogelwch cof, yn darparu rheolaeth cof awtomatig, ac yn darparu'r modd i gyflawni tasgau cyfochrog uchel heb ddefnyddio casglwr sbwriel neu amser rhedeg (mae amser rhedeg yn cael ei leihau i gychwyn a chynnal a chadw sylfaenol y llyfrgell safonol).
Mae rheolaeth cof awtomatig Rust yn dileu gwallau wrth drin awgrymiadau ac yn amddiffyn rhag problemau sy'n deillio o drin cof lefel isel, megis cyrchu rhanbarth cof ar ôl iddo gael ei ryddhau, dadgyfeiriadau pwyntydd nwl, gor-redeg byffer, ac ati. Er mwyn dosbarthu llyfrgelloedd, sicrhau cydosod a rheoli dibyniaethau, mae'r prosiect yn datblygu rheolwr pecyn Cargo. Cefnogir ystorfa crates.io ar gyfer cynnal llyfrgelloedd.
Prif arloesiadau:
- Ar gyfer araeau, mae'r nodwedd IntoIterator wedi'i gweithredu, sy'n eich galluogi i drefnu iteriad elfennau arae yn ôl gwerthoedd: ar gyfer i yn [1, 2, 3] { .. }
Mae hefyd yn bosibl trosglwyddo araeau i ddulliau sy'n derbyn iterwyr, er enghraifft: let set = BTreeSet::from_iter([1, 2, 3]); ar gyfer (a, b) yn some_iterator.chain([1]).zip([1, 2, 3]) { .. }
Yn flaenorol, dim ond ar gyfer cyfeiriadau arae y gweithredwyd IntoIterator, h.y. i ailadrodd dros werthoedd sy'n ofynnol defnyddio cyfeiriadau (“&[1, 2, 3]”) neu “[1, 2, 3].iter()”. Cafodd gweithrediad IntoIterator ar gyfer araeau ei rwystro gan faterion cydnawsedd a achoswyd gan drosi casglwr cynharach o array.into_iter() i (&array).into_iter(). Datryswyd y problemau hyn gyda datrysiad - bydd y casglwr yn parhau i drosi array.into_iter() i (&array).into_iter() fel pe na bai nodwedd IntoIterator yn cael ei gweithredu, ond dim ond wrth alw'r dull gan ddefnyddio'r ".into_iter( )" cystrawen a heb gyffwrdd â'r galwadau yn y ffurf "yn [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] )".
- Mae modd nodi ymadroddion “|” (gweithrediad NEU rhesymegol) mewn unrhyw ran o'r templed, er enghraifft, yn lle “Some(1) | Some(2)" gallwch nawr ysgrifennu "Rhai(1 | 2)": cyfateb canlyniad { Ok(Some(1 | 2)) => { .. } Error(MyError { kind: FileNotFound | Caniatâd Wedi'i Ddileu, .. }) => { .. } _ => { .. } }
- Caniateir defnyddio nodau nad ydynt yn ASCII mewn dynodwyr, gan gynnwys unrhyw nodau cenedlaethol a ddiffinnir ym manyleb Unicode UAX 31, ond heb gynnwys nodau emoji. Os ydych chi'n defnyddio nodau gwahanol ond tebyg, bydd y casglwr yn rhoi rhybudd. const BLÅHAJ: &str="🦈"; strwythur 人 { 名字: Llinynnol, } gadael α = 1; letsos = 2; rhybudd: ystyrir bod y pâr adnabod yn ddryslyd rhwng 's' ac 's'
- Mae cyfran newydd o APIs wedi'i drosglwyddo i'r categori sefydlog, gan gynnwys y sefydlogi canlynol:
- arae::from_ref
- arae::from_mut
- AtomicBool::fetch_update
- AtomicPtr::fetch_update
- BTreeSet::cadw
- BTreeMap::cadw
- BufReader::ceisio_perthynas
- cmp::mun_by
- cmp:: munud_wrth_allwedd
- cmp:: max_by
- cmp:: max_by_key
- DebugStruct::finish_non_exhaustive
- Hyd::ZERO
- Hyd::MAX
- Hyd:: yw_sero
- Hyd::saturating_add
- Hyd::saturating_sub
- Hyd::saturating_mul
- f32:: yn_is-normal
- f64:: yn_is-normal
- IntoIterator ar gyfer araeau
- {cyfanrif}::BITS
- io::Gwall::Heb ei gefnogi
- NonZero* :: lead_zeros
- NonZero*::trailing_zeros
- Opsiwn:: mewnosod
- Archebu::is_eq
- Archebu::is_ne
- Archebu::is_lt
- Archebu::is_gt
- Archebu::is_le
- Archebu::is_ge
- OsStr:: make_ascii_caseg is
- OsStr::gwneud_ascii_uppercase
- OsStr::to_ascii_caseg is
- OsStr::to_ascii_uppercase
- OsStr::is_ascii
- OsStr::eq_ignore_ascii_case
- Syllu:: peek_mut
- Rc::cynnydd_cyfrif_cryf
- Rc::lleihad_cyfrif_cryf
- sleisen::IterMut::as_slice
- AsRef<[T]> ar gyfer sleisen::IterMut
- impl SliceIndex ar gyfer (Bound , Yn rhwym )
- Vec::extend_from_o fewn
- Mae'r drydedd lefel o gefnogaeth ar gyfer y platfform wasm64-anhysbys-anhysbys wedi'i weithredu. Mae'r drydedd lefel yn cynnwys cefnogaeth sylfaenol, ond heb brofi awtomataidd, cyhoeddi adeiladau swyddogol, na gwirio a ellir adeiladu'r cod.
- Mae'r rheolwr pecyn Cargo wedi'i symud i ddefnyddio'r enw "prif" ar gyfer prif gangen y storfa Git (HEAD) yn ddiofyn. Nid yw dibyniaethau sy'n cael eu lletya mewn cadwrfeydd sy'n defnyddio'r enw prif enw yn lle meistr bellach angen cangen = "prif" i gael eu ffurfweddu.
- Yn y casglwr, codir y gofynion ar gyfer y fersiwn lleiaf o LLVM i LLVM 10.
Yn ogystal, gallwn nodi'r cyllid a ddarperir ar gyfer datblygu integreiddio i'r cnewyllyn Linux o offer ar gyfer datblygu cydrannau yn yr iaith Rust. Bydd y gwaith yn cael ei wneud o fewn fframwaith y prosiect Prossimo dan nawdd y sefydliad ISRG (Internet Security Research Group), sef sylfaenydd y prosiect Let's Encrypt ac sy'n hyrwyddo HTTPS a datblygiad technolegau i gynyddu diogelwch y Rhyngrwyd. Bydd yr arian yn cael ei ddarparu gan Google, a fydd yn talu am waith Miguel Ojeda, awdur y prosiect Rust-for-Linux. Yn flaenorol, mae ISRG a Google eisoes wedi ariannu creu backend HTTP amgen ar gyfer y cyfleustodau curl a datblygu modiwl TLS newydd ar gyfer gweinydd http Apache.
Yn ôl Microsoft a Google, mae tua 70% o wendidau yn cael eu hachosi gan drin cof anniogel. Disgwylir y bydd defnyddio'r iaith Rust i ddatblygu cydrannau cnewyllyn fel gyrwyr dyfeisiau yn lleihau'r risg o wendidau a achosir gan drin cof anniogel ac yn dileu gwallau megis cyrchu rhanbarth cof ar ôl iddo gael ei ryddhau a gor-redeg ffiniau clustogi.
Darperir diogelwch cof yn Rust ar amser llunio trwy wirio cyfeiriadau, cadw golwg ar berchnogaeth gwrthrych ac oes gwrthrych (cwmpas), yn ogystal â thrwy werthuso cywirdeb mynediad cof wrth weithredu cod. Mae Rust hefyd yn darparu amddiffyniad rhag gorlifiadau cyfanrif, yn gofyn am ymgychwyn gorfodol o werthoedd amrywiol cyn ei ddefnyddio, yn trin gwallau yn well yn y llyfrgell safonol, yn cymhwyso'r cysyniad o gyfeiriadau a newidynnau digyfnewid yn ddiofyn, yn cynnig teipio statig cryf i leihau gwallau rhesymegol.
Ffynhonnell: opennet.ru