Rust 1.34 Programming Language Version

pran plas lage langaj pwogramasyon sistèm lan Rouye 1.34, devlope pa pwojè Mozilla. Lang la konsantre sou sekirite memwa, bay jesyon memwa otomatik, epi li bay yon mwayen pou reyalize paralèl travay segondè san yo pa itilize yon pèseptè fatra oswa ègzekutabl.

Jesyon otomatik memwa Rust la libere pwomotè a soti nan manipilasyon konsèy ak pwoteje kont pwoblèm ki rive nan manipilasyon memwa ki ba-nivo, tankou aksè memwa apre-gratis, dereferans pointer nil, depase tanpon, ak lòt bagay. Yon manadjè pake ap devlope pou distribye bibliyotèk, asire asanble ak jere depandans pa pwojè a. Chaj, ki pèmèt ou jwenn bibliyotèk ki nesesè pou pwogram nan nan yon sèl klike sou. Yon depo sipòte pou òganize bibliyotèk kès.io.

Prensipal la inovasyon:

  • Manadjè pake kago a te ajoute zouti pou travay avèk rejis pakè altènatif ki ka viv ansanm ak rejis piblik crates.io. Pou egzanp, devlopè aplikasyon pou propriétaires kapab kounye a itilize pwòp rejis prive yo, ki ka itilize lè lis depandans nan Cargo.toml, epi aplike yon modèl vèsyon ki sanble ak crates.io pou pwodwi yo, osi byen ke refere depandans nan tou de kès. io ak nan pwòp rejis ou.

    Pou ajoute rejis ekstèn nan .cargo/config (ki sitiye nan $HOME oswa nan anyè pake a)
    bay seksyon "[rejis]", epi pou itilize yon rejis ekstèn, opsyon "rejis" la parèt nan deskripsyon chak depandans nan Cargo.toml. Pou konekte ak yon rejis adisyonèl, tou senpleman mete siy otantifikasyon an nan fichye ~/.cargo/credentials epi kouri lòd la.
    "cargo login --registry=my-registry" epi pibliye yon pake -
    "kago pibliye -registry=rejis-mwen";

  • Te ajoute sipò konplè pou itilize operatè "?". nan tès yo doctests, ki pèmèt ou sèvi ak egzanp kòd ki soti nan dokiman an kòm tès. Précédemment operatè
    "?" ka itilize pou jere erè pandan ekzekisyon tès la sèlman nan prezans "fn main()" fonksyon oswa nan "#[tès]" fonksyon yo;

  • Nan atribi koutim defini lè l sèvi avèk macros pwosedi bay kapasite pou sèvi ak seri abitrè siy ("#[attr($tokens)]", "#[attr[$tokens]] ak #[attr{$tokens}]"). Anvan sa, eleman yo te kapab sèlman espesifye nan yon fòm pye bwa/rekursif lè l sèvi avèk literal fisèl, pou egzanp “#[foo(bar, baz(quux, foo = “bar”)]”, men kounye a li posib pou itilize enimerasyon (' #[ranje(0. .10)]') ak konstriksyon tankou “#[bound(T: MyTrait)]”;
  • Karakteristik estabilize (karakteristik) TryFrom и TryInto, ki pèmèt konvèsyon kalite ak manyen erè. Pou egzanp, metòd tankou from_be_bytes ak kalite nonb antye relatif itilize etalaj kòm opinyon, men done yo souvan vini nan yon kalite tranch, ak konvèti ant etalaj ak tranch se pwoblèm fè manyèlman. Avèk èd nan nouvo karakteristik, operasyon an espesifye ka fèt sou vole nan yon apèl nan .try_into(), pou egzanp, "let num = u32::from_be_bytes(slice.try_into()?)". Pou konvèsyon ki toujou reyisi (pa egzanp, soti nan tip u8 rive nan u32), yo te ajoute yon kalite erè Enfayib, ki pèmèt itilizasyon transparan
    TryFrom pou tout aplikasyon ki deja egziste nan "From";

  • Fonksyon an te obsève CommandExt::before_exec, ki te pèmèt yon moun kap okipe yo dwe egzekite anvan kouri exec, ki te egzekite nan kontèks la nan yon pwosesis timoun fourked apre apèl la fork(). Nan kondisyon sa yo, kèk resous nan pwosesis paran an, tankou deskriptè fichye yo ak zòn memwa kat yo, ta ka double, ki ka mennen nan konpòtman endefini ak operasyon kòrèk nan bibliyotèk.
    Li rekòmande pou itilize yon fonksyon ki pa an sekirite olye pou yo before_exec CommandExt::pre_exec.

  • Kalite nonb antye relatif atomik estabilize siyen ak san siyen ki varye ant 8 ak 64 bit (pa egzanp, AtomicU8), osi byen ke kalite siyen NonZeroI[8|16|32|64|128].
  • Yon nouvo pati nan API a te deplase nan kategori ki estab, ki gen ladan Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub. ] ak metòd SystemTime yo te estabilize ::checked_[add|sub]. Fonksyon iter::from_fn ak iter::successors yo te estabilize;
  • Pou tout kalite nonb antye, metòd checked_pow, saturating_pow, wrapping_pow ak overflowing_pow yo aplike;
  • Te ajoute kapasite pou pèmèt optimize nan etap ki lye a lè w espesifye opsyon konstriksyon "-C linker-plugin-lto".

Sous: opennet.ru

Add nouvo kòmantè