ИздаванС на Rust 1.87

Π’ дСня Π½Π° ΠΏΡ€Π°Π·Π½ΡƒΠ²Π°Π½Π΅ Π½Π° Π΄Π΅ΡΠ΅Ρ‚Π³ΠΎΠ΄ΠΈΡˆΠ½ΠΈΠ½Π°Ρ‚Π° ΠΎΡ‚ ΠΈΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° програмния Π΅Π·ΠΈΠΊ Rust 1.0 (ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Rust Π΅ основан ΠΏΡ€Π΅Π· 2006 Π³., вСрсия 0.1 Π΅ създадСна ΠΏΡ€Π΅Π· 2012 Π³., Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° стабилна вСрсия Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° ΠΏΡ€Π΅Π· 2015 Π³.) Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π° вСрсия Rust 1.87. Π•Π·ΠΈΠΊΡŠΡ‚ Π°ΠΊΡ†Π΅Π½Ρ‚ΠΈΡ€Π° Π½Π° бСзопасната Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ прСдоставя срСдства Π·Π° постиганС Π½Π° висок ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ ΠΏΡ€ΠΈ изпълнСниС Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ, Π±Π΅Π· Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‡ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ ΠΈ runtime (runtime сС свСТда Π΄ΠΎ основна инициализация ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°).

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

БСзопасната Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π² Rust сС осигурява ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° компилация Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ, прослСдяванС Π½Π° собствСността Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅, ΠΎΡ‚Ρ‡ΠΈΡ‚Π°Π½Π΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ (области Π½Π° видимост) ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° правилността Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π°. Rust ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΏΡ€Π΅Π΄Π»Π°Π³Π° срСдства Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΡ€Π΅ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Ρ†Π΅Π»ΠΈ числа, изисква Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½Π° инициализация Π½Π° стойноститС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ, подобрява ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΏΡ€ΠΈΠ»Π°Π³Π° концСпцията Π·Π° нСизмСняСмост (immutable) Π½Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° силна статична типизация, Π·Π° Π΄Π° сС ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚ логичСскитС Π³Ρ€Π΅ΡˆΠΊΠΈ.

