Puo ea Rust programming 1.45 tokollo

e hatisitsoeng ho lokolla 1.45 ea puo ea lenaneo la tsamaiso mafome, e thehiloeng ke morero oa Mozilla. Puo e shebana le polokeho ea mohopolo, e fana ka taolo ea memori ea othomathike, hape e fana ka lisebelisoa tsa ho fihlela ts'ebetso e phahameng ea ts'ebetso ntle le ho sebelisa pokello ea lithōle le nako ea nako.

Taolo ea memori ea othomathike ea Rust e felisa liphoso ha e tsamaisa lintlha le ho sireletsa khahlanong le mathata a bakoang ke ho qhekella ha memori ea boemo bo tlase, joalo ka ho fihlella sebaka sa memori kamora hore e lokolloe, li-null pointer dereferences, buffer overruns, jj. Motsamaisi oa liphutheloana o ntse a ntlafatsoa ho aba lilaebrari, ho netefatsa ho bokelloa le ho laola litšepe ka morero. thepa, ho u lumella ho fumana lilaebrari tse hlokahalang bakeng sa lenaneo ka ho tobetsa hanngoe feela. Sebaka sa polokelo se tšehetsoa ho amohela lilaebrari crates.io.

ka sehloohong boiqapelo:

  • E felisitsoe ka nako e telele sekodi ha o etsa diphetoho dipakeng tsa dinomoro tse felletseng le dinomoro tse phaphametseng. Kaha moqapi oa Rust o sebelisa LLVM joalo ka mokokotlo, ts'ebetso ea phetoho ea mofuta o entsoe ka litaelo tsa khoutu tsa LLVM tsa mahareng joalo ka. fptoui, tse nang le tšobotsi e le 'ngoe ea bohlokoa - boitšoaro bo sa hlalosoang haeba boleng ba sephetho bo sa kenelle mofuteng oa sepheo. Ka mohlala, ha u fetola boleng ba float 300 ka mofuta oa f32 ho ea mofuta o feletseng oa u8, sephetho ha se tsejoe hantle 'me se ka fapana ho ea ka mekhoa e fapaneng. Bothata ke hore tšobotsi ena e hlaha ka khoutu e sa tšoauoang e le "e sa bolokehang".

    Ho tloha ka Rust 1.45, boitšoaro ba boholo ba mofuta oa phallo bo laoloa ka thata, 'me ts'ebetso ea "joalokaha" e hlahloba hore na e phalla hakae' me e qobella boleng hore bo fetohele boleng bo phahameng kapa bo fokolang ba mofuta o lebisitsoeng (mohlala o ka holimo, boleng ba 300 e ne e tla fetoleloa ho 255). Ho thibela licheke tse joalo, ho fanoa ka mehala e meng ea API "{f64, f32}::to_int_unchecked", e sebetsang ka mokhoa o sa bolokehang.

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

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

    let x: f32 = 1.0;
    tlohela y: u8 = e sa bolokehang {x.to_int_unchecked()};

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

  • Sebelisa botsitso mekhoa ea macroslipolelo tse kang mosebetsi, li-template le lipolelo. Nakong e fetileng, li-macros tse joalo li ne li ke ke tsa bitsoa hohle, empa feela likarolong tse itseng tsa khoutu (e le mohala o arohaneng, o sa kopane le khoutu e 'ngoe). Ho atolosa tsela eo li-macro li ka bitsoang ka eona, tse tšoanang le mesebetsi, e ne e le e 'ngoe ea litlhoko tsa ho etsa hore moralo oa marang-rang o sebetse. Lata ka litokollo tse tsitsitseng tsa Rust. Nakong e fetileng, ho finyella phetoho e eketsehileng ea ho hlalosa ba sebetsanang le Rocket ho ne ho hlokahala ho nolofalletsa karolo ea liteko e bitsoang "proc_macro_hygiene", e sa fumaneheng ka mefuta e tsitsitseng ea Rust. Ts'ebetso ena e se e hahiloe ho litokollo tse tsitsitseng tsa puo.
  • E lumelletsoe ho sebelisa mefuta e nang le mofuta oa "char" ho pheta-pheta boleng (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    bakeng sa ch ho 'a'..='z' {
    hatisa!("{}", ch);
    }
    println!(); // E tla hatisa "abcdefghijklmnopqrstuvwxyz"

  • Karolo e ncha ea API e fetiselitsoe sehlopheng se tsitsitseng, ho kenyelletsa le ho tsitsisoa
    Arc::as_ptr,
    BTreeMap:: tlosa_keno,
    Rc::as_ptr,
    rc::E fokola::as_ptr,
    rc::E fokola::ho tloha_e tala,
    rc::E fokola::e_raw,
    str::strip_prefix,
    str::sehlopha_sehlopha,
    sync::E fokola::as_ptr,
    sync::E fokola::ho tloha_e tala,
    sync::E fokola::ka har'a_e tala,
    Char::UNICODE_VERSION,
    Span::resolved_at,
    Span::located_at,
    Span::mixed_site,
    unix::ts'ebetso::CommandExt::arg0.

  • Rustc compiler e ekelitse ts'ehetso bakeng sa ho feta likarolo tse fapaneng tsa sethala se shebiloeng ka ho sebelisa folakha ea "target-feature", mohlala, "-C target-feature=+avx2+fma". Lifolakha tse ncha le tsona li kentsoe:
    "force-unwind-tables" ho hlahisa litafole tsa mehala, ho sa tsotelehe leano la ho sebetsana le kotsi; "embed-bitcode" ho laola hore na bitcode ea LLVM e kenyelelitsoe ho li-rlibs tse hlahisitsoeng. Folakha ea "embed-bitcode" e lumelloa ka ho sa feleng ho Cargo ho ntlafatsa nako ea kaho le tšebeliso ea sebaka sa disk.

  • Karolo ea boraro ea tšehetso e fanoe bakeng sa sethala sa mipsel-sony-psp le thumbv7a-uwp-windows-msvc. Boemo ba boraro bo kenyelletsa tšehetso ea mantlha, empa ntle le tlhahlobo e ikemetseng le phatlalatso ea meaho ea semmuso.

Ho phaella moo, e ka hlokomeloa pale mabapi le ho theha tse bonolo ka ho fetisisa ditiriso ka puo ea Rust, ho qala ho sebelisa bootloader ea sistimi le ho itokisetsa ho itjarisa ho e-na le sistimi e sebetsang.
Sengoloa ke sa pele letotong le ikemiselitseng ho bonts'a mekhoa e batloang ho mananeo a boemo bo tlase le nts'etsopele ea OS.

Source: opennet.ru

Eketsa ka tlhaloso