Rust 1.73 Programming Language Tso tawm

Kev tso tawm ntawm Rust 1.73 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:

  • Hom ntawv ntawm cov lus tawm los ntawm lub neej ntawd qhov kev pab cuam crash handler (panic) tau raug kho dua tshiab. Cov ntawv sau tseg hauv "panic!" macro yog tam sim no qhia ntawm ib kab sib cais yam tsis muaj cov lus hais, ua kom cov lus yooj yim nyeem thiab tshem tawm qhov tsis meej pem thaum cov lus sib dhos tam sim no los yog faib hla ntau kab. fn main() { let file = "ferris.txt"; panic!("oh no! {file:?} not found!"); } Muaj xov 'main' panicked ntawm 'oh tsis! "ferris.txt" not found!', src/main.rs:3:5 Xov 'main' panicked at src/main.rs:3:5: oh no! "ferris.txt" tsis pom!

    Cov zis ntawm cov lus qhia thaum lub "assert_eq" thiab "assert_ne" macros tau tshwm sim kuj tau rov ua haujlwm dua. fn main() { assert_eq!("πŸ¦€", "🐟", "ferris is not a fish"); } Muaj xov 'main' panicked ntawm 'kev lees paub ua tsis tiav: `(sab laug == txoj cai)` sab laug: `"πŸ¦€"`, txoj cai: `"🐟"`: ferris tsis yog ntses', src/main.rs: 2:5 Xov 'main' panicked ntawm src/main.rs: 2:5: assertion `sab laug == txoj cai` ua tsis tiav: ferris tsis yog ntses laug: β€œπŸ¦€β€ txoj cai: β€œπŸŸβ€

  • Raws li RFC 3184, lub peev xwm los tswj ncaj qha xov-hauv zos (thread_local) LocalKey khaws cov yuam sij tau ntxiv > thiab LocalKey > los ntawm kev siv get(), set(), take() thiab hloov() txoj kev, es tsis txhob siv ib tug "nrog(| puab| ...)" kaw, uas tshem tawm qhov yuav tsum tau rau ntxiv initialization code rau lub neej ntawd qhov tseem ceeb qhia rau cov xov tshiab thaum siv macro "thread_local!" xov_local! { Yam khoom zoo li qub: Cell > = Cell::new(Vec::new()); } fn f() { // yog THINGS.with(|i| i.set(vec![32, 1, 2])); // ua THINGS.set(vec![3, 1, 2]); // ... // was let v = THINGS.with(|i| i.take()); // ua let v: Vec = THINGS.take(); }
  • 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:
    • Unsigned {integer}::div_ceil
    • Unsigned {integer}::next_multiple_of
    • Unsigned {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >:: tau
    • LocalKey:: >::set
    • LocalKey:: >:: coj
    • LocalKey:: >:: hloov
    • LocalKey:: >:: nrog_khaw
    • LocalKey:: >:: with_borrow_mut
    • LocalKey:: >::set
    • LocalKey:: >:: coj
    • LocalKey:: >:: hloov
  • 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:
    • rc ::ua ::new
    • sync::Weak::new
    • NonNull::as_ref
  • Lub compiler muab kaw cov ntaub ntawv version hauv seem ".comment", zoo ib yam li GCC thiab Clang.
  • Qhov thib peb ntawm kev txhawb nqa tau siv rau lub platforms aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-tsis paub-hermit, x86_64-unikraft-linux-musl thiab x86_64-unknown-linux -os. 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.
  • Qib thib ob ntawm kev txhawb nqa rau lub hom phiaj platform wasm32-wasi-preview1-xov tau raug siv. Qib thib ob ntawm kev txhawb nqa suav nrog kev sib dhos lav.

Tau qhov twg los: opennet.ru

Ntxiv ib saib