Ulimi lokuhlela lwenhloso evamile i-Rust 1.77, olwasungulwa iphrojekthi ye-Mozilla kodwa manje oluthuthukiswe ngaphansi kwenhlangano ezimele engenzi nzuzo i-Rust Foundation, lukhululiwe. Ulimi lugxile ekuphepheni kwenkumbulo futhi luhlinzeka ngezindlela zokuzuza ukufana kwemisebenzi ephezulu kuyilapho ugwema ukusetshenziswa komqoqi kadoti nesikhathi sokusebenza (isikhathi sokusebenza sincishiselwa ekuqaliseni okuyisisekelo nasekunakekeleni umtapo wolwazi ojwayelekile).
Izindlela zokuphatha inkumbulo kaRust zisindisa unjiniyela emaphutheni lapho eshintsha izikhombi futhi avikele ezinkingeni eziphakama ngenxa yokuphatha inkumbulo esezingeni eliphansi, njengokufinyelela indawo yenkumbulo ngemva kokuba ikhululiwe, ukuhoxisa izikhombi ezingenalutho, ukugcwala kwebhafa, njll. Ukuze kusatshalaliswe imitapo yolwazi, ukuhlinzeka ngokwakha nokuphatha okuncikile, iphrojekthi ithuthukisa umphathi wephakheji ye-Cargo. Inqolobane ye-crates.io isekelwe ekusingatheni imitapo yolwazi.
Ukuphepha kwenkumbulo kunikezwa ku-Rust ngesikhathi sokuhlanganiswa ngokuhlolwa kwereferensi, ukulandelela ubunikazi bento, ukulandelela isikhathi sokuphila kwento (izikophu), nokuhlola ukulunga kokufinyelela inkumbulo ngesikhathi sokwenziwa kwekhodi. I-Rust iphinde inikeze isivikelo ekuchichimeni okuphelele, idinga ukuqaliswa okuyisibopho kwamanani ahlukahlukene ngaphambi kokusetshenziswa, iphatha amaphutha kangcono kulabhulali evamile, isebenzisa umqondo wezithenjwa ezingaguquleki nokuguquguqukayo ngokuzenzakalelayo, inikeza ukuthayipha okuqinile okuqinile ukuze kuncishiswe amaphutha anengqondo.
Okuqanjiwe okuyinhloko:
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π»ΠΈΡΠ΅ΡΠ°Π»ΠΎΠ² Π΄Π»Ρ Π‘ΠΈ-ΡΡΡΠΎΠΊ (cΒ»ΡΠ΅ΠΊΡΡΒ»), ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΌ Π½ΡΠ»Π΅Π²ΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ΠΈ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Ρ Ρ ΡΠΈΠΏΠΎΠΌ Β«CStrΒ». ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π‘ΠΈ-ΡΡΡΠΎΠΊ ΡΠΏΡΠΎΡΡΠΈΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Ρ ΠΏΡΠΎΡΠ»ΠΎΠΉΠΊΠ°ΠΌΠΈ Π½Π° ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌΡΠ΅ Π½ΡΠ»Π΅Π²ΡΠΌ Π±Π°ΠΉΡΠΎΠΌ ΡΡΡΠΎΠΊΠΈ, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. const HELLO: &core::ffi::CStr = cΒ»Hello, world!Β»;
- Π Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡΡ , ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Β«async fnΒ», ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠΈ, Ρ.Π΅. ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ°ΠΌΠΈ ΡΠ΅Π±Ρ. async fn fib(n: u32) -> u32 { match n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await } }
- Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΌΠ°ΠΊΡΠΎΡ offset_of!, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π±Π°ΠΉΡΠΎΠ²ΠΎΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ΡΡΡΡΠΊΡΡΡ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ, ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠΈΠΏΠ°. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΌΠ°ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΠΈΠΏΠ°. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ offset_of Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ. use std::mem; #[repr(C)] struct FieldStruct { first: u8, second: u16, third: u8 } assert_eq!(mem::offset_of!(FieldStruct, first), 0); assert_eq!(mem::offset_of!(FieldStruct, second), 2); assert_eq!(mem::offset_of!(FieldStruct, third), 4);
- Π ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅ Cargo Π² ΠΏΡΠΎΡΠΈΠ»ΡΡ ΡΠ΅Π»ΠΈΠ·ΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΎΡΠΈΡΡΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ (strip = Β«debuginfoΒ»), Π΅ΡΠ»ΠΈ Π² ΠΏΡΠΎΡΠΈΠ»Π΅ Cargo ΡΠ²Π½ΠΎ Π½Π΅ Π²ΠΊΠ»ΡΡΡΠ½ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, Ρ.Π΅. Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ debug = 0.
- ΠΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠΏΡΠΈΡ Β«-Zthir-unsafeck=onΒ», ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ unsafe Π΄Π»Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ THIR (Β«Typed High-Level Intermediate RepresentationΒ»).
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° lint-ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° static_mut_refs Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°ΠΆΠ° Β«From<&[T; N]>Β» Π΄Π»Ρ ΡΠΈΠΏΠ° Β«Cow<[T]>Β». fn foo(data: impl Into<Cow<βstatic, [&βstatic str]>>) { /* β¦ */ } fn main() { foo(&[Β«helloΒ», Β«worldΒ»]); }
- Π ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΎ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ 16-Π±Π°ΠΉΡΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² i128 ΠΈ u128 Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌ x86.
- Ingxenye entsha ye-API iyiswe esigabeni sokuzinza, okuhlanganisa izindlela nokusetshenziswa kwezimpawu kuzinzile:
- 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::map
- File::create_new
- Mutex::clear_poison
- RwLock::clear_poison
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌ aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf ΠΈ riscv32im-risc0-zkvm-elf. Π’ΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ, Π½ΠΎ Π±Π΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΠΎΠ΄Π°.
Source: opennet.ru