ИздаванС Π½Π° Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Rust 1.42

ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ вСрсия Π½Π° систСмния Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ РъТда 1.42, основана ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Mozilla. Π•Π·ΠΈΠΊΡŠΡ‚ сС фокусира Π²ΡŠΡ€Ρ…Ρƒ бСзопасността Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, осигурява Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ прСдоставя инструмСнти Π·Π° постиганС Π½Π° висок ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‡ Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°.

Автоматичното ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° Rust освобоТдава Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° указатСля ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠ°Π·Π²Π° ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΡ€ΠΎΠΈΠ·Ρ‚ΠΈΡ‡Π°Ρ‰ΠΈ ΠΎΡ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ниско Π½ΠΈΠ²ΠΎ, ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚ слСд освобоТдаванС, Π΄Π΅Ρ€Π΅Ρ„Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΡƒΠ»Π΅Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π», ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅ Π½Π° Π±ΡƒΡ„Π΅Ρ€ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° сС ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° разпространСниС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, осигуряванС Π½Π° сглобяванС ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° зависимости ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ΠΎΠ²Π°Ρ€Π΅Π½, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с Π΅Π΄Π½ΠΎ ΠΊΠ»ΠΈΠΊΠ²Π°Π½Π΅. ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° сС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° хостванС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ crates.io.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ:

  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° шаблони Π·Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° части ΠΎΡ‚ срСзовС (Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ масиви, срСзовС). ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° бяха Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ Ρ‚ΠΎΡ‡Π½ΠΈ съвпадСния, Π½ΠΎ сСга Π΅ възмоТно Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ конструкции, отбСлязани с ".." Π·Π° ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° останалитС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ масива. НапримСр:

    fn foo(Π΄ΡƒΠΌΠΈ: &[&str]) {
    ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ΠΈ Π΄ΡƒΠΌΠΈ {

    // провСрява Π½Π°Ρ‡Π°Π»Π½ΠΈΡ‚Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° масива ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°
    слСдващи Π³ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ
    ["Π—Π΄Ρ€Π°Π²Π΅ΠΉ", "Бвят", "!", ..] => println!("Π—Π΄Ρ€Π°Π²Π΅ΠΉ свят!"),

    // провСрява ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ Π΄Π²Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° "Foo" ΠΈ "Bar", Π° останалитС Π½Π΅ са Π²Π°ΠΆΠ½ΠΈ
    ["Foo", "Bar", ..] => println!("Baz"),

    // ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π° всичко, Π½ΠΎ послСдният Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ трябва Π΄Π° бъдС "!".
    [.., β€œ!”] => println!(β€œ!!!”),

    // Π² началния срСз Π²ΠΊΠ»ΡŽΡ‡Π²Π°ΠΌΠ΅ всичко с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° послСдния Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° бъдС β€œz”
    [start @ .., "z"] => println!("Π·Π°ΠΏΠΎΡ‡Π²Π° с: {:?}", Π½Π°Ρ‡Π°Π»ΠΎ),

    // Π² крайния срСз поставямС всичко с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° Π΅ β€žaβ€œ.
    ["a", ΠΊΡ€Π°ΠΉ @ ..] => println!("Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° с: {:?}", ΠΊΡ€Π°ΠΉ),

    ΠΏΠΎΡ‡ΠΈΠ²ΠΊΠ° => println!("{:?}", ΠΏΠΎΡ‡ΠΈΠ²ΠΊΠ°),
    }
    }

  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Π½ΠΎΠ² макрос β€žΡΡŠΠ²ΠΏΠ°Π΄Π°!β€œ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈΠ·Ρ€Π°Π· ΠΈ шаблон ΠΊΠ°Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄ ΠΈ Π²Ρ€ΡŠΡ‰Π° β€žtrueβ€œ, Π°ΠΊΠΎ ΡˆΠ°Π±Π»ΠΎΠ½ΡŠΡ‚ съвпада с ΠΈΠ·Ρ€Π°Π·Π°. Π¨Π°Π±Π»ΠΎΠ½ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ β€ž|β€œ. ΠΈ Π°ΠΊΠΎ".

    match self.partial_cmp(other) {
    Някои (По-ΠΌΠ°Π»ΠΊΠΎ) => вярно,
    _ => нСвярно,
    }

    съвпада!(self.partial_cmp(other), Some(Less))

    Π½Π΅ΠΊΠ° foo = 'f';
    assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));

    let bar = Some(4);
    assert!(съвпада!(bar, Some(x) if x > 2));

  • Π’ ΠΏΠ°Π½ΠΈΠΊ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° сС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅
    Ρ‚ΠΈΠΏΠΎΠ²Π΅ Option ΠΈ Result, сСга ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ с Π²Ρ€ΡŠΠ·ΠΊΠ° към ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΡ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅, вмСсто Π²Ρ€ΡŠΠ·ΠΊΠΈ към ΠΊΠΎΠ΄Π°, ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‰ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π² libcore. НапримСр промяната засяга извикванията Π·Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ ΠΈ ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅ Π½Π°Π΄ Option::None ΠΈΠ»ΠΈ сС срива ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° unwrap_err,expect,expect_err ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° Ρ‚ΠΈΠΏΠ° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚.

  • ΠœΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΡŠΡ‚ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Cargo осигурява Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ замСстванС Π½Π° β€žproc_macro crateβ€œ Π² Π±Π»ΠΎΠΊΠ° β€žexternβ€œ Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ с ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΈ макроси. Π’Π°Π·ΠΈ промяна позволява Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° "use" Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π° към ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΈ макроси, Π±Π΅Π· Π΄Π° сС Π½Π°Π»Π°Π³Π° Π΄Π° сС ΡƒΠΊΠ°Π·Π²Π° "extern crate proc_macro;" Π² ΠΊΠΎΠ΄Π°. НапримСр, Π°ΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ€Π΅Π΄Π° β€žuse proc_macro::TokenStream;β€œ, Ρ‚ΠΎΠ³Π°Π²Π° ΠΊΠΎΠ΄ΡŠΡ‚ Π²Π΅Ρ‡Π΅ Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π°ΠΊΠΎ β€žextern crate proc_macro;β€œ бъдС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ ΠΎΡ‚ Π½Π΅Π³ΠΎ.
  • Π Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ са Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π’ iter::Empty Π΄ΠΎΠ±Π°Π²ΠΈ ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ ΠΈ синхронизиранС Π·Π° всякакви T стойности.
    Pin Π·Π° обаТдания::{map_unchecked, map_unchecked_mut} доставСни ΠΎΡ‚ нСобходимостта ΠΎΡ‚ Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° стойност Π½Π° Ρ‚ΠΈΠΏ Π·Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ "Sized".
    Π’ io::Cursor изпълнСни PartialEq ΠΈ Eq. ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ β€žconstβ€œ опрСдСля Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ във всСки контСкст вмСсто константи, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΎ Π·Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Layout::new.

  • Нова част ΠΎΡ‚ API Π΅ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Π΅Π½Π° Π² стабилната катСгория, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ стабилизиранитС CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::ΠΊΠ»ΡŽΡ‡, DebugMap::стойност,
    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-Π±ΠΈΡ‚ΠΎΠ²ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€