Ang pagpapalabas ng Rust 1.77 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:
- Nagdagdag ng suporta para sa mga literal para sa mga C string (c"text"), na naka-imbak sa memorya na may null-terminated na character at nauugnay sa uri ng "CStr". Ang suporta para sa mga string ng C ay inaasahang magpapasimple sa pagsulat ng code na nakikipag-ugnayan sa mga layer sa mga programming language na gumagamit ng mga null-terminated na string at magbibigay-daan sa mga kinakailangang pagsusuri sa oras ng pag-compile. const HELLO: &core::ffi::CStr = c"Kumusta, mundo!";
- Ang asynchronous na pagpapatupad ng mga function na idineklara gamit ang "async fn" na expression ay nagbibigay-daan na ngayon sa recursion, ibig sabihin, ang mga naturang function ay maaari na ngayong tumawag sa kanilang mga sarili. async fn fib(n: u32) -> u32 { match n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).wait + Box::pin(fib(n-2)).wait } }
- Ang offset_ng! ang macro ay na-stabilize. Pinapayagan ka nitong matukoy ang byte offset ng mga patlang ng mga istruktura, enumerasyon, unyon, at tuple na nauugnay sa simula ng uri. Sa pagsasagawa, maaaring maging kapaki-pakinabang ang macro sa mga sitwasyon kung saan kailangan mong magtrabaho sa antas ng field offset sa kawalan ng uri ng instance. Sa partikular, ang offset_of functionality ay kinakailangan kapag bumubuo ng mga low-level na bahagi tulad ng mga driver. gumamit ng std::mem; #[repr(C)] struct FieldStruct { una: u8, pangalawa: u16, pangatlo: u8 } assert_eq!(mem::offset_of!(FieldStruct, una), 0); assert_eq!(mem::offset_of!(FieldStruct, second), 2); assert_eq!(mem::offset_of!(FieldStruct, third), 4);
- Sa Cargo package manager, ang pagtanggal ng mga file mula sa debug data (strip = "debuginfo") ay pinagana bilang default sa mga release profile maliban kung ang debug mode ay tahasang pinagana sa Cargo profile, ibig sabihin, kung ang debug parameter = 0.
- Ang opsyong "-Zthir-unsafeck=on" ay pinagana bilang default, na nagbibigay-daan sa hindi ligtas na pagsusuri para sa THIR (Typed High-Level Intermediate Representation) na intermediate na representasyon.
- Nagdagdag ng lint check static_mut_refs upang maglabas ng babala kapag gumagamit ng mga sanggunian sa mga nababagong static na halaga.
- Ipinatupad ang kakayahang ilapat ang katangiang "From<&[T; N]>" sa uri ng "Cow<[T]>". fn foo(data: impl Into >) { /* … */ } fn main() { foo(&[“hello”, “world”]); }
- Ang compiler ay nagbibigay ng alignment para sa 16-byte na i128 at u128 na mga uri para sa x86 system.
- Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
- array::each_ref
- array::each_mut
- core::net
- f32::round_ties_even
- f64::round_ties_even
- mem::offset_of!
- slice::first_chunk
- slice::first_chunk_mut
- slice::split_first_chunk
- slice::split_first_chunk_mut
- slice::last_chunk
- slice::last_chunk_mut
- slice::split_last_chunk
- slice::split_last_chunk_mut
- slice::chunk_by
- slice::chunk_by_mut
- Bound::mapa
- File::create_new
- Mutex::clear_poison
- RwLock::clear_poison
- Ipinatupad ang suporta sa Antas 3 para sa mga platform ng aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf, at riscv32im-risc0-zkvm-elf. Ang Antas 3 ay nagbibigay ng pangunahing suporta, ngunit walang automated na pagsubok, opisyal na mga build, o build na pag-verify.
Pinagmulan: opennet.ru