Основни нововъвСдСния:

  • Π’ стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ (anonymous pipe). Π—Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ std::io::pipe(), ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΡΡŠΡ‡Π΅Ρ‚Π°Π½ΠΈΠ΅ с std::process::Command Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° стандартнитС Π²Ρ…ΠΎΠ΄Π½ΠΈ ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π·Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ stdout ΠΈ stderr. use std::process::Command; use std::io::Read; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new(Β«path/to/binΒ») // ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π° stdout ΠΈ stderr Π² Π΅Π΄ΠΈΠ½ ΠΊΠ°Π½Π°Π» .stdout(send.try_clone()?) .stderr(send) .spawn()?; let mut output = Vec::new(); recv.read_to_end(&mut output)?; assert!(command.wait()?.success());
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Π΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΎΡ‚ бСзопасния ΠΊΠΎΠ΄ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Intrinsics) std::arch. ΠŸΡ€ΠΎΠΌΡΠ½Π°Ρ‚Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π° Π·Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ std::arch, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈ с unsafe само ΠΏΠΎΡ€Π°Π΄ΠΈ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎΡΡ‚Ρ‚Π° ΠΈΠΌ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° функционалност, Π°ΠΊΠΎ Ρ‚Π°Π·ΠΈ функционалност Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°. НапримСр, _mm256_add_epi32 ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π° ΠΎΡ‚ бСзопасния ΠΊΠΎΠ΄, Π°ΠΊΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ β€˜#[target_feature(enable = Β«avx2Β»)]’.
  • ΠžΡ‚ Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Β«asm!Β» с асСмблСрСн ΠΊΠΎΠ΄ Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π΅Ρ…ΠΎΠ΄ΠΈ към Π±Π»ΠΎΠΊΠΎΠ²Π΅ с ΠΊΠΎΠ΄ Π½Π° Π΅Π·ΠΈΠΊΠ° Rust, ΠΊΠΎΠ΅Ρ‚ΠΎ опростява Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° нискоуровнСво ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ядрото ΠΈΠ»ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° взаимодСйствиС с Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π°. Π’ΠΎΡ‡ΠΊΠ°Ρ‚Π° Π·Π° ΠΏΡ€Π΅Ρ…ΠΎΠ΄ Π·Π° асСмблСрната ΠΊΠΎΠΌΠ°Π½Π΄Π° Β«jmpΒ» сС Π·Π°Π΄Π°Π²Π° Π² макроса Β«asm!Β» с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π½ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ Β«labelΒ», ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ Π±Π»ΠΎΠΊΠΎΠ²ΠΎ изразяванС с ΠΊΠΎΠ΄ Π½Π° Π΅Π·ΠΈΠΊΠ° Rust. unsafe { asm!( Β«jmp {}Β», label { println!(Β«Jumped from asm!Β»); } ); }
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π΄Π° сС опрСдСлят ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚ Π² опрСдСлСнията Π½Π° Ρ‚ΠΈΠΏΠ°ΠΆΠΈΡ‚Π΅ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π²ΡŠΡ€Π½Π°Ρ‚ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΠΎΠ²Π΅ impl Trait. trait Foo { fn method(&'a self) -> impl Sized; type Implicit1: Sized; fn method_desugared(&'a self) -> Self::Implicit1; fn precise(&'a self) -> impl Sized + use; type Implicit2: Sized; fn precise_desugared(&'a self) -> Self::Implicit2; }
  • Π’ катСгорията стабилни Π΅ ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½Π° Π½ΠΎΠ²Π° порция API, ΠΊΠ°Ρ‚ΠΎ са стабилизирани ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΈΠΏΠ°ΠΆΠΈΡ‚Π΅:
    • Vec::extract_if
    • vec::ExtractIf
    • LinkedList::extract_if
    • linked_list::ExtractIf
    • ::split_off
    • ::split_off_mut
    • ::split_off_first
    • ::split_off_first_mut
    • ::split_off_last
    • ::split_off_last_mut
    • String::extend_from_within
    • os_str::Display
    • OsString::display
    • OsStr::display
    • io::pipe
    • io::PipeReader
    • io::PipeWriter
    • impl From for OwnedHandle
    • impl From for OwnedHandle
    • impl From for Stdio
    • impl From for Stdio
    • impl From for OwnedFd
    • impl From for OwnedFd
    • Box<MaybeUninit>::write
    • impl TryFrom<Vec> for String
    • ::offset_from_unsigned
    • ::byte_offset_from_unsigned
    • ::offset_from_unsigned
    • ::byte_offset_from_unsigned
    • NonNull::offset_from_unsigned
    • NonNull::byte_offset_from_unsigned
    • ::cast_signed
    • NonZero::::cast_signed.
    • ::cast_unsigned.
    • NonZero::::cast_unsigned.
    • ::is_multiple_of
    • ::unbounded_shl
    • ::unbounded_shr
    • ::unbounded_shl
    • ::unbounded_shr
    • ::midpoint
    • ::from_utf8
    • ::from_utf8_mut
    • ::from_utf8_unchecked
    • ::from_utf8_unchecked_mut
  • ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Β«constΒ» Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅:
    • core::str::from_utf8_mut
    • ::copy_from_slice
    • SocketAddr::set_ip
    • SocketAddr::set_port,
    • SocketAddrV4::set_ip
    • SocketAddrV4::set_port,
    • SocketAddrV6::set_ip
    • SocketAddrV6::set_port
    • SocketAddrV6::set_flowinfo
    • SocketAddrV6::set_scope_id
    • char::is_digit
    • char::is_whitespace
    • <N::as_flattened
    • <N::as_flattened_mut
    • String::into_bytes
    • String::as_str
    • String::capacity
    • String::as_bytes
    • String::len
    • String::is_empty
    • String::as_mut_str
    • String::as_mut_vec
    • Vec::as_ptr
    • Vec::as_slice
    • Vec::capacity
    • Vec::len
    • Vec::is_empty
    • Vec::as_mut_slice
    • Vec::as_mut_ptr
  • ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚Π° Π΅ Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° Π½ΠΈΠ²ΠΎ Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° i586-pc-windows-msvc. ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° сС Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° i686-pc-windows-msvc, която ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° инструкции SSE2. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° i586-pc-windows-msvc Π²Π΅Ρ‡Π΅ няма смисъл, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π° Windows 10 Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° SSE2, Π° ΠΏΠΎ-Ρ€Π°Π½Π½ΠΈ вСрсии Π½Π° Windows Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π² Rust.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster