Rust 1.47 programozási nyelv kiadás

Megjelent a Mozilla projekt által alapított Rust rendszerprogramozási nyelv 1.47-es kiadása. A nyelv a memóriabiztonságra összpontosít, automatikus memóriakezelést biztosít, és biztosítja a magas szintű párhuzamosság elérését szemétgyűjtő vagy futási idő nélkül (a futásidő a szabványos könyvtár alapvető inicializálására és karbantartására csökken).

A Rust automatikus memóriakezelése kiküszöböli a mutatók manipulálása során fellépő hibákat, és védelmet nyújt az alacsony szintű memóriamanipulációból eredő problémák ellen, mint például a memóriaterület felszabadítása utáni hozzáférés, nulla mutató hivatkozások, puffertúllépések stb. A programkönyvtárak terjesztéséhez, az összeállítás biztosításához és a függőségek kezeléséhez a projekt a Cargo csomagkezelőt fejleszti. A crates.io adattár támogatja a könyvtárak tárolását.

Főbb újítások:

  • Tetszőleges méretű tömbök jellemzőinek támogatása. Korábban, mivel nem lehetett általános függvényeket definiálni az összes egész értékhez, a szabványos könyvtár csak a legfeljebb 32 elem méretű tömbökhöz biztosított beépített tulajdonságtámogatást (az egyes méretek jellemzőit statikusan határozták meg). A const generics funkcionalitás létrehozásának köszönhetően lehetővé vált bármilyen tömbmérethez általános függvények definiálása, de ezek még nem szerepelnek a nyelv stabil szolgáltatásai között, bár a fordítóban implementálva vannak, és már a szabványos könyvtárban is használatosak. bármilyen méretű tömbtípushoz.
    Például a következő konstrukció a Rust 1.47-ben egy tömb tartalmát fogja kiírni, bár korábban ez hibát eredményezett volna:

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

  • Rövidebb nyomok (backtrace) kimenete, kimenet vészhelyzetekben. Azok az elemek, amelyek a legtöbb helyzetben nem érdekesek, de összezavarják a kimenetet, és elvonják a figyelmet a probléma elsődleges okairól, ki vannak zárva a nyomozásból. Teljes nyomkövetés visszaadásához használhatja a "RUST_BACKTRACE=full" környezeti változót. Például a kódhoz

fn main() {
pánik!();
}

Korábban a nyomkövetés 23 szakaszban volt kiadva, de most 3 fokozatra csökken, lehetővé téve, hogy azonnal megértse a lényeget:

a 'main' szál pánikba esett az 'explicit pánik' miatt, src/main.rs:2:5
verem visszakövetése:
0: std::pánik::begin_panic
itt: /rustc/d…d75a/library/std/src/panicking.rs:497
1: játszótér::fő
a ./src/main.rs:2 címen
2: core::ops::function::FnOnce::call_once
itt: /rustc/d…d75a/library/core/src/ops/function.rs:227

  • A rustc fordító frissítve lett, hogy az LLVM 11 használatával készüljön (a Rust az LLVM-et használja háttérként a kódgeneráláshoz). Ugyanakkor megmarad a régi LLVM-mel való építés lehetősége a 8-as verzióig, de alapértelmezés szerint (rust-lang/llvm-projectben) most az LLVM 11-et használják. Az LLVM 11 megjelenése a közeljövőben várható napok.
  • A Windows platformon a rustc fordító támogatja a vezérlési folyamat integritásának ellenőrzését (Control Flow Guard), amely a „-C control-flow-guard” jelzővel aktiválható. Más platformokon ezt a jelzőt egyelőre figyelmen kívül hagyják.
  • Az API új része átkerült a stabil kategóriába, beleértve a stabilizált Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU és f64::TAU.
  • A „const” attribútum, amely meghatározza annak lehetőségét, hogy konstansok helyett tetszőleges környezetben használható legyen, a metódusokban használatos:
    • új minden nullától eltérő egész számra;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub és saturating_mul minden egész számra;
    • 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_whitespace és is_ascii és_ucontrol8 típusok.
  • A FreeBSD esetében a FreeBSD 11.4 eszközkészletét használjuk (a FreeBSD 10 nem támogatja az LLVM 11-et).

-Tól / -től opennet.ru

Forrás: linux.org.ru

Hozzászólás