Rust 1.34 Programming Language Version

Langaj pwogramasyon sistèm Rust 1.34, devlope pa pwojè Mozilla, te lage. 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 epi li 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. Pou distribye bibliyotèk, asire asanble ak jere depandans, pwojè a ap devlope manadjè pake kago, ki pèmèt ou jwenn bibliyotèk ki nesesè pou pwogram nan nan yon sèl klike sou. Repozitwa crates.io sipòte pou hosting bibliyotèk.

Prensipal 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 yon rejis ekstèn nan ~/.cargo/config
    yon nouvo opsyon "rejis mwen" yo bay nan seksyon "[rejis]", epi yo te ajoute yon opsyon "lòt-kas" pou mansyone rejis ekstèn nan depandans nan Cargo.toml nan seksyon "[depandans]". 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 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 makro pwosedi, li posib pou itilize 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 (' #[range(0. .10)]') ak konstriksyon tankou “#[bound(T: MyTrait)]”;
  • Karakteristik TryFrom ak TryInto yo te estabilize, sa ki pèmèt konvèsyon kalite ak manyen erè. Pou egzanp, metòd tankou from_be_bytes ak kalite nonb antye relatif yo 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è Enfayibl pou pèmèt itilizasyon transparan.
    TryFrom pou tout aplikasyon ki deja egziste nan "From";

  • Depreche fonksyon CommandExt::before_exec, ki te pèmèt ekzekisyon yon moun kap okipe anvan egzekisyon ki te egzekite nan yon kontèks yon pwosesis timoun fourche 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.
    Olye pou yo before_exec, li rekòmande pou itilize fonksyon ki pa an sekirite CommandExt::pre_exec.

  • Kalite nonb antye relatif atomik estabilize ki siyen ak ki pa siyen ki varye nan gwosè ant 8 ak 64 bit (pa egzanp, AtomicU8), osi byen ke kalite siyen NonZeroI[8|16|32|54|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 lyen an lè w espesifye opsyon konstriksyon "-C linker-plugin-lto" (rustc konpile kòd Rust nan LLVM bitcode, ki pèmèt optimize LTO yo dwe aplike).

Sous: opennet.ru

Add nouvo kòmantè