Rust 1.45 Programming Language Tso tawm

luam tawm tso tawm 1.45 ntawm qhov system programming lus xeb, nrhiav tau los ntawm Mozilla qhov project. Cov lus qhia txog kev nyab xeeb ntawm kev nco, muab kev tswj hwm kev nco tsis siv neeg, thiab muab cov cuab yeej rau kev ua tiav cov haujlwm siab sib luag yam tsis tas siv cov khoom khib nyiab thiab Runtime.

Rust txoj kev tswj hwm tsis siv neeg nco tshem tawm qhov yuam kev thaum tswj cov taw qhia thiab tiv thaiv cov teeb meem tshwm sim los ntawm kev tswj hwm lub cim xeeb qis, xws li nkag mus rau thaj chaw nco tom qab nws tau tso tawm, tsis muaj qhov taw qhia dereferences, tsis muaj overruns, thiab lwm yam. Tus neeg saib xyuas pob tau tsim los faib cov tsev qiv ntawv, xyuas kom muaj kev sib dhos thiab tswj hwm kev vam meej los ntawm qhov project. cargo, tso cai rau koj kom tau txais cov tsev qiv ntawv xav tau rau qhov kev pab cuam hauv ib nias. Lub chaw khaws cia tau txais kev txhawb nqa rau cov tsev qiv ntawv crates.io.

ntsiab kev tsim kho tshiab:

  • Tshem tawm mus ntev qhov tsis haum thaum ua kev hloov pauv ntawm cov lej thiab cov lej ntab ntab. Txij li thaum Rust compiler siv LLVM ua tus backend, hom kev hloov pauv tau ua los ntawm LLVM cov lus qhia nruab nrab ntawm cov lej xws li fptoui ua, uas muaj ib qho tseem ceeb feature - undefined tus cwj pwm yog hais tias qhov tshwm sim tus nqi tsis haum rau hom phiaj. Piv txwv li, thaum hloov tus nqi ntab 300 nrog hom f32 rau integer type u8, qhov tshwm sim tsis tuaj yeem pom thiab yuav txawv ntawm ntau lub tshuab. Qhov teeb meem yog qhov no feature tshwm nyob rau hauv code uas tsis cim raws li "tsis zoo".

    Raws li Rust 1.45, tus cwj pwm ntawm hom loj overflow yog nruj me ntsis tswj, thiab "raws li" hloov dua siab tshiab ua hauj lwm checks rau overflow thiab quab yuam tus nqi hloov mus rau qhov siab tshaj plaws los yog yam tsawg kawg nkaus tus nqi ntawm lub hom phiaj (piv txwv li saum toj no, tus nqi ntawm 300 yuav hloov mus rau 255). Txhawm rau lov tes taw cov tshev no, ntxiv API hu β€œ{f64, f32}::to_int_unchecked” tau muab, ua haujlwm hauv hom tsis zoo.

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

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

    ua x:f32 = 1.0;
    cia y: u8 = unsafe {x.to_int_unchecked() };

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

  • Siv stabilized txheej txheem macromuaj nuj nqi zoo li kab lus, qauv, thiab nqe lus. Yav dhau los, xws li macro tsis tuaj yeem raug hu mus rau txhua qhov chaw, tab sis tsuas yog hauv qee qhov ntawm cov lej (raws li kev hu xov tooj sib cais, tsis cuam tshuam nrog lwm cov lej). Kev nthuav dav txoj kev macros tuaj yeem raug hu, zoo ib yam li cov haujlwm, yog ib qho ntawm cov kev xav tau los ua kom lub vev xaib ua haujlwm foob ​​pob ua ntxaij nyob rau hauv ruaj khov tso tawm ntawm Rust. Yav dhau los, ua tiav qhov kev hloov pauv ntxiv hauv kev txhais cov neeg ua haujlwm hauv Rocket yuav tsum ua kom muaj kev sim ua haujlwm hu ua "proc_macro_hygiene", uas tsis muaj nyob rau hauv cov qauv ruaj khov ntawm Rust. Qhov no functionality yog tam sim no ua rau hauv ruaj khov tso tawm ntawm cov lus.
  • Tso cai siv ntau yam nrog hom "char" rau iterate ntau qhov tseem ceeb (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    rau ch hauv 'a'..='z' {
    print!("{}", ch);
    }
    println!(); // Yuav luam tawm "abcdefghijklmnopqrstuvwxyz"

  • Ib feem tshiab ntawm APIs tau raug xa mus rau qeb ruaj khov, suav nrog kev ruaj khov
    Arc::as_ptr,
    BTreeMap ::remove_entry,
    Rc::as_ptr,
    rc::Weak::as_ptr,
    rc::Weak::from_raw,
    rc::Weak::into_raw,
    str::strip_prefix,
    str::strip_suffix,
    sync::Weak::as_ptr,
    sync::Weak::from_raw,
    sync::Weak::into_raw,
    char::UNICODE_VERSION,
    Span::resolved_at,
    Span::located_at,
    Span::mixed_site,
    unix::process::CommandExt::arg0.

  • Lub rustc compiler tau ntxiv kev txhawb nqa rau overriding ntau lub hom phiaj platform nta siv tus chij "target-feature", piv txwv li, "-C target-feature=+avx2,+fma". Cov chij tshiab kuj tau ntxiv:
    "force-unwind-tables" los tsim cov rooj sib tham hu xov tooj, tsis hais txog kev sib tsoo lub tswv yim; "embed-bitcode" los tswj seb LLVM bitcode puas suav nrog hauv rlibs tsim. Tus chij "embed-bitcode" tau qhib los ntawm lub neej ntawd hauv Cargo los txhim kho lub sijhawm tsim thiab siv qhov chaw disk.

  • Ib qib thib peb ntawm kev txhawb nqa tau muab rau mipsel-sony-psp thiab thumbv7a-uwp-windows-msvc platforms. Qib thib peb suav nrog kev txhawb nqa yooj yim, tab sis tsis muaj kev sim ntsuas thiab tshaj tawm cov kev tsim tawm.

Tsis tas li ntawd, nws tuaj yeem raug sau tseg dab neeg txog kev tsim qhov yooj yim tshaj plaws apps nyob rau hauv cov lus Rust, pib siv lub kaw lus bootloader thiab npaj rau nws tus kheej thauj khoom es tsis txhob ntawm lub operating system.
Cov kab lus yog thawj zaug hauv ib qho kev mob siab rau ua kom pom cov tswv yim uas xav tau hauv kev ua haujlwm qis thiab kev txhim kho OS.

Tau qhov twg los: opennet.ru

Ntxiv ib saib