Yo te pibliye piblikasyon langaj pwogramasyon jeneral Rust 1.77, ki te fonde pa pwojè Mozilla, men kounye a devlope sou ejid òganizasyon endepandan ki pa pou pwofi Rust Foundation. Lang la konsantre sou sekirite memwa epi li bay mwayen pou reyalize gwo paralèl nan ekzekisyon travay, pandan y ap evite itilizasyon yon pèseptè fatra ak tan exécute (se redui tan an nan inisyalizasyon debaz ak antretyen nan bibliyotèk la estanda).
Teknik jesyon memwa Rust yo libere pwomotè a soti nan erè manipilasyon konsèy epi pwoteje kont pwoblèm ki rive nan manipilasyon memwa ki ba-nivo, tankou aksè 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. Repozitwa crates.io sipòte pou hosting bibliyotèk.
Sekirite memwa aplike nan Rust nan moman konpile atravè chèk referans, swiv pwopriyetè objè, konsiderasyon pou tout lavi objè (delimitasyon) ak evalyasyon aksè memwa nan tan exécution. Rust tou bay pwoteksyon kont debòde nonb antye relatif, mande pou valè varyab yo dwe inisyalize anvan yo itilize, gen pi bon manyen erè nan bibliyotèk estanda a, sèvi ak konsèp nan referans imuiabl ak varyab pa default, epi li ofri fò sezisman estatik pou minimize erè lojik.
Prensipal inovasyon:
- Te ajoute sipò pou literal pou C-strings (c "tèks"), ki estoke nan memwa ak yon karaktè nil-termine epi ki asosye ak kalite "CStr". Li espere ke sipò C-string pral senplifye ekri kòd ki kominike avèk kouch nan lang pwogramasyon ki sèvi ak fisèl nul-termined, epi yo pral pèmèt chèk nesesè yo dwe fèt nan etap konpilasyon an. const HELLO: &core::ffi::CStr = c"Bonjou, lemonn!";
- Nan fonksyon asynchrone egzekite yo deklare lè l sèvi avèk ekspresyon "async fn", yo pèmèt yo sèvi ak rekursion, i.e. fonksyon sa yo kapab kounye a rele tèt yo. async fn fib (n: u32) -> u32 { matche n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).wait + Box::pin(fib(n-2)).wait } }
- Yo te estabilize makro offset_of la, sa ki pèmèt ou detèmine konpanse byte nan jaden estrikti, enimerasyon, inyon ak tuple, parapò ak kòmansman kalite a. Nan pratik, yon makro ka itil nan sitiyasyon kote ou bezwen travay nan nivo konpanse jaden an nan absans yon egzanp nan kalite a. An patikilye, fonksyonalite offset_of nesesè lè w ap devlope eleman ba nivo tankou chofè yo. itilize std::mem; #[repr(C)] struct FieldStruct { premye: u8, dezyèm: u16, twazyèm: u8 } assert_eq!(mem::offset_of!(FieldStruct, premye), 0); assert_eq!(mem::offset_of!(FieldStruct, dezyèm), 2); assert_eq!(mem::offset_of!(FieldStruct, twazyèm), 4);
- Nan manadjè pake kago, nan pwofil lage, netwaye dosye ki soti nan done debogaj yo pèmèt pa default (band = "debuginfo"), sof si mòd debug klèman pèmèt nan pwofil la kago, i.e. si paramèt debug la = 0.
- Opsyon "-Zthir-unsafeck=on" la aktive pa defo, bay yon chèk ki pa ansekirite pou THIR (Typed High-Level Intermediate Representation).
- Te ajoute chèk pou static_mut_refs pou montre yon avètisman lè w ap itilize referans sou valè estatik ki ka chanje.
- Kapasite pou itilize "De<&[T;" a te aplike. N]>" pou kalite "Bèf<[T]>". fn foo(done: impl Into >) { /* … */ } fn main() { foo(&[“alo”, “mond”]); }
- Konpilateur a bay aliyman kalite i16 ak u128 128-byte pou sistèm x86.
- Yon nouvo pòsyon nan API a te transfere nan kategori ki estab, ki gen ladan metòd yo ak aplikasyon karakteristik yo:
- etalaj::chak_ref
- etalaj::each_mut
- nwayo::net
- f32::round_ties_even
- f64::round_ties_even
- mem::offset_of!
- tranch::first_chunk
- tranch::first_chunk_mut
- tranch::split_first_chunk
- slice::split_first_chunk_mut
- tranch::dènye_fraksyon
- tranch::last_chunk_mut
- tranch::split_last_chunk
- slice::split_last_chunk_mut
- tranch::chunk_by
- tranch::chunk_by_mut
- Bound::kat
- File::create_new
- Mutex::clear_poison
- RwLock::clear_poison
- Twazyèm nivo sipò yo te aplike pou platfòm aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf ak riscv32im-risc0-zkvm-elf. Twazyèm nivo a enplike sipò debaz, men san yo pa tès otomatik, pibliye bati ofisyèl, oswa tcheke si kòd la ka bati.
Sous: opennet.ru
