Rust 1.47 programozási nyelv kiadás

közzétett A rendszer programozási nyelvének 1.47-es kiadása Rozsda, amelyet a Mozilla projekt alapított. A nyelv a memória biztonságára összpontosít, automatikus memóriakezelést biztosít, és lehetőséget biztosít a magas szintű párhuzamosság elérésére használat nélkül szemetes и futásidejű (a futásidő a szabványos könyvtár alapvető inicializálására és karbantartására vonatkozik).

A Rust automatikus memóriakezelése megóvja a fejlesztőt a mutatók manipulálása során előforduló hibáktól, és védelmet nyújt az alacsony szintű memóriakezelés miatt felmerülő problémák ellen, mint például a memóriaterület elérése annak felszabadítása után, a nulla mutatók hivatkozásának megszüntetése, a 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 csomagkezelőt fejleszt ki Szállítmány. Egy tárhely támogatott a könyvtárak fogadására ládák.io.

A főbb innovációk:

  • Bevezetett támogatás típusokhoz tömbök bármely méret. 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 konstans generikusok („const generics”) funkcionalitásának 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 stabil nyelvi jellemzők között, bár a fordítóban implementálva vannak, és Most magában foglal a szabványos könyvtárban bármilyen méretű tömbtulajdonsághoz.

    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ést 23 fokozatban adták ki, de most ez lesz a redukálva
    3 lépés, amely lehetővé teszi, 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 a segítségével LLVM 11 (Rozsda felhasznál LLVM háttérként a számára kódgenerálás). Ugyanakkor megmarad a régebbi LLVM-ekkel való építés lehetősége a 8-as verzióig, de alapértelmezés szerint (a rust-lang/llvm-projekt) jelenleg az LLVM 11-et használja. Az LLVM 11 megjelenése a következő napokban várható.
  • 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áltat is
    Ident::new_raw,
    Tartomány::üres,
    RangeInclusive::is_empty,
    Eredmény::as_deref,
    Eredmény::as_deref_mut,
    Vec::szivárgás,
    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.
  • FreeBSD-hez magában foglal eszközkészlet a FreeBSD 11.4-ből (a FreeBSD 10 nem támogatja az LLVM 11-et).

Forrás: opennet.ru

Hozzászólás