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

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

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

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

  • ΠœΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΡŠΡ‚ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Cargo Π΄ΠΎΠ±Π°Π²ΠΈ инструмСнти Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ рСгистри Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚Π½ΠΎ с публичния Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ crates.io. НапримСр, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ΠΏΠ°Ρ‚Π΅Π½Ρ‚ΠΎΠ²Π°Π½ΠΈ прилоТСния Π²Π΅Ρ‡Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ свой собствСн частСн Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΈ изброяванС Π½Π° зависимости Π² Cargo.toml, ΠΈ Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ ΠΌΠΎΠ΄Π΅Π» Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° вСрсии, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° crates.io Π·Π° своитС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π°Ρ‚ зависимости към Π΄Π²Π°Ρ‚Π° каси. io ΠΈ към вашия собствСн Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€.

    Π—Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ външни рСгистри към .cargo/config (Π½Π°ΠΌΠΈΡ€Π°Ρ‰ΠΈ сС Π² $HOME ΠΈΠ»ΠΈ Π² дирСкторията Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°)
    ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½ΠΎ Ρ€Π°Π·Π΄Π΅Π» β€ž[рСгистри]β€œ, Π° Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ външСн Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€, опцията β€žΡ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€β€œ сС появи Π² описаниСто Π½Π° всяка зависимост Π² Cargo.toml. Π—Π° Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ с Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€, просто поставСтС Ρ‚ΠΎΠΊΠ΅Π½Π° Π·Π° удостовСряванС във Ρ„Π°ΠΉΠ»Π° ~/.cargo/credentials ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°
    "cargo login --registry=my-registry" ΠΈ Π·Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ -
    "cargo publish -registry=my-registry";

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ пълна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° β€ž?β€œ. Π² тСстовС doctests, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ ΠΊΠΎΠ΄ ΠΎΡ‚ докумСнтацията ΠΊΠ°Ρ‚ΠΎ тСстовС. ΠŸΡ€Π΅Π΄ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€
    "?" ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС Π½Π° тСст само ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° функцията β€žfn main()β€œ ΠΈΠ»ΠΈ във Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ β€ž#[test]β€œ;

  • Π’ пСрсонализирани Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΈ макроси прСдоставСни Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ (β€ž#[attr($tokens)]β€œ, β€ž#[attr[$tokens]] ΠΈ #[attr{$tokens}]β€œ). ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ…Π° Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ посочСни само Π² Π΄ΡŠΡ€Π²ΠΎΠ²ΠΈΠ΄Π½Π°/рСкурсивна Ρ„ΠΎΡ€ΠΌΠ° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π½ΠΈΠ·ΠΎΠ²ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€ž#[foo(bar, baz(quux, foo = β€žbarβ€œ))]β€œ, Π½ΠΎ сСга Π΅ възмоТно Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ изброявания (' #[range(0. .10)]') ΠΈ конструкции ΠΊΠ°Ρ‚ΠΎ β€ž#[bound(T: MyTrait)]”;
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ (Ρ‡Π΅Ρ€Ρ‚Π°) ΠžΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎΡ‚ ΠΈ TryInto, позволяващи прСобразувания Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. НапримСр ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΊΠ°Ρ‚ΠΎ from_be_bytes с Ρ†Π΅Π»ΠΈ числа ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ масиви ΠΊΠ°Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄, Π½ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ чСсто ΠΈΠ΄Π²Π°Ρ‚ Π² Ρ‚ΠΈΠΏ Slice ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ масиви ΠΈ срСзовС Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ€ΡŠΡ‡Π½ΠΎ. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π½ΠΎΠ²ΠΈ характСристики, посочСната опСрация ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Ρ€Π΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° .try_into(), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, β€žlet num = u32::from_be_bytes(slice.try_into()?)β€œ. Π—Π° прСобразувания, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈΠ½Π°Π³ΠΈ са ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ Ρ‚ΠΈΠΏ u8 към u32), Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Ρ‚ΠΈΠΏ Π³Ρ€Π΅ΡˆΠΊΠ° Π½Π΅ΠΏΠΎΠ³Ρ€Π΅ΡˆΠΈΠΌ, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅
    TryFrom Π·Π° всички ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° β€žΠžΡ‚β€œ;

  • Ѐункцията Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½Π° CommandExt::before_exec, ΠΊΠΎΠ΅Ρ‚ΠΎ позволявашС ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ Π΄Π° бъдС изпълнСн ΠΏΡ€Π΅Π΄ΠΈ стартиранС Π½Π° exec, ΠΊΠΎΠΉΡ‚ΠΎ бСшС изпълнСн Π² контСкста Π½Π° Π΄ΡŠΡ‰Π΅Ρ€Π΅Π½ процСс, Ρ€Π°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ слСд ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° fork(). ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΈΠ²Π° условия някои рСсурси Π½Π° родитСлския процСс, ΠΊΠ°Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ дСскриптори ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€Π°Π½ΠΈ области Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π΅Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅.
    ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ опасна функция вмСсто before_exec CommandExt::pre_exec.

  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΈ Ρ†Π΅Π»ΠΈ числа със Π·Π½Π°ΠΊ ΠΈ Π±Π΅Π· Π·Π½Π°ΠΊ, Π²Π°Ρ€ΠΈΡ€Π°Ρ‰ΠΈ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‚ 8 Π΄ΠΎ 64 Π±ΠΈΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, AtomicU8), ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ със Π·Π½Π°ΠΊ NonZeroI[8|16|32|64|128].
  • Нова част ΠΎΡ‚ API Π΅ прСмСстСна Π² стабилната катСгория, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ SystemTime са стабилизирани ::checked_[add|sub]. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ iter::from_fn ΠΈ iter::successors са стабилизирани;
  • Π—Π° всички Ρ†Π΅Π»ΠΈ числа са Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ checked_pow, saturating_pow, wrapping_pow ΠΈ overflowing_pow;
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Ρ‡Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° опцията Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ β€ž-C linker-plugin-ltoβ€œ.

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

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