Выпуск Rust 1.96. ΠžΡ†Π΅Π½ΠΊΠ° пригодности Rust для создания ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ ΠΊ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌ

È stato rilasciato il linguaggio di programmazione Rust 1.96, fondato dal progetto Mozilla ma ora sviluppato sotto gli auspici dell'organizzazione indipendente no-profit Rust Foundation. Il linguaggio si concentra sulla sicurezza della memoria e fornisce strumenti per ottenere un elevato parallelismo nell'esecuzione dei task, senza l'uso di un garbage collector e di un runtime (il runtime è ridotto all'inizializzazione di base e alla manutenzione della libreria standard).

I metodi di gestione della memoria di Rust sono progettati per eliminare gli errori nella manipolazione dei puntatori e proteggere dai problemi derivanti dalla gestione della memoria di basso livello, come l'accesso alla memoria dopo che è stata liberata, la dereferenziazione dei puntatori nulli, i buffer overrun e così via. Il progetto sta sviluppando il gestore di pacchetti Cargo per distribuire le librerie, facilitare le build e gestire le dipendenze. Il repository crates.io è gestito per l'hosting delle librerie.

La sicurezza della memoria viene fornita in Rust in fase di compilazione attraverso il controllo dei riferimenti, tenendo traccia della proprietΓ  dell'oggetto, tenendo traccia della durata dell'oggetto (scopi) e valutando la correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche protezione contro gli overflow di numeri interi, richiede l'inizializzazione obbligatoria dei valori delle variabili prima dell'uso, gestisce meglio gli errori nella libreria standard, applica il concetto di riferimenti e variabili immutabili per impostazione predefinita, offre una forte tipizzazione statica per ridurre al minimo gli errori logici.

Principali innovazioni:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ range с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… для Π·Π°ΠΌΠ΅Π½Ρ‹ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Range, RangeInclusive, RangeToInclusive ΠΈ RangeFrom, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Π² Copy-структурах. Π’ΠΈΠΏ Range опрСдСляСт Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ допустимым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (Π½ΠΎ Π½Π΅ входящим Π² Π½Π΅Π³ΠΎ), Ρ‚ΠΈΠΏ RangeFrom опрСдСляСт числа начиная с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ значСния, Π° Ρ‚ΠΈΠΏ RangeInclusive β€” значСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° с ΠΎΠ±Π΅ΠΈΠΌΠΈ Π΅Π³ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ. Π’ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… выпусках Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ появятся Ρ‚ΠΈΠΏΡ‹ RangeFull ΠΈ RangeTo, старая рСализация Π±ΡƒΠ΄Π΅Ρ‚ пСрСнСсСна Π² core::range::legacy::*, Π° синтаксис Β«N..MΒ» ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄ΡƒΡ‚ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ‚ΠΈΠΏΠΎΠ².

    НовыС Ρ‚ΠΈΠΏΡ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ вмСсто Ρ‚ΠΈΠΏΠ°ΠΆΠ° Iterator Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Ρ‚ΠΈΠΏΠ°ΠΆ IntoIterator, Ρ‚.Π΅. вмСсто встроСнного ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π² ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ копирования (Ρ‚ΠΈΠΏΠ°ΠΆ Copy, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ значСния Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· простоС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅), которая Ρ€Π°Π½Π΅Π΅ Π±Ρ‹Π»Π° нСдоступна ΠΈΠ·-Π·Π° нСсовмСстимости с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ со встроСнными ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ.
    НапримСр, Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ срСза Π² структуру, которая ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ копируСтся Π±Π΅Π· Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сохранСния Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

    use core::range::Range;

    #[derive(Clone, Copy)]
    pub struct Span(Range<usize>);

    impl Span {
    pub fn of(self, s: &str) -> &str {
    &s[self.0]
    }
    }

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ макросы Β«assert_matches!Β» ΠΈ Β«debug_assert_matches!Β», ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠ΅ соотвСтствиС значСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ расхоТдСнии. ΠžΡ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Β«assert!(matches!(..))Β» ΠΈ Β«debug_assert!(matches!(..))Β» Π½ΠΎΠ²Ρ‹Π΅ макросы ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ со значСниями, Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΌΠΈ сбой. Для избСТания пСрСсСчСний со сторонними макросами, поставляСмыми с Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½ΠΎΠ²Ρ‹Π΅ макросы Ρ‚Ρ€Π΅Π±ΡƒΡŽ явного ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Β«core::assert_matchesΒ».

    use core::assert_matches;

    fn get_random_number() -> u32 {
    4
    }

    fn principale() {
    assert_matches!(get_random_number(), 1..=6);
    }

  • ΠŸΡ€ΠΈ сборкС для Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ WebAssembly ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ ΠΎΠΏΡ†ΠΈΠΈ Β«β€”allow-undefinedΒ», Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²ΡˆΠ΅ΠΉ связываниС ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈΡΡŒ Π² ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈΠ· модуля Β«envΒ». ΠŸΡ€ΠΈ сборкС для WebAssembly всС связанныС с ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉ символы Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. Для возвращСния старого повСдСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния Β«RUSTFLAGS=-Clink-arg=β€”allow-undefinedΒ» ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€˜#[link(wasm_import_module = Β«envΒ»)]Β» Π² ΠΊΠΎΠ΄Π΅.
  • Una nuova porzione dell'API Γ¨ stata spostata nella categoria stabile, inclusi i metodi e le implementazioni dei tratti sono stati stabilizzati:
    • assert_matches!
    • debug_assert_matches!
    • From<T> for AssertUnwindSafe<T>
    • From<T> for LazyCell<T, F>
    • From<T> for LazyLock<T, F>
    • core::range::RangeToInclusive
    • core::range::RangeToInclusiveIter
    • core::range::RangeFrom
    • core::range::RangeFromIter
    • core::range::Range
    • core::range::RangeIter
  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ Cargo устранСна ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ CVE-2026-5223, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для пСрСзаписи исходного ΠΊΠΎΠ΄Π° Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ crate-ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² локальном кэшС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ рСпозитория Ρ‡Π΅Ρ€Π΅Π· манипуляции с символичСскими ссылками Π²Π½ΡƒΡ‚Ρ€ΠΈ crate-Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ проявляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со сторонними рСпозиториями ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ рСпозитория crates.io, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² crates.io Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с символичСскими ссылками.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ (PDF) Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π°Π½Π°Π»ΠΈΠ·Π° пригодности языка Rust для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² ΠΈ встраиваСмых систСм с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ рСсурсами.
ИсслСдованиС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ STMicroelectronics ΠΏΡ€ΠΈ участии Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… СвропСйских унивСрситСтов. Π”Π²ΡƒΠΌ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π±Ρ‹Π»Π° поставлСна Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² STM32U585AI с ядром Arm Cortex-M33. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° создавала ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΡƒ Π½Π° Π‘ΠΈ, Π° вторая Π½Π° Rust.

ВСстированиС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ выявило Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… прСимущСств Π² использовании языка Π‘ΠΈ вмСсто Rust ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈ сравнСнии потрСблСния памяти ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, задСйствованиС написанного Π½Π° Rust систСмного runtime ΠΎΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ariel OS ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ потрСблСния памяти Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π° Rust Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° языкС Π‘ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ стСк для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ Π½Π° Π±Π°Π·Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ newlib.

Π Π°Π·ΠΌΠ΅Ρ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ составил 84100 Π±Π°ΠΉΡ‚ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π° Rust ΠΈ 76744 Π±Π°ΠΉΡ‚Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π° Π‘ΠΈ (Π½Π° 10% мСньшС), Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π² ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ΅ Π½Π° Rust оказалось Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠΆΠ΅ β€” 24640 Π±Π°ΠΉΡ‚ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΈΠ² 42608 Π±Π°ΠΉΡ‚ΠΎΠ². Π§Ρ‚ΠΎ касаСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚ΠΎ ΠΏΡ€ΠΈ тСстировании Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ², Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π·Π° 6 нСдСль, рСализация Π½Π° Rust Π² Π΄Π²Π° Ρ€Π°Π·Π° ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π»Π°, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° Π‘ΠΈ, Π½ΠΎ ΠΎΠ±Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ отставали ΠΎΡ‚ расчётной максимальной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ПослС 4 нСдСль, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΎΠ±Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ достигли ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π±Π»ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΠΊ расчётному максимуму.



Fonte: opennet.ru
Acquista hosting affidabile per siti con protezione DDoS, server VPS VDS πŸ”₯ Acquista un hosting web affidabile con protezione DDoS, server VPS e VDS | ProHoster