Rust 1.58 Programming Language Tso tawm

Kev tso tawm ntawm cov hom phiaj dav dav ntawm cov lus programming Rust 1.58, tsim los ntawm Mozilla 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:

  • Nyob rau hauv kab formatting blocks, ntxiv rau yav dhau los muaj peev xwm los hloov cov hloov pauv tau hais meej meej tom qab kab los ntawm tus lej thiab lub npe, muaj peev xwm hloov cov cim tsis txaus ntseeg los ntawm kev ntxiv cov lus "{identifier}" rau kab yog siv. Piv txwv li: // yav dhau los txhawb kev tsim kho: println!("Nyob zoo, {}!", get_person()); println!("Nyob zoo, {0}!", get_person()); println!("Nyob zoo, {person}!", tus neeg = get_person()); // tam sim no koj tuaj yeem teev cia tus neeg = get_person(); println!("Nyob zoo, {neeg}!");

    Cov cim qhia kuj tuaj yeem teev ncaj qha rau hauv cov kev xaiv xaiv. let (dav, precision) = get_format(); rau (npe, qhab nia) hauv get_scores() { println!("{name}: {score:width$.precision$}"); }

    Kev hloov pauv tshiab ua haujlwm hauv txhua qhov macro uas txhawb txoj hlua txhais lus, tshwj tsis yog "kev ceeb ntshai!" nyob rau hauv 2015 thiab 2018 versions ntawm Rust lus, nyob rau hauv uas ceeb!("{ident}") raug kho raws li ib tug tsis tu ncua txoj hlua (hauv Rust 2021 qhov kev hloov ua haujlwm).

  • Tus cwj pwm ntawm std:: txheej txheem:: Cov qauv lus txib ntawm lub Windows platform tau hloov pauv kom thaum ua tiav cov lus txib, vim li cas kev nyab xeeb, nws tsis nrhiav cov ntaub ntawv ua tiav hauv cov npe tam sim no. Cov npe tam sim no raug cais tawm vim tias nws tuaj yeem siv los ua cov lej tsis zoo yog tias cov kev pab cuam khiav hauv cov npe tsis ntseeg (CVE-2021-3013). Tus tshiab executable nrhiav kom tau logic yuav nrhiav tau cov Rust directory, daim ntawv teev npe daim ntawv teev npe, lub qhov rais system directory, thiab cov directory teev nyob rau hauv lub PATH ib puag ncig kuj sib txawv.
  • Cov tsev qiv ntawv tus qauv tau nthuav dav cov haujlwm uas cim "#[must_use]" los ceeb toom yog tias tus nqi rov qab tsis quav ntsej, uas pab txheeb xyuas qhov ua yuam kev los ntawm kev xav tias muaj nuj nqi yuav hloov qhov tseem ceeb dua li rov qab tus nqi tshiab.
  • 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:
    • Metadata::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Kev xaiv::unwrap_unchecked
    • Cov txiaj ntsig::unwrap_unchecked
    • Cov txiaj ntsig::unwrap_err_unchecked
  • 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:
    • Duration::new
    • Duration:: checked_add
    • Duration:: saturating_add
    • Duration:: checked_sub
    • Duration::saturating_sub
    • Duration:: checked_mul
    • Duration::saturating_mul
    • Duration:: checked_div
  • Tso cai dereferencing ntawm "*const T" pointers hauv "const" cov ntsiab lus.
  • Nyob rau hauv lub Cargo pob manager, rust_version teb tau ntxiv rau pob metadata, thiab cov kev xaiv "--message-format" tau ntxiv rau "cargo install" hais kom ua.
  • Lub compiler siv kev txhawb nqa rau CFI (Control Flow Integrity) kev tiv thaiv mechanism, uas ntxiv cov kev kuaj ua ntej txhua qhov kev hu tsis ncaj los kuaj xyuas qee cov qauv ntawm tus cwj pwm tsis raug cai uas tuaj yeem ua rau muaj kev ua txhaum ntawm kev ua txhaum cai (tswj ntws) raws li qhov tshwm sim ntawm qhov siv cov exploits uas hloov pointers khaws cia nyob rau hauv lub cim xeeb ntawm functions.
  • Lub compiler tau ntxiv kev txhawb nqa rau versions 5 thiab 6 ntawm LLVM kev sib piv cov qauv, siv los ntsuas cov lej them nyiaj thaum kuaj.
  • Nyob rau hauv lub compiler, qhov yuav tsum tau rau qhov tsawg kawg nkaus version ntawm LLVM raug tsa mus rau LLVM 12.
  • Qhov thib peb theem ntawm kev txhawb nqa rau x86_64-tsis paub-tsis muaj lub platform tau ua tiav. 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.

Tsis tas li ntawd, peb tuaj yeem sau tseg cov ntawv tshaj tawm los ntawm Microsoft ntawm kev tso tawm Rust rau Windows 0.30 cov tsev qiv ntawv, uas tso cai rau koj siv cov lus Rust los tsim cov ntawv thov rau Windows OS. Cov txheej txheem suav nrog ob lub pob crate (qhov rais thiab windows-sys), uas koj tuaj yeem nkag mus rau Win API hauv Rust cov kev pab cuam. Code rau API kev txhawb nqa yog tsim tawm dynamically los ntawm metadata piav txog API, uas tso cai rau koj los siv kev txhawb nqa tsis yog rau Win API hu uas twb muaj lawm, tab sis rau kev hu uas yuav tshwm sim yav tom ntej. Tus tshiab version ntxiv kev txhawb nqa rau UWP (Universal Windows Platform) lub hom phiaj platform thiab siv hom Kov thiab Debug.

Tau qhov twg los: opennet.ru

Ntxiv ib saib