Umhlwa 1.42 Ukukhutshwa koLwimi lweNkqubo

ipapashiwe inkqubo yolwimi ukukhululwa Umhlwa 1.42, yasekwa yiprojekthi yeMozilla. Ulwimi lujolise ekukhuselweni kwememori, lubonelela ngolawulo lwememori oluzenzekelayo, kwaye lubonelela ngezixhobo zokuphumeza umsebenzi ophezulu wokuhambelana ngaphandle kokusebenzisa umqokeleli wenkunkuma kunye. ixesha lokuqalisa.

Ulawulo lwenkumbulo oluzenzekelayo lwe-Rust lukhulula umphuhlisi ekusetyenzisweni kwesalathisi kwaye ikhusela kwiingxaki ezivela kulawulo lwenkumbulo olukwinqanaba elisezantsi, elifana nofikelelo lwememori yasemva kwe-free, izalathisi ezingenanto, ukugqithiswa kwe-buffer, nokunye okunjalo. Umphathi wephakheji uyaphuhliswa ukuze asasaze amathala eencwadi, aqinisekise ukudibanisa kunye nokulawula ukuxhomekeka kwiprojekthi. Cargo, ikuvumela ukuba ufumane amathala eencwadi afunekayo kudweliso lwenkqubo ngonqakrazo olunye. Uvimba uyaxhaswa ukubamba amathala eencwadi iikhreyithi.io.

Siseko ezintsha:

  • Yongeziwe ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° шаблонов для сопоставлСния частСй срСзов (динамичСских массивов, slice). Если Ρ€Π°Π½ΡŒΡˆΠ΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°Π»ΠΈΡΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ сопоставлСния, Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования конструкций с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Β«..Β» для ΠΎΡ…Π²Π°Ρ‚Π° ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΡ…ΡΡ элСмСнтов массива. НапримСр:

    fn foo(words: &[&str]) {
    match words {

    // провСряСт Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты массива с ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
    ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° Π½ΠΈΠΌΠΈ элСмСнтов
    [Β«HelloΒ», Β«WorldΒ», Β«!Β», ..] => println!(Β«Hello World!Β»),

    // провСряСт ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° элСмСнта Β«FooΒ» ΠΈ Β«BarΒ», Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ
    [Β«FooΒ», Β«BarΒ», ..] => println!(Β«BazΒ»),

    // ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ всё, Π½ΠΎ послСдний элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Β«!Β».
    [.., Β«!Β»] => println!(Β«!!!Β»),

    // Π² срСз start Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ всё, ΠΊΡ€ΠΎΠΌΠ΅ послСднСго элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Β«zΒ»
    [start @ .., Β«zΒ»] => println!(Β«starts with: {:?}Β», start),

    // Π² срСз end ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ всё, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Β«aΒ».
    [Β«aΒ», end @ ..] => println!(Β«ends with: {:?}Β», end),

    rest => println!(Β«{:?}Β», rest),
    }
    }

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ макрос Β«matches!Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ шаблон, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Β«trueΒ», Ссли шаблон соотвСтствуСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. Π’ шаблонС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Β«|Β» ΠΈ Β«ifΒ».

    match self.partial_cmp(other) {
    Some(Less) => true,
    _ => bubuxoki,
    }

    matches!(self.partial_cmp(other), Some(Less))

    let foo = β€˜f’;
    assert!(matches!(foo, β€˜A’..=’Z’ | β€˜a’..=’z’));

    let bar = Some(4);
    assert!(matches!(bar, Some(x) if x > 2));

  • Π’ panic-сообщСниях, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ использовании
    Ρ‚ΠΈΠΏΠΎΠ² Option ΠΈ Result, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½ΠΎΠΌΠ΅Ρ€Π° строк со ссылкой Π½Π° ΠΊΠΎΠ΄, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΠ²ΡˆΠΈΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ², Π° Π½Π΅ ссылки Π½Π° ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Π² libcore. НапримСр, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² unwrap ΠΈ expect Π½Π°Π΄ Option::None ΠΈΠ»ΠΈ сбои ΠΏΡ€ΠΈ использовании unwrap_err, expect, expect_err ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Ρ‚ΠΈΠΏΠ° Result.

  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ Cargo обСспСчСна автоматичСская подстановка Β«proc_macro crateΒ» Π² Π±Π»ΠΎΠΊ Β«externΒ» для ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΌΠΈ макросами. Π”Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ Β«useΒ» ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΌ макросам Π±Π΅Π· нСобходимости указания Π² ΠΊΠΎΠ΄Π΅ Β«extern crate proc_macro;Β». НапримСр, Ссли Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ строка Β«use proc_macro::TokenStream;Β», Ρ‚ΠΎ ΠΊΠΎΠ΄ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ останСтся Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ, Ссли ΠΈΠ· Π½Π΅Π³ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Β«extern crate proc_macro;Β».
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ возмоТности стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ iter::Empty<T> yongezwe ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Send ΠΈ Sync для Π»ΡŽΠ±Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ T.
    Π’Ρ‹Π·ΠΎΠ²Ρ‹ Pin::{map_unchecked, map_unchecked_mut} zisiwe ΠΎΡ‚ нСобходимости Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Β«SizedΒ».
    Π’ io::Cursor iphunyeziwe PartialEq ΠΈ Eq. ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Β«constΒ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π² любом контСкстС вмСсто констант, ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Layout::new.

  • Π’ разряд ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π° новая порция API, Π² Ρ‚ΠΎΠΌ числС стабилизированы CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    ManuallyDrop::take,
    ptr::slice_from_raw_parts_mut ΠΈ ptr::slice_from_raw_parts.

  • ОбъявлСн ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Error::description.
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ Π² Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ armv7a-none-eabi ΠΈ riscv64gc-unknown-linux-gnu. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ riscv64gc-unknown-linux-gnu.
    32-разрядныС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Apple ΠΏΠΎΠ½ΠΈΠΆΠ΅Π½Ρ‹ Π΄ΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ уровня ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ, Π½ΠΎ Π±Π΅Π· Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСстирования ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сборок. ПониТСниС уровня ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ обусловлСно ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ сопровоТдСния ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Apple 32-разрядных ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

umthombo: opennet.ru

Yongeza izimvo