Rust 1.73 Programming Language Release

Ang pagpapalabas ng Rust 1.73 general-purpose programming language, na itinatag ng proyekto ng Mozilla, ngunit ngayon ay binuo sa ilalim ng auspice ng independiyenteng non-profit na organisasyon na Rust Foundation, ay nai-publish. Nakatuon ang wika sa kaligtasan ng memorya at nagbibigay ng paraan upang makamit ang mataas na parallelism sa trabaho habang iniiwasan ang paggamit ng isang basurero at runtime (runtime ay binabawasan sa pangunahing pagsisimula at pagpapanatili ng karaniwang library).

Ang mga paraan ng pangangasiwa ng memorya ng Rust ay nagliligtas sa developer mula sa mga error kapag nagmamanipula ng mga pointer at nagpoprotekta laban sa mga problemang lumitaw dahil sa mababang antas ng paghawak ng memorya, tulad ng pag-access sa isang lugar ng memorya pagkatapos na ito ay mapalaya, pag-derefer ng mga null pointer, pag-overrun ng buffer, atbp. Upang ipamahagi ang mga aklatan, magbigay ng mga build at pamahalaan ang mga dependency, bubuo ang proyekto ng Cargo package manager. Ang crates.io repository ay suportado para sa pagho-host ng mga aklatan.

Ang kaligtasan ng memorya ay ibinibigay sa Rust sa oras ng pag-compile sa pamamagitan ng pagsuri sa sanggunian, pagsubaybay sa pagmamay-ari ng bagay, pagsubaybay sa mga buhay ng bagay (mga saklaw), at pagtatasa ng kawastuhan ng pag-access sa memorya sa panahon ng pagpapatupad ng code. Nagbibigay din ang kalawang ng proteksyon laban sa mga overflow ng integer, nangangailangan ng mandatoryong pagsisimula ng mga variable na halaga bago gamitin, mas mahusay na pinangangasiwaan ang mga error sa karaniwang library, inilalapat ang konsepto ng hindi nababagong mga sanggunian at mga variable bilang default, nag-aalok ng malakas na static na pag-type upang mabawasan ang mga lohikal na error.

Mga pangunahing inobasyon:

  • Ang format ng mga mensahe na inisyu ng default na program crash handler (panic) ay muling idinisenyo. Ang tekstong tinukoy sa "panic!" macro ay ipinapakita na ngayon sa isang hiwalay na linya nang walang mga panipi, na ginagawang mas madaling basahin ang mensahe at inaalis ang pagkalito kapag naroroon o nahati ang mga nested quote sa maraming linya. fn main() { let file = "ferris.txt"; panic!("ay hindi! {file:?} not found!"); } May thread na 'pangunahing' na nataranta sa 'naku! "ferris.txt" not found!', src/main.rs:3:5 Na-panic ang thread na 'main' sa src/main.rs:3:5: naku! Hindi nakita ang "ferris.txt"!

    Ang output ng mga mensaheng ipinapakita kapag ang "assert_eq" at "assert_ne" na mga macro ay na-trigger ay na-rework din. fn main() { assert_eq!("πŸ¦€", "🐟", "ferris is not a fish"); } May thread na 'main' na nataranta sa 'assertion failed: `(left == right)` left: `"πŸ¦€"`, right: `"🐟"`: ferris is not a fish', src/main.rs: 2 :5 Nag-panic ang thread na 'pangunahing' sa src/main.rs:2:5: nabigo ang assertion na `kaliwa == kanan`: hindi isda ang ferris na natitira: β€œπŸ¦€β€ kanan: β€œπŸŸβ€

  • Alinsunod sa RFC 3184, ang kakayahang direktang manipulahin ang thread-local (thread_local) LocalKey storage key ay naidagdag > at LocalKey > sa pamamagitan ng paggamit ng get(), set(), take() at replace() na mga pamamaraan, sa halip na gumamit ng "with(|inner| ...)" na pagsasara, na nag-aalis ng pangangailangang magsagawa ng karagdagang initialization code para sa mga default na halaga na tinukoy para sa mga bagong thread kapag ginagamit ang macro na "thread_local!" thread_local! { static na BAGAY: Cell > = Cell::new(Vec::new()); } fn f() { // was THINGS.with(|i| i.set(vec![32, 1, 2])); // naging THINGS.set(vec![3, 1, 2]); // ... // was let v = THINGS.with(|i| i.take()); // naging let v: Vec = THINGS.take(); }
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • Hindi nalagdaan {integer}::div_ceil
    • Hindi nalagdaan {integer}::next_multiple_of
    • Hindi nalagdaan {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::kunin mo
    • LocalKey:: >::set
    • LocalKey:: >::kunin
    • LocalKey:: >::palitan
    • LocalKey:: >::with_borrow
    • LocalKey:: >::with_borrow_mut
    • LocalKey:: >::set
    • LocalKey:: >::kunin
    • LocalKey:: >::palitan
  • Ang katangiang "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa mga function:
    • rc::Mahina::bago
    • sync::Weak::bago
    • NonNull::as_ref
  • Nagbibigay ang compiler ng pagtatala ng impormasyon ng bersyon sa seksyong ".comment", katulad ng GCC at Clang.
  • Ang ikatlong antas ng suporta ay ipinatupad para sa mga platform na aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl at x86_64-unknown-linux -oh. Ang ikatlong antas ay nagsasangkot ng pangunahing suporta, ngunit walang automated na pagsubok, pag-publish ng mga opisyal na build, o pagsuri kung ang code ay maaaring buuin.
  • Naipatupad na ang pangalawang antas ng suporta para sa target na platform wasm32-wasi-preview1-threads. Ang ikalawang antas ng suporta ay nagsasangkot ng garantiya ng pagpupulong.

Pinagmulan: opennet.ru

Magdagdag ng komento