Rust 1.78 tso tawm. Borgo lus uas sib txuas cov kev muaj zog ntawm Go thiab Rust

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

  • Ib tug tshiab attribute namespace "#[diagnostic]" tau raug npaj, muab ib txoj kev los cuam tshuam cov lus yuam kev uas tsim los ntawm lub compiler. Thawj zaug hauv qhov chaw tshiab yog "#[diagnostic::on_unimplemented]" tus cwj pwm, uas tuaj yeem siv los kho cov lus yuam kev pov rau hauv qhov xwm txheej uas koj yuav tsum siv qhov zoo uas tsis siv rau hom. #[diagnostic::on_unimplemented( message = "Kuv Message for `ImportantTrait<{A}>` is not implemented for `{Self}`", label = "Kuv Label", note = "Note 1", note = "Note 2" )] qhov tseem ceeb tseem ceeb {} fn use_my_trait(_: impl Qhov tseem ceebTrait ) {} fn main() { use_my_trait(String::new()); } yuam kev [E32]: Kuv Cov Lus rau 'ImportantTrait `tsis yog siv rau `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Kuv Label | | | xav tau los ntawm ib tug khi qhia los ntawm no hu | = pab: qhov zoo 'ImportantTrait `tsis yog siv rau `String` = ceeb toom: Ceeb toom 18 = ceeb toom: Ceeb toom 12
  • Kev lees paub ua ntej siv rau cov haujlwm tsis zoo tam sim no tuaj yeem ncua mus txog thaum tsim cov lej, tso cai rau cov tshev no ua tiav yam tsis tas yuav tsim cov tsev qiv ntawv tus qauv hauv "#[cfg(debug_assertions)]" hom. Txhawm rau txhawm rau txheeb xyuas, nws tam sim no txaus los pab kom debug lees paub rau kev sim lossis kev debug tsim ntawm koj cov cai.
  • Tus cwj pwm ntawm kev ua haujlwm hauv cov tsev qiv ntawv tus qauv uas cuam tshuam rau kev sib raug zoo ntawm cov pointers thiab cov hlais tam sim no tuaj yeem kwv yees tau ntawm lub sijhawm ua haujlwm thiab nyob ntawm cov ntaub ntawv nkag. Qhov muaj nuj nqi pointer::align_offset, uas suav cov offset kom dlhos tus taw tes, tam sim no rov usize::MAX tsuas yog ua haujlwm tsis ua haujlwm. Cov haujlwm hlais:: align_to thiab hlais:: align_to_mut ob qho tib si, uas hloov cov hlais mus rau hauv ib qho sawv cev nrog cov kab nruab nrab thiab cov thawj pib thiab qhov kawg hlais, tam sim no ib txwm rov qab qhov loj tshaj plaws nruab nrab.
  • Cov hauv qab no tau pauv mus rau qeb ruaj khov:
    • impl Nyeem rau & Stdin
    • Tso cai siv lub neej tsis zoo li qub (tsis zoo li qub) rau qee qhov std::error:: yuam kev cuam tshuam txog kev siv.
    • Impl kev siv ?Size tus nqi raug tso cai.
    • impl Los ntawm rau io::err
  • Lub Barrier::new() muaj nuj nqi tau ruaj khov siv nrog "const" tus cwj pwm hauv txhua lub ntsiab lus tsis yog qhov qub.
  • Rau lub hom phiaj platforms x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm thiab i686-pc-windows-gnullvm tam sim no xav tau yam tsawg kawg Windows 10 version.
  • Qhov thib peb ntawm kev txhawb nqa tau siv rau wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf thiab loongarch64-tsis paub-linux-musl platforms. Qib thib peb suav nrog kev txhawb nqa yooj yim, tab sis tsis muaj kev sim ua haujlwm, kev tshaj tawm kev tsim, thiab kev txheeb xyuas cov cai tsim tau.
  • Qib thib ob ntawm kev txhawb nqa rau lub hom phiaj platform Ntxiv wasm32-wasip1 tau ua tiav. Qib thib ob ntawm kev txhawb nqa suav nrog kev sib dhos lav.
  • Lub platform wasm32-wasip-preview1-xov tau hloov npe mus rau wasm32-wasip1-xov.
  • Lub compiler tau hloov mus siv LLVM 18. Thaum siv LLVM 18 rau x86-32 thiab x86-64 architectures, ABI cuam tshuam nrog hom u128 thiab i128 tau hloov pauv.
  • Hauv Cargo pact manager, version 4 ntawm cov ntaub ntawv xauv (lockfile v4) tau ruaj khov.
  • Cargo muaj lub ntiaj teb ruaj khov cache nrog cov ntaub ntawv hais txog kev siv cov ntaub ntawv tshiab. Lub cache yog tuav hauv $CARGO_HOME/.global-cache siv SQLite thiab tau hloov kho kom pom qhov hloov tshiab rau qhov ntsuas, crate file, code directory, git clone, thiab git checkout.

Tsis tas li ntawd, Borgo programming lus sim ua kom muaj kev qhia ntau dua li Go lus, tab sis tsawg dua li lus Rust. Borgo muab cov yam ntxwv zoo tshaj plaws ntawm Go thiab Rust, ua rau qhov tsis txaus ntawm txhua hom lus. Piv txwv li, Go yog qhov yooj yim thiab ncaj nraim, tab sis tsis muab cov yam ntxwv kev nyab xeeb siab heev. Cov lus Rust muab cov cuab yeej rau kev ruaj ntseg programming, tab sis yog overcomplicated. Txoj haujlwm no yog tsim los ntawm Marco Sampellegrini, tus sau phau ntawv Simple Haskell thiab tus tsim tawm ntawm Quad CI txuas txuas ntxiv.

Rust 1.78 tso tawm. Borgo lus uas sib txuas cov kev muaj zog ntawm Go thiab Rust

Borgo siv static typing, Go-like type, thiab Rust-like syntax. Semicolons yog xaiv tau ntawm qhov kawg ntawm kab hauv Borgo code. Borgo code tau muab tso ua ke rau hauv Go sawv cev uas tau ua tiav nrog cov pob Go uas twb muaj lawm. Cov code compiler yog sau rau hauv Rust thiab muab faib raws li daim ntawv tso cai ISC. siv fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title:string, duration: int, } fn main() { let res = Response { title: “Hello world”, duration: 0, } let state = NetworkState.Success(res) cia msg = match state { NetworkState.Loading => “tseem loading”, NetworkState.Failed(code) => fmt.Sprintf(“Muaj qhov yuam kev: %d”, code), NetworkState.Success (res) => res.title, } fmt.Println(msg) }

Tau qhov twg los: opennet.ru

Ntxiv ib saib