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

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

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

Основни ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ:

  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΏΡ€ΠΈΠ·Π½Π°Ρ†ΠΈ Π·Π° масиви с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π°, ΠΏΠΎΡ€Π°Π΄ΠΈ Π½Π΅Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ ΠΎΠ±Ρ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° всички Ρ†Π΅Π»ΠΈ числа, стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡΡˆΠ΅ Π²Π³Ρ€Π°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° характСристики само Π·Π° масиви с Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎ 32 Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° (характСристикитС Π·Π° всСки Ρ€Π°Π·ΠΌΠ΅Ρ€ бяха статично Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ). Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° const generics функционалност стана възмоТно Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° масива, Π½ΠΎ Ρ‚Π΅ всС ΠΎΡ‰Π΅ Π½Π΅ са Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² стабилнитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ°, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ са Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΈ сСга сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ масиви ΠΎΡ‚ всякакъв Ρ€Π°Π·ΠΌΠ΅Ρ€.
    НапримСр, слСдната конструкция Π² 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 (Rust ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° LLVM ΠΊΠ°Ρ‚ΠΎ Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄). Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ със стария LLVM Π΄ΠΎ вСрсия 8 сС Π·Π°ΠΏΠ°Π·Π²Π°, Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ (Π² rust-lang/llvm-project) Π²Π΅Ρ‡Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° LLVM 11, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΎΡ‡Π°ΠΊΠ²Π° скоро Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅ Π΄Π½ΠΈ.
  • На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Windows ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ rustc прСдоставя ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° цСлостта Π½Π° контролния ΠΏΠΎΡ‚ΠΎΠΊ (Control Flow Guard), Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ„Π»Π°Π³Π° β€ž-C control-flow-guardβ€œ. На Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ Ρ‚ΠΎΠ·ΠΈ Ρ„Π»Π°Π³ засСга сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°.
  • Нова част ΠΎΡ‚ API Π΅ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Π΅Π½Π° Π² стабилната катСгория, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ стабилизирани Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , 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

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

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