Rust 1.57 Programming Language Tso tawm

Kev tso tawm ntawm cov kab lus programming Rust 1.57, tsim los ntawm Mozilla qhov project, tab sis tam sim no tsim los ntawm kev txhawb nqa ntawm lub koom haum ywj pheej tsis muaj txiaj ntsig Rust Foundation, tau tshaj tawm. Cov lus hais txog kev nyab xeeb ntawm kev nco, muab kev tswj hwm kev nco tsis siv neeg, thiab muab txoj hauv kev kom ua tiav cov haujlwm ua haujlwm siab tsis tas siv cov khoom siv khib nyiab lossis lub sijhawm ua haujlwm (runtime raug txo qis rau kev pib pib thiab kev saib xyuas ntawm lub tsev qiv ntawv txheem).

Rust txoj kev tswj hwm tsis siv neeg lub cim xeeb txuag tus tsim tawm los ntawm kev ua yuam kev thaum tswj cov taw qhia thiab tiv thaiv cov teeb meem uas tshwm sim vim kev tswj hwm kev nco qis, xws li nkag mus rau thaj chaw nco tom qab nws tau tso tawm, dereferencing null pointers, tsis overruns, thiab lwm yam. Txhawm rau faib cov tsev qiv ntawv, muab kev tsim kho thiab tswj hwm kev vam khom, qhov project tsim tus thawj tswj hwm pob khoom. Lub crates.io repository yog txaus siab rau hosting cov tsev qiv ntawv.

Main innovations:

  • Kev siv cov "panic!" macro tau ruaj khov. nyob rau hauv cov ntsiab lus tsim thaum muab tso ua ke, xws li "const fn" tshaj tawm. Tsis tas li ntawd, ntxiv rau kev siv "panic!" const declarations tso cai siv cov "paub tseeb!" macro. thiab qee cov tsev qiv ntawv txheem APIs. Stabilization tseem tsis tau npog tag nrho cov txheej txheem tsim qauv, yog li hauv nws daim ntawv tam sim no "kev ntshai!" macro tsuas yog siv tau nrog cov hlua zoo li qub (panic!("...")) lossis nrog ib tus nqi sib cuam tshuam "&str" thaum hloov pauv (panic!("{}", a)), uas yuav tsum tau txwv rau kev hloov pauv "{ }" tsis muaj formatting specifiers thiab lwm yam. Nyob rau hauv lub neej yav tom ntej, kev siv ntawm macros hauv cov ntsiab lus tas li yuav nthuav dav, tab sis lub peev xwm ruaj khov twb txaus los ua cov ntawv pov thawj ntawm cov theem sib sau: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = assert!(std::mem::size_of:: () == 8);
  • Tus neeg saib xyuas pob khoom tso cai siv cov ntaub ntawv nrog cov npe tsis raug cai, tsis txwv rau "dev", "tso", "test" thiab "lub rooj ntev zaum". Piv txwv li, txhawm rau ua kom zoo tshaj plaws ntawm theem txuas (LTO) tsuas yog thaum cov khoom sib dhos zaum kawg raug tsim tawm, koj tuaj yeem tsim qhov "tsim" profile hauv Cargo.toml thiab ntxiv "lto = tseeb" chij rau nws. Txawm li cas los xij, thaum txiav txim siab koj tus kheej cov profiles, koj yuav tsum qhia meej qhov profile uas twb muaj lawm kom tau txais txiaj ntsig zoo los ntawm nws. Cov piv txwv hauv qab no tsim ib qho "tsim" profile uas ntxiv rau "tso" profile los ntawm kev suav nrog "lto = tseeb" chij. Lub profile nws tus kheej yog qhib los ntawm kev hu cov khoom thauj nrog "--profile ntau lawm" kev xaiv, thiab cov khoom sib dhos yuav raug muab tso rau hauv "lub hom phiaj / ntau lawm" directory. [profile.production] inherits = "tso" lto = true
  • Kev siv try_reserve rau Vec, String, HashMap, HashSet thiab VecDeque hom tau ruaj khov, uas tso cai rau koj khaws qhov chaw ua ntej rau qee yam ntawm cov ntsiab lus ntawm ib hom ntawv txhawm rau txhawm rau txo qhov zaus ntawm kev faib ua haujlwm nco thiab zam. poob thaum ua haujlwm vim tsis nco.
  • Nws raug tso cai kom qhia meej macros nrog curly braces hauv kab lus xws li "m!{.. }.method()" thiab "m!{.. }?".
  • Kev ua tiav ntawm Cov Ntaub Ntawv::read_to_end thiab read_to_string functions tau ua kom zoo dua.
  • Kev them nyiaj yug rau Unicode specification tau hloov kho rau version 14.0.
  • Nthuav cov naj npawb ntawm cov dej num uas cim "#[must_use]" los tawm lus ceeb toom yog tias tus nqi rov qab tsis quav ntsej, uas pab txheeb xyuas qhov yuam kev tshwm sim los ntawm kev xav tias muaj nuj nqi yuav hloov qhov tseem ceeb dua li rov qab tus nqi tshiab.
  • Ntxiv qhov kev sim backend rau cov cim tsim siv libgccjit.
  • Ib feem tshiab ntawm API tau raug hloov mus rau qeb ntawm qhov ruaj khov, suav nrog cov txheej txheem thiab kev siv ntawm cov yam ntxwv tau ruaj khov:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • Txoj hlua::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Hais kom ua::get_program
    • Hais kom ua::get_args
    • Command::get_envs
    • Hais kom ua::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Qhov "const" tus cwj pwm, uas txiav txim siab seb nws puas tuaj yeem siv rau hauv ib qho ntsiab lus tsis yog qhov tsis tu ncua, yog siv rau hauv kev ua haujlwm hint::unreachable_unchecked.
  • Qhov thib peb theem ntawm kev txhawb nqa tau siv rau armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi thiab armv7a-kmc- solid_asp3-eabihf platforms. Qib thib peb suav nrog kev txhawb nqa yooj yim, tab sis tsis muaj kev sim automated, tshaj tawm kev tsim kho, lossis tshawb xyuas seb qhov chaws puas tuaj yeem tsim.

Tau qhov twg los: opennet.ru

Ntxiv ib saib