Harshen shirye-shiryen tsatsa 1.77

An buga yaren shirye-shirye na Rust 1.77 na gabaΙ—aya, wanda aikin Mozilla ya kafa, amma yanzu an haΙ“aka shi a Ζ™arΖ™ashin inuwar wata kungiya mai zaman kanta mai zaman kanta ta Rust Foundation. Harshen yana mai da hankali kan amincin Ζ™waΖ™walwar ajiya kuma yana ba da hanyoyin cimma babban daidaiton aiki yayin guje wa yin amfani da mai tara shara da lokacin aiki (an rage lokacin aiki zuwa farawa na asali da kiyaye daidaitaccen Ι—akin karatu).

Hanyoyin sarrafa Ζ™waΖ™walwar Rust suna ceton mai haΙ“akawa daga kurakurai yayin sarrafa masu nuni da kuma kariya daga matsalolin da suka taso saboda Ζ™arancin kulawar Ζ™waΖ™walwar ajiya, kamar samun damar wurin Ζ™waΖ™walwar ajiya bayan an 'yantar da shi, cire maΖ™asudin null, buffer overruns, da dai sauransu. Don rarraba Ι—akunan karatu, samar da gini da sarrafa abubuwan dogaro, aikin yana haΙ“aka manajan fakitin Kaya. Ana tallafawa ma'ajiyar crates.io don Ι—aukar Ι—akunan karatu.

Ana ba da amincin Ζ™waΖ™walwar ajiya a cikin Tsatsa a lokacin tattarawa ta hanyar duba tunani, kiyaye bin diddigin mallakar abu, kiyaye tsawon rayuwa (masu iyawa), da tantance daidaiton damar Ζ™waΖ™walwar ajiya yayin aiwatar da lambar. Tsatsa kuma yana ba da kariya daga ambaliya mai lamba, yana buΖ™atar Ζ™addamar da Ζ™ima mai mahimmanci kafin amfani, yana sarrafa kurakurai mafi kyau a cikin daidaitaccen Ι—akin karatu, yana amfani da ra'ayi na nassoshi marasa canzawa da masu canji ta tsohuwa, yana ba da buga rubutu mai Ζ™arfi don rage kurakurai masu ma'ana.

Manyan sabbin abubuwa:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² для Π‘ΠΈ-строк (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.
  • An koma wani sabon yanki na API zuwa nau'in barga, gami da hanyoyin da aiwatar da halaye an daidaita su:
    • 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: budenet.ru

Add a comment