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

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

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

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

  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ масиви всякакъв Ρ€Π°Π·ΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π°, ΠΏΠΎΡ€Π°Π΄ΠΈ Π½Π΅Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ ΠΎΠ±Ρ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° всички Ρ†Π΅Π»ΠΈ числа, стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡΡˆΠ΅ Π²Π³Ρ€Π°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° характСристики само Π·Π° масиви с Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎ 32 Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° (характСристикитС Π·Π° всСки Ρ€Π°Π·ΠΌΠ΅Ρ€ бяха статично Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ). Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° функционалността Π½Π° постояннитС Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½ΠΈ срСдства (β€žconst Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½ΠΈβ€œ), стана възмоТно Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° масива, Π½ΠΎ Ρ‚Π΅ всС ΠΎΡ‰Π΅ Π½Π΅ са Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² стабилнитС Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ са Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΈ са сСга участващи Π² стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ‡Π΅Ρ€Ρ‚ΠΈ Π½Π° масив ΠΎΡ‚ всякакъв Ρ€Π°Π·ΠΌΠ΅Ρ€.

    НапримСр, слСдната конструкция Π² Rust 1.47 Ρ‰Π΅ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° масив, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π±ΠΈ Π΄ΠΎΠ²Π΅Π»ΠΎ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ°:

    fn main() {
    Π½Π΅ΠΊΠ° xs = [0; 34];

    println!("{:?}", xs);
    }

  • ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½ ΠΈΠ·Ρ…ΠΎΠ΄ Π½Π° ΠΏΠΎ-къси слСди (backtrace), ΠΈΠ·Ρ…ΠΎΠ΄ Π² Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΈ ситуации. Π•Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ прСдставляват интСрСс Π² ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ситуации, Π½ΠΎ Π·Π°Ρ‚Ρ€ΡƒΠΏΠ²Π°Ρ‚ ΠΈΠ·Ρ…ΠΎΠ΄Π° ΠΈ ΠΎΡ‚Π²Π»ΠΈΡ‡Π°Ρ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ основнитС ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, сС ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΎΡ‚ трасиранСто. Π—Π° Π΄Π° Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ пълно прослСдяванС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата "RUST_BACKTRACE=full". НапримСр Π·Π° ΠΊΠΎΠ΄Π°

    fn main() {
    ΠΏΠ°Π½ΠΈΠΊΠ°!();
    }

    ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° прослСдяванСто сС извСТдашС Π½Π° 23 Π΅Ρ‚Π°ΠΏΠ°, Π½ΠΎ сСга Ρ‰Π΅ бъдС Π½Π°ΠΌΠ°Π»Π΅Π½ΠΎ Π΄ΠΎ
    3 ΡΡ‚ΡŠΠΏΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈ позволяват Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° схванСтС ΡΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π°:

    нишка 'main' сС паникьоса ΠΏΡ€ΠΈ 'явна ΠΏΠ°Π½ΠΈΠΊΠ°', src/main.rs:2:5
    ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ прослСдяванС Π½Π° стСка:
    0: std::panicking::begin_panic
    Π² /rustc/d…d75a/library/std/src/panicking.rs:497
    1: дСтска ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ°::Π³Π»Π°Π²Π½Π°
    Π½Π° ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    Π² /rustc/d…d75a/library/core/src/ops/function.rs:227

  • ΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ rustc Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° LLVM 11 (РъТда ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° LLVM ΠΊΠ°Ρ‚ΠΎ Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄). Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ с ΠΏΠΎ-стари LLVM, Π΄ΠΎ вСрсия 8, сС Π·Π°ΠΏΠ°Π·Π²Π°, Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ (Π² rust-lang/llvm-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚) сСга ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° LLVM 11. ΠžΡ‡Π°ΠΊΠ²Π° сС LLVM 11 Π΄Π° бъдС пуснат Π² слСдващитС Π΄Π½ΠΈ.
  • На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Windows ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ rustc осигурява ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° цСлостта Π½Π° контролния ΠΏΠΎΡ‚ΠΎΠΊ (Control Flow Guard), Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ„Π»Π°Π³Π° β€ž-C control-flow-guardβ€œ. На Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ Ρ‚ΠΎΠ·ΠΈ Ρ„Π»Π°Π³ засСга сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°.
  • Нова част ΠΎΡ‚ API Π΅ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Π΅Π½Π° Π² катСгорията стабилни, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ стабилизирани
    Π˜Π΄Π΅Π½Ρ‚ :: new_raw,
    Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½::Π΅_ΠΏΡ€Π°Π·Π΅Π½,
    RangeInclusive::is_empty,
    Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚::as_deref,
    Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚::as_deref_mut,
    Vec::Ρ‚Π΅Ρ‡,
    ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» :: отмСстванС ΠΎΡ‚,
    f32::TAU ΠΈ
    f64::TAU.

  • ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ β€žconstβ€œ, ΠΊΠΎΠΉΡ‚ΠΎ опрСдСля Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ във всСки контСкст вмСсто константи, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅:
    • Π½ΠΎΠ²ΠΎ Π·Π° всички Ρ†Π΅Π»ΠΈ числа, Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΡ‚ Π½ΡƒΠ»Π°;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub ΠΈ saturating_mul Π·Π° всички Ρ†Π΅Π»ΠΈ числа;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace ΠΈ is_ascii_control Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ char ΠΈ u8.
  • Π—Π° FreeBSD участващи инструмСнтариум ΠΎΡ‚ FreeBSD 11.4 (FreeBSD 10 Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° LLVM 11).

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

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