Ang Rust 1.91 programming language, na itinatag ng proyekto ng Mozilla ngunit ngayon ay binuo sa ilalim ng tangkilik ng independiyenteng non-profit na Rust Foundation, ay inilabas. Nakatuon ang wika sa kaligtasan ng memorya at nagbibigay ng mga tool para sa pagkamit ng mataas na parallelism ng pagsasagawa ng gawain, habang ginagawa nang hindi gumagamit ng garbage collector at runtime (ang 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:
- Pinahusay na suporta para sa 64-bit ARM system na may OS WindowsAng target na platform na "aarch64-pc-windows-msvc" ay na-upgrade mula sa support level 2 patungong level 1. May available na suporta para sa Level 2 para sa mga arkitekturang aarch64-pc-windows-gnullvm at x86_64-pc-windows-gnullvm. Kasama sa suporta para sa Level 1 ang mga binary build, komprehensibong pagsubok, at ang pinakamataas na garantiya ng suporta sa platform—bawat pagbabago sa compiler ay beripikado sa pamamagitan ng pagpapatakbo ng buong test suite. Kasama sa Level 2 ang mga binary build at isang garantiya ng build, ngunit hindi ginagarantiyahan ang pagpasa sa test suite. Nagbibigay ang Level 3 ng pangunahing suporta, ngunit hindi kasama ang awtomatikong pagsubok, mga opisyal na build, o beripikasyon ng build.
- Idinagdag ang lint warning na "dangling_pointers_from_locals" upang makita ang mga function na bumabalik sa mga nakalawit na raw pointer na tumuturo sa data na nakaimbak sa mga lokal na variable na tinukoy sa tinatawag na function. Ang mga naturang variable ay tinanggal pagkatapos na bumalik ang function, at ang mga hilaw na pointer sa data na nauugnay sa mga variable na ito ay nagiging nakabitin, ibig sabihin, tumuturo sa napalaya na memorya. Ang kasunod na dereferencing ng naturang pointer ay humahantong sa hindi natukoy na pag-uugali. fn f() -> *const u8 { let x = 0; &x // babala: gagawa ng nakabitin na pointer dahil ang lokal na variable na "x" ay ibababa }
- Nagdagdag ng lint warning na "integer_to_ptr_transmutes" upang ipaalam ang tungkol sa pag-convert ng mga integer sa mga pointer gamit ang std::mem::transmute function.
- Ang Cargo package manager ay nagpatatag ng suporta para sa parameter na "build.build-dir", na tumutukoy sa direktoryo para sa pag-iimbak ng mga pansamantalang build artifact na ginawa ng cargo at rustc sa panahon ng proseso ng pagbuo.
- Ang suporta para sa pagdedeklara ng C-style variadic na mga function ay na-stabilize para sa sysv64, win64, efiapi, at aapcs ABIs.
- Pinatatag na suporta ng inline assembler para sa arkitektura ng LoongArch32.
- Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
- Path::file_prefix
- AtomicPtr::fetch_ptr_add
- AtomicPtr::fetch_ptr_sub
- AtomicPtr::fetch_byte_add
- AtomicPtr::fetch_byte_sub
- AtomicPtr::fetch_or
- AtomicPtr::fetch_and
- AtomicPtr::fetch_xor
- {integer}::strict_add
- {integer}::strict_sub
- {integer}::strict_mul
- {integer}::strict_div
- {integer}::strict_div_euclid
- {integer}::strict_rem
- {integer}::strict_rem_euclid
- {integer}::strict_neg
- {integer}::strict_shl
- {integer}::strict_shr
- {integer}::strict_pow
- i{N}::strict_add_unsigned
- i{N}::strict_sub_unsigned
- i{N}::strict_abs
- u{N}::strict_add_signed
- u{N}::strict_sub_signed
- PanicHookInfo::payload_as_str
- core::iter::chain
- u{N}::checked_signed_diff
- core::array::ulitin
- PathBuf::add_extension
- PathBuf::with_added_extension
- Tagal::from_mins
- Tagal::from_hours
- impl PartialEq para sa PathBuf
- impl PartialEq para sa PathBuf
- impl PartialEq para sa Path
- impl PartialEq para sa Path
- impl PartialEq para sa String
- impl PartialEq para sa String
- impl PartialEq para sa str
- impl PartialEq para sa str
- Ipv4Addr::from_octets
- Ipv6Addr::from_octets
- Ipv6Addr::from_segments
- impl Default para sa Pin > kung saan Box : Default, T: ?Sized
- impl Default para sa Pin > kung saan ang Rc : Default, T: ?Sized
- impl Default para sa Pin > kung saan si Arc : Default, T: ?Sized
- Cell::bilang_array_of_cells
- u{N}::carrying_add
- u{N}::borrowing_sub
- u{N}::carrying_mul
- u{N}::carrying_mul_add
- BtreeMap::extract_if
- BtreeSet::extract_if
- impl Debug para sa mga bintana::ffi::EncodeWide<'_>
- str::ceil_char_boundary
- str::floor_char_boundary
- impl Sum para sa Saturating
- impl Sum<&Self> para sa Saturating
- impl na Produkto para sa Saturating
- impl Product<&Self> para sa Saturating
- Ang "const" sign ay ginagamit sa mga function:
- <[T; N]>::bawat_ref
- <[T; N]>::bawat_mut
- OsString::bago
- PathBuf::bago
- TypeId::of
- ptr::with_exposed_provenance
- ptr::with_exposed_provenance_mut
- Ang compiler ay na-update sa LLVM 21 branch.
Pinagmulan: opennet.ru
