Rust 1.61 Programming Language Tso tawm

Kev tso tawm ntawm Rust 1.61 cov lus qhia dav dav, 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 qhia txog kev nyab xeeb ntawm kev nco thiab muab txoj hauv kev kom ua tiav txoj haujlwm siab sib luag thaum tsis txhob siv cov khoom siv khib nyiab thiab lub sijhawm ua haujlwm (runtime raug txo qis rau kev pib pib thiab kev saib xyuas ntawm lub tsev qiv ntawv txheem).

Rust lub cim xeeb tuav txoj kev cawm tus tsim tawm los ntawm kev ua yuam kev thaum tswj cov taw qhia thiab tiv thaiv cov teeb meem uas tshwm sim los ntawm kev ua haujlwm qis 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.

Kev nyab xeeb nco yog muab rau hauv Rust ntawm lub sijhawm sau los ntawm kev siv tshuaj xyuas, ua raws li cov tswv cuab ntawm cov khoom, khaws cov khoom siv lub neej (scopes), thiab ntsuas qhov tseeb ntawm kev nkag mus rau lub cim xeeb thaum lub sijhawm ua tiav cov lej. Rust kuj tseem muab kev tiv thaiv tus lej ntau dhau, yuav tsum muaj qhov sib txawv kom pib ua ntej siv, ua haujlwm yuam kev zoo dua hauv cov tsev qiv ntawv tus qauv, siv lub tswv yim ntawm cov ntaub ntawv tsis hloov pauv thiab hloov pauv los ntawm lub neej ntawd, thiab muaj kev ntaus ntawv zoo li qub kom txo qis qhov yuam kev.

Main innovations:

  • Nws tuaj yeem txhais koj tus kheej cov lej xa rov qab los ntawm lub luag haujlwm tseem ceeb. Keeb kwm, Rust lub luag haujlwm tseem ceeb tsuas tuaj yeem rov qab hom "()" (unit), uas ib txwm qhia qhov kev tawm mus tau zoo tshwj tsis yog tus tsim tawm qhia meej meej hu ua " txheej txheem:: tawm (code)" ua haujlwm. Hauv Rust 1.26, siv qhov tsis ruaj khov Termination zoo nyob rau hauv lub luag haujlwm tseem ceeb, nws muaj peev xwm rov qab tau cov txiaj ntsig "Ok" thiab "Err", sib raug rau EXIT_SUCCESS thiab EXIT_FAILURE cov lej hauv C cov kev pabcuam. Hauv Rust 1.61, Qhov Kev Txiav Txim Siab tau ua kom ruaj khov, thiab ib hom ExitCode cais tau raug npaj los sawv cev rau ib qho kev xa rov qab code, uas paub daws teeb meem ntawm lub platform tshwj xeeb xa rov qab hom los ntawm kev muab ob qho tib si predefined SUCCESS thiab FAILURE, thiab Los ntawm txoj kev xa rov qab arbitrary rov qab code. siv std::process::ExitCode; fn main() -> ExitCode { yog !check_foo() { rov qab ExitCode::from(8); } ExitCode::SUCCESS }
  • Cov peev xwm ntxiv ntawm cov haujlwm tau hais tseg siv cov lus "const fn" tau ruaj khov, uas tuaj yeem raug hu tsis yog tsuas yog ua haujlwm nkaus xwb, tab sis kuj siv rau hauv ib qho ntsiab lus tsis yog qhov qub. Cov haujlwm no suav nrog lub sijhawm sau, tsis yog lub sijhawm ua haujlwm, yog li lawv raug rau qee yam kev txwv, xws li kev muaj peev xwm nyeem tau los ntawm qhov tsis tu ncua. Hauv cov ntawv tshiab, kev ua haujlwm yooj yim nrog cov taw qhia ua haujlwm tau tso cai rau hauv kev ua haujlwm const (tsim, dhau thiab casting pointers raug tso cai, tab sis tsis hu ua haujlwm los ntawm tus taw tes); qhov zoo ciam teb rau generic parameters ntawm const functions xws li T: Luam; dynamically dispatchable traits (dyn Trait); impl Cov yam ntxwv rau kev ua haujlwm sib cav thiab cov nqi rov qab.
  • Cov kwj dej tuav Stdin, Stdout thiab Stderr hauv std::io tam sim no muaj lub neej zoo li qub ("static") thaum xauv, tso cai tsim xws li "tso tawm = std:: io:: stdout().lock();" nrog tau txais tus kov thiab teeb tsa lub xauv hauv ib qho kev qhia.
  • 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:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Sau rau Cursor
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Termination
    • std::xov::JoinHandle::is_finished
  • Tus cwj pwm "const", uas txiav txim siab qhov muaj peev xwm ntawm kev siv nws nyob rau hauv ib qho ntsiab lus es tsis txhob tas mus li, yog siv rau hauv kev ua haujlwm:
    • ::offset thiab ::offset
    • ::wrapping_offset thiab ::wrapping_offset
    • ::add and ::add
    • ::sub and ::sub
    • ::wrapping_add and ::wrapping_add
    • ::wrapping_sub and ::wrapping_sub
    • ::as_mut_ptr
    • ::as_ptr_range
    • ::as_mut_ptr_range

Tsis tas li ntawd, koj tuaj yeem nco ntsoov cov lus "Xaum: Ib qho tseem ceeb Retrospective" nrog cov ntsiab lus ntawm kev xav ntawm cov lus Rust tom qab sau 100 txhiab kab ntawm cov lej hauv nws thaum lub sijhawm txhim kho Xous microkernel operating system siv hauv firmware. Qhov tsis zoo muaj xws li kev nkag siab tsis yooj yim, kev ua tsis tiav thiab kev txhim kho ntawm cov lus txuas ntxiv, tsis muaj kev rov ua dua, cov teeb meem raug cuam tshuam nrog kev ntseeg siab hauv Crates.io, thiab yuav tsum muaj qee qhov kev qhuab qhia los sau cov cai ruaj ntseg. Cov yam ntxwv uas siab tshaj qhov kev cia siab suav nrog cov cuab yeej rau kev rov kho cov cai thiab rov ua haujlwm "hacks" ntxiv thaum lub sij hawm prototyping sai.

Tau qhov twg los: opennet.ru

Ntxiv ib saib