Siideynta luqadda barnaamijka Rust 1.59 iyadoo la taageerayo gelinta isku dhafka

Siideynta Rust 1.59 luqadda barnaamijka guud ee ujeeddooyinka, oo uu aasaasay mashruuca Mozilla, laakiin hadda lagu horumariyay hoosta hay'adda madax-bannaan ee aan faa'iido doonka ahayn ee Rust Foundation, ayaa la daabacay. Luqadda waxay diiradda saartaa badbaadada xusuusta waxayna bixisaa siyaabaha lagu gaaro isbarbardhigga shaqada sare iyadoo laga fogaanayo isticmaalka qashinka aruuriyaha iyo wakhtiga runtime (waqtiga runtime wuxuu hoos u dhigayaa bilowga aasaasiga ah iyo dayactirka maktabadda caadiga ah).

Hababka wax ka qabashada xusuusta daxalku waxay horumariyaha ka badbaadiyaan khaladaadka marka la maamulayo tilmaamayaasha oo ay ka ilaaliyaan dhibaatooyinka ka dhasha maaraynta xusuusta heerka hoose ah, sida gelitaanka aagga xusuusta ka dib marka la sii daayo, leexinta tilmaameyaal aan waxba lahayn, dulin xad dhaaf ah, iwm. Si loo qaybiyo maktabadaha, loo bixiyo dhismayaal loona maareeyo ku-tiirsanaanta, mashruucu wuxuu horumariyaa maareeyaha xirmada xamuulka. Kaydka crates.io waxaa lagu taageeraa martigelinta maktabadaha.

Badbaadada xusuusta waxa lagu bixiyaa miridhku wakhtiga la ururinayo iyada oo la eegayo tixraaca, la socodka lahaanshaha shayga, la socodka cimriga shayga (koobyada), iyo qiimaynta saxnaanta gelitaanka xusuusta inta lagu jiro fulinta koodka. Daxalku sidoo kale wuxuu bixiyaa difaac ka dhan ah qulqulka isugeynta, wuxuu u baahan yahay bilawga qasabka ah ee qiyamka doorsooma ka hor intaan la isticmaalin, wuxuu si fiican u maareeyaa khaladaadka maktabadda caadiga ah, wuxuu dabaqaa fikradda tixraacyada aan bedeli karin iyo doorsoomayaasha si caadi ah, wuxuu bixiyaa qorid adag oo adag si loo yareeyo khaladaadka macquulka ah.

Hal-abuurka ugu muhiimsan:

  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования ассСмблСрных вставок, вострСбованных Π² прилоТСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования спСциализированных ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… инструкций. АссСмблСрныС вставки Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ макросов Β«asm!Β» ΠΈ Β«global_asm!Β» с использованиСм для имСнования рСгистров синтаксиса форматирования строк, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² строковых подстановках Π² Rust. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ассСмблСрныС инструкции для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ x86, x86-64, ARM, AArch64 ΠΈ RISC-V. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ вставки: use std::arch::asm; // Multiply x by 6 using shifts and adds let mut x: u64 = 4; unsafe { asm!( Β«mov {tmp}, {x}Β», Β«shl {tmp}, 1Β», Β«shl {x}, 2Β», Β«add {x}, {tmp}Β», x = inout(reg) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° дСструктурированных (ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ…) присвоСний, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² Π»Π΅Π²ΠΎΠΉ части выраТСния указываСтся нСсколько Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ, слайсов ΠΈΠ»ΠΈ структур. НапримСр: let (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ указания Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для константных Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² (Β«const genericsΒ»): struct ArrayStorage<T, const N: usize = 2> { arr: [T; N], } impl<T> ArrayStorage<T> { fn new(a: T, b: T) -> ArrayStorage<T> { ArrayStorage { arr: [a, b], } } }
  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ Cargo обСспСчСн Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎΠ± использовании Π² зависимостях нСдопустимых конструкций, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠ·-Π·Π° ошибок Π² компиляторС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·-Π·Π° ошибки Π΄ΠΎΠΏΡƒΡΠΊΠ°Π»ΠΎΡΡŒ заимствованиС ΠΏΠΎΠ»Π΅ΠΉ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… структур Π² safe-Π±Π»ΠΎΠΊΠ°Ρ…). ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… конструкций Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ вСрсии Rust.
  • Π’ cargo ΠΈ rustc встроСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΡ‡ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (strip = Β«debuginfoΒ») ΠΈ символов (strip = Β«symbolsΒ»), Π±Π΅Π· нСобходимости Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹. Настройка очистки рСализуСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«stripΒ» Π² Cargo.toml: [profile.release] strip = Β«debuginfoΒ», Β«symbolsΒ»
  • По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ компиляция. Π’ качСствС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ называСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±Ρ…ΠΎΠ΄ ошибки Π² компиляторС, приводящСй ΠΊ сбоям ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρƒ ошибок дСсСриализации. Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ошибки ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΎ ΠΈ Π²ΠΎΠΉΠ΄Ρ‘Ρ‚ Π² состав ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ выпуска. Для возвращСния ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ компиляции ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния RUSTC_FORCE_INCREMENTAL=1.
  • Qayb cusub oo API ah ayaa loo raray qaybta xasiloon, oo ay ku jiraan hababka iyo hirgelinta sifooyinka la dajiyay:
    • std::thread::available_parallelism
    • Result::copied
    • Result::cloned
    • arch::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • TryFrom for u8
    • char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
    • iter::zip
    • NonZeroU8::is_power_of_two
    • NonZeroU16::is_power_of_two
    • NonZeroU32::is_power_of_two
    • NonZeroU64::is_power_of_two
    • NonZeroU128::is_power_of_two
    • DoubleEndedIterator для структуры ToLowercase
    • DoubleEndedIterator для структуры ToUppercase
    • TryFrom<&mut [T]> for [T; N]
    • UnwindSafe для структуры Once
    • RefUnwindSafe для Once
    • встроСнныС Π² компилятор Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ armv8 neon для aarch64
  • Sifada "const", taas oo go'aamisa suurtagalnimada in loo isticmaalo xaalad kasta oo aan joogto ahayn, ayaa loo adeegsadaa hawlaha:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUninit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

Source: opennet.ru

Add a comment