Rust 1.45 Programming Language Release

gipatik buhian ang 1.45 sa sistema sa programming language taya, gitukod sa proyekto sa Mozilla. Ang lengguwahe nagtutok sa kaluwasan sa panumduman, naghatag og awtomatik nga pagdumala sa panumduman, ug naghatag og mga himan alang sa pagkab-ot sa taas nga paralelismo sa buluhaton nga walay paggamit ug tigkolekta sa basura ug runtime.

Ang awtomatik nga pagdumala sa panumduman sa Rust nagwagtang sa mga sayup kung nagmaniobra sa mga pointer ug nanalipod batok sa mga problema nga naggikan sa ubos nga lebel sa pagmaniobra sa panumduman, sama sa pag-access sa usa ka rehiyon sa panumduman human kini gibuhian, null pointer dereferences, buffer overruns, ug uban pa. Usa ka tagdumala sa pakete ang gipalambo aron sa pag-apod-apod sa mga librarya, pagsiguro sa asembliya ug pagdumala sa mga dependency sa proyekto. Cargo, nga nagtugot kanimo nga makuha ang mga librarya nga gikinahanglan alang sa programa sa usa ka pag-klik. Gisuportahan ang usa ka repository sa pag-host sa mga librarya crates.io.

nag-unang mga inobasyon:

  • Giwagtang ang dugay na sayup sa paghimo sa mga pagkakabig tali sa mga integer ug floating point nga mga numero. Tungod kay ang Rust compiler naggamit sa LLVM isip backend, ang type conversion operations gihimo pinaagi sa LLVM intermediate code instructions sama sa ftoui, nga adunay usa ka hinungdanon nga bahin - dili matino nga pamatasan kung ang sangputanan nga kantidad dili mohaum sa target nga tipo. Pananglitan, kung gi-convert ang float value 300 nga adunay type f32 ngadto sa integer type u8, ang resulta dili matag-an ug mahimong magkalainlain sa lainlaing mga sistema. Ang problema mao nga kini nga bahin makita sa code nga wala gimarkahan nga "dili luwas".

    Sa Rust 1.45, ang kinaiya sa type size overflow hugot nga gi-regulate, ug ang "as" conversion operation nagsusi sa pag-awas ug nagpugos sa bili nga makabig ngadto sa maximum o minimum nga bili sa target type (alang sa panig-ingnan sa ibabaw, usa ka bili sa Ang 300 makombertir sa 255). Aron ma-disable ang ingon nga mga pagsusi, ang mga dugang nga tawag sa API nga "{f64, f32}::to_int_unchecked" gihatag, naglihok sa dili luwas nga mode.

    fn cast(x: f32) -> u8 {
    x ug u8
    }

    fn main() {
    let too_big = 300.0;
    let too_small = -100.0;
    let nan = f32::NAN;

    himoa nga x: f32 = 1.0;
    let y: u8 = dili luwas {x.to_int_unchecked()};

    println!("too_big_casted = {}", cast(too_big)); // output 255
    println!("too_small_casted = {}", cast(too_small)); // output 0
    println!("not_a_number_casted = {}", cast(nan)); // output 0
    }

  • Gamit ug stabilized macros nga pamaagisama sa function nga mga ekspresyon, templates, ug mga pahayag. Kaniadto, ang ingon nga mga macro dili mahimong tawgon bisan asa, apan sa pipila lamang nga mga bahin sa code (ingon usa ka bulag nga tawag, dili konektado sa ubang mga code). Ang pagpalapad sa paagi nga matawag ang mga macro, susama sa mga gimbuhaton, usa sa mga kinahanglanon aron mahimo ang balangkas sa web. rocket sa stable nga pagpagawas sa Rust. Kaniadto, ang pagkab-ot sa dugang nga pagka-flexible sa pag-ila sa mga tigdumala sa Rocket nanginahanglan nga makahimo sa usa ka eksperimento nga bahin nga gitawag nga "proc_macro_hygiene", nga wala magamit sa mga stable nga bersyon sa Rust. Kini nga pagpaandar nahimo na karon sa mga lig-on nga pagpagawas sa pinulongan.
  • Gitugotan sa paggamit sa mga han-ay nga adunay tipo nga "char" aron masubli ang mga kantidad sa range (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    para sa ch sa 'a'..='z' {
    print!("{}", ch);
    }
    println!(); // I-print ang "abcdefghijklmnopqrstuvwxyz"

  • Usa ka bag-ong bahin sa mga API ang gibalhin sa stable nga kategorya, lakip ang gi-stabilize
    Arc::as_ptr,
    BtreeMap::remove_entry,
    Rc::as_ptr,
    rc::Maluya::as_ptr,
    rc::Maluya::gikan_hilaw,
    rc::Weak::into_raw,
    str::strip_prefix,
    str::strip_suffix,
    sync:: Huyang:: as_ptr,
    sync:: Huyang:: gikan sa_raw,
    sync:: Weak:: into_raw,
    char::UNICODE_VERSION,
    Span::resolved_at,
    Span::located_at,
    Span::mixed_site,
    unix::proseso::CommandExt::arg0.

  • Ang rustc compiler midugang og suporta alang sa pag-override sa lain-laing mga feature sa target platform gamit ang "target-feature" nga bandila, pananglitan, "-C target-feature=+avx2,+fma". Ang bag-ong mga bandila gidugang usab:
    "force-unwind-tables" aron makamugna ug unwind call tables, bisan unsa pa ang estratehiya sa pagdumala sa crash; "embed-bitcode" aron makontrol kung ang LLVM bitcode naapil ba sa mga namugna nga rlib. Ang "embed-bitcode" nga bandera gi-enable pinaagi sa default sa Cargo aron ma-optimize ang oras sa pagtukod ug konsumo sa espasyo sa disk.

  • Ang ikatulo nga lebel sa suporta gihatag alang sa mipsel-sony-psp ug thumbv7a-uwp-windows-msvc nga mga plataporma. Ang ikatulo nga lebel naglakip sa batakang suporta, apan walay automated nga pagsulay ug pagmantala sa mga opisyal nga pagtukod.

Dugang pa, kini mahimong matikdan ang istorya mahitungod sa paghimo sa pinakasimple apps sa Rust nga pinulongan, sugod sa paggamit sa system bootloader ug andam sa kaugalingon nga loading imbes sa operating system.
Ang artikulo mao ang una sa usa ka serye nga gipahinungod sa pagpakita sa mga teknik nga gikinahanglan sa ubos nga lebel nga programming ug OS development.

Source: opennet.ru

Idugang sa usa ka comment