Rust 1.47 Programazio Lengoaia kaleratzea

Mozilla proiektuak sortutako Rust sistemaren programazio-lengoaiaren 1.47 bertsioa argitaratu da. Lengoaiak memoriaren segurtasunean oinarritzen da, memoria automatikoki kudeatzea eskaintzen du eta zereginen paralelismo handia lortzeko bitartekoak eskaintzen ditu zabor-biltzaile edo exekuzio-denbora erabili gabe (exekuzio-denbora liburutegi estandarraren hasierako oinarrizko hasierara eta mantentzera murrizten da).

Rust-en memoria-kudeaketa automatikoak akatsak ezabatzen ditu erakusleak manipulatzean eta maila baxuko memoriaren manipulaziotik sortzen diren arazoetatik babesten du, hala nola, memoria-eskualde batera atzitzea askatu ondoren, erakusle nuluen deserreferentziak, buffer gainditzeak, etab. Liburutegiak banatzeko, muntaia ziurtatzeko eta mendekotasunak kudeatzeko, Cargo paketeen kudeatzailea garatzen ari da proiektua. crates.io biltegia liburutegiak ostatatzeko onartzen da.

Berrikuntza nagusiak:

  • Tamaina arbitrarioko arrayetarako ezaugarrien euskarria inplementatu da. Aurretik, balio orokor guztietarako funtzio generikoak definitzeko ezintasunagatik, liburutegi estandarrak ezaugarrien euskarria eskaintzen zuen gehienez 32 elementuko matrizeetarako soilik (tamaina bakoitzeko ezaugarriak estatikoki definitu ziren). Const generikoen funtzionaltasuna sortzeari esker, edozein array-tamainetarako funtzio generikoak definitzea posible izan zen, baina oraindik ez daude hizkuntzaren ezaugarri egonkorretan sartzen, nahiz eta konpilatzailean inplementatu eta gaur egun liburutegi estandarrean erabiltzen diren. edozein tamainatako array motetarako.
    Adibidez, Rust 1.47-n hurrengo eraikuntzak array baten edukia inprimatuko du, nahiz eta aurretik errore bat eragingo lukeen:

fn main() {
izan bedi xs = [0; 34];
println!("{:?}", xs);
}

  • Aztarna laburragoen irteera (backtrace), irteera larrialdi egoeretan. Egoera gehienetan interesgarriak ez diren elementuak, baina irteera nahasten duten eta arazoaren arrazoi nagusietatik arreta kentzen dute, arrastotik kanpo geratzen dira. Aztarna osoa itzultzeko, "RUST_BACKTRACE=full" ingurune-aldagaia erabil dezakezu. Adibidez, kodearentzat

fn main() {
ikara!();
}

Lehen, arrastoa 23 etapatan ateratzen zen, baina orain 3 etapatara murriztuko da, funtsa berehala jabetzeko aukera emanez:

'main' haria izututa zegoen 'izu esplizituan', src/main.rs:2:5
pilatu atzerako ibilbidea:
0: std::panicking::begin_panic
/rustc/d…d75a/library/std/src/panicking.rs:497 helbidean
1: jolastokia::nagusia
helbidean./src/main.rs:2
2: core::ops::function::FnOnce::call_once
/rustc/d…d75a/library/core/src/ops/function.rs:227 helbidean

  • Rustc konpilatzailea LLVM 11 erabiliz eraikitzeko eguneratu da (Rust-ek LLVM erabiltzen du kodea sortzeko backend gisa). Aldi berean, LLVM zaharrekin eraikitzeko gaitasuna mantentzen da, 8. bertsiora arte, baina lehenespenez (rust-lang/llvm-project-en) LLVM 11 erabiltzen da datozenean egunak.
  • Windows plataforman, rustc konpilatzaileak kontrol-fluxuaren osotasunaren egiaztapenak (Control Flow Guard) gaitzeko laguntza eskaintzen du, "-C control-flow-guard" marka erabiliz aktibatuta. Beste plataformetan bandera hau ez da aintzat hartzen oraingoz.
  • APIaren zati berri bat kategoria egonkorrera transferitu da, egonkortutako Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from. , f32:: TAU eta f64::TAU.
  • Metodoetan erabiltzen da "const" atributua, konstanteen ordez edozein testuingurutan erabiltzeko aukera zehazten duena:
    • berria zero ez den zenbaki oso guztietarako;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub eta saturating_mul zenbaki osoetarako;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitspace eta is_ascii_control char eta u8 motetarako.
  • FreeBSDrako, FreeBSD 11.4-ko tresna-kit bat erabiltzen da (FreeBSD 10-k ez du LLVM 11 onartzen).

Handik hartua opennet.ru

Iturria: linux.org.ru

Gehitu iruzkin berria