Rust 1.42 Famoahana ny fiteny fandaharana

MIVOAKA famotsorana ny fiteny fandaharana amin'ny rafitra Harafesina 1.42, naorin'ny tetikasa Mozilla. Mifantoka amin'ny fiarovana ny fitadidiana ilay fiteny, manome fitantanana fitadidiana mandeha ho azy, ary manome fitaovana hanatrarana ny fitovizan'asa avo lenta nefa tsy mampiasa mpanangom-pako sy runtime.

Ny fitantanana fahatsiarovana mandeha ho azy an'i Rust dia manafaka ny mpamorona amin'ny fanodinkodinana pointer ary miaro amin'ny olana ateraky ny fanodinkodinana fahatsiarovana ambany, toy ny fidirana tsy misy fitadidiana aorian'ny fahatsiarovan-tena, ny tsy fahampian'ny pointer tsy misy dikany, ny fihoaran'ny buffer, sy ny toy izany. Misy mpitantana fonosana novolavolaina mba hizarana tranomboky, hiantohana ny fivoriambe ary hitantanana ny fiankinan-doha amin'ny tetikasa. entana, ahafahanao mahazo ny tranomboky ilaina amin'ny programa amin'ny tsindry iray. Misy tahiry iray tohanana mba hampiantranoana tranomboky crates.io.

tena fanavaozana:

  • nanampy ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° шаблонов для сопоставлСния частСй срСзов (динамичСских массивов, 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,
    _ => diso,
    }

    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> nanampy ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Send ΠΈ Sync для Π»ΡŽΠ±Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ T.
    Π’Ρ‹Π·ΠΎΠ²Ρ‹ Pin::{map_unchecked, map_unchecked_mut} Nafahana ΠΎΡ‚ нСобходимости Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Β«SizedΒ».
    Π’ io::Cursor ampiharina 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-разрядных ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

Source: opennet.ru

Add a comment