ΠΠΈΠ³Π΅Π» ΠΡ Π΅Π΄Π° (Miguel Ojeda), Π°Π²ΡΠΎΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Rust-for-Linux, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈ Π½Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux ΠΏΡΡΠΊΠ°Π½Π΅ΡΠΎ Π½Π° v6 ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π½Π° Π΅Π·ΠΈΠΊΠ° Rust. Π’ΠΎΠ²Π° Π΅ ΡΠ΅Π΄ΠΌΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΡΡΠΎΠ²Π΅ΡΠ΅, ΠΊΠ°ΡΠΎ Π΅ Π²Π·Π΅ΡΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΏΡΡΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ, ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π±Π΅Π· Π½ΠΎΠΌΠ΅Ρ Π½Π° Π²Π΅ΡΡΠΈΡ. ΠΠΎΠ΄ΠΊΡΠ΅ΠΏΠ°ΡΠ° Π·Π° Rust ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π°, Π½ΠΎ Π²Π΅ΡΠ΅ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΠΊΠ»ΠΎΠ½Π° linux-next ΠΈ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π½Π°ΠΏΡΠ΅Π΄Π½Π°Π»Π°, Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΈ ΡΠ»ΠΎΠ΅Π²Π΅ Π½Π°Π΄ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈ Π·Π° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° ΡΠ΅ ΡΠΈΠ½Π°Π½ΡΠΈΡΠ° ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Google ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡΠ° ISRG (Internet Security Research Group), ΠΊΠΎΡΡΠΎ Π΅ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π» Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Letβs Encrypt ΠΈ ΠΏΠΎΠ΄ΠΏΠΎΠΌΠ°Π³Π° ΠΏΠΎΠΏΡΠ»ΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° HTTPS ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π·Π° ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ.
Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ:
- ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΡΡ ΠΈ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° alloc, ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½Π° ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΡΡΡΡΠΎΡΠ½ΠΈΡ Π½Π° "panic" ΠΏΡΠΈ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, ΡΠ° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π΄ΠΎ Π²Π΅ΡΡΠΈΡ Rust 1.60, Π² ΠΊΠΎΡΡΠΎ Π΅ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ°ΡΠ° Π·Π° ΡΠ΅ΠΆΠΈΠΌΠ° "maybe_uninit_extra", ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΠΏΠ°ΡΡΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠ΄ΡΠΎΡΠΎ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° (ΡΠ΅ΡΡΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°), ΡΡΠ΅Π· ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°Π½ΠΎΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΄ΡΠ΅Π½ΠΎΡΠΎ API, Π² ΡΠ΅ΡΡΠΎΠ²Π΅ KUnit, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ.
- ΠΡΠΈΠ΅ΡΠΈ ΡΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ, ΡΡΠ³Π»Π°ΡΠ½ΠΎ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΎΠ΄ΡΡ Π΄ΠΎ ΠΈΠ·Ρ ΠΎΠ΄ Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΡ Π»ΠΈΠ½ΡΠ΅ΡΠ° Clippy, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΊΠΎΠ΄ΡΡ Π·Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° Π΅Π·ΠΈΠΊΠ° Rust.
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π΅ Π½Π°ΡΠ°Π»Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° "net" Ρ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ° ΠΊΠΎΠ΄Π° Π½Π° Π΅Π·ΠΈΠΊΠ° Rust Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ°ΠΊΠΈΠ²Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ Π½Π° ΡΠ΄ΡΠΎΡΠΎ ΠΊΠ°ΡΠΎ "Namespace" (Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΡΠ΄ΡΠΎΡΠΎ "struct net"), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΈ Π·Π° IPv6.
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π΅ Π½Π°ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° Π·Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ (async), ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΌΠΎΠ΄ΡΠ» kasync. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π·Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°Π½Π΅ Ρ TCP ΡΠΎΠΊΠ΅ΡΠΈ: async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).await?; if n == 0 { return Ok(()); } stream.write_all(&buf[..n]).await?; } }
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΌΠΎΠ΄ΡΠ» net::filter Π·Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°Π½Π΅ Ρ ΡΠΈΠ»ΡΡΠΈ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΏΡΠΈΠΌΠ΅Ρ rust_netfilter.rs Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΈΠ»ΡΡΡ Π½Π° Π΅Π·ΠΈΠΊΠ° Rust.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΡΡΠΈΡ ΠΌΡΡΠ΅ΠΊΡ smutex::Mutex, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΡΠΈΠ²ΡΡΠ·Π²Π°Π½Π΅ (pinning).
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° NoWaitLock, ΠΊΠΎΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ Π·Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ ΠΈ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π·Π°Π΅ΡΠΎΡΡ ΠΎΡ Π΄ΡΡΠ³ ΠΏΠΎΡΠΎΠΊ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΎΠΏΠΈΡ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π²ΠΌΠ΅ΡΡΠΎ ΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΡΠΈΡ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° RawSpinLock, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π° Ρ raw_spinlock_t Π² ΡΠ΄ΡΠΎΡΠΎ, ΠΏΡΠΈΠ»Π°Π³Π°Π½Π° ΠΊΡΠΌ ΡΠ΅ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅.
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΠΈΠΏ ARef Π·Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΠΊΡΠΌ ΠΎΠ±Π΅ΠΊΡ, Π½Π° ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° Π±ΡΠΎΠ΅Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ (always-refcounted).
- Π Π±Π΅ΠΊΠ΅Π½Π΄Π° rustc_codegen_gcc, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libgccjit ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° GCC ΠΊΠ°ΡΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π° ΠΊΠΎΠ΄ Π² rustc Π·Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ Π² GCC Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° (bootstrapping) rustc. ΠΠΎΠ΄ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² rustc Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π½Π° ΠΊΠΎΠ΄, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° GCC, Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°ΠΌΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ rustc. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ GCC 12.1 ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ Π² libgccjit, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π° rustc_codegen_gcc. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π΅ Π² Ρ ΠΎΠ΄ Π·Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° rustc_codegen_gcc Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° rustup.
- ΠΡΠ±Π΅Π»ΡΠ·Π²Π° ΡΠ΅ Π½Π°ΠΏΡΠ΅Π΄ΡΠΊ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° GCC ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π° gccrs Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° Rust Π½Π° Π±Π°Π·Π° GCC. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π°Π΄ gccrs ΡΠ°Π±ΠΎΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΏΡΠ»Π½ΠΎ Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½Π΅ Π΄Π²Π°ΠΌΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ.
ΠΠ°ΠΏΠΎΠΌΠ½ΡΠΌΠ΅, ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π²Π°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Rust ΠΊΠ°ΡΠΎ Π²ΡΠΎΡΠΈ Π΅Π·ΠΈΠΊ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° ΡΠ΄ΡΠΎΡΠΎ. ΠΠΎΠ΄ΠΊΡΠ΅ΠΏΠ°ΡΠ° Π·Π° Rust ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΊΠ°ΡΠΎ ΠΎΠΏΡΠΈΡ, ΠΊΠΎΡΡΠΎ Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ Π½Π΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Rust Π² Π±ΡΠΎΡ Π½Π° Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π° ΡΠ΄ΡΠΎΡΠΎ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Rust Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠΈ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΡΡΠΈΠ»ΠΈΡ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΈ ΠΈ ΠΏΠΎ-ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½ΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ, Π»ΠΈΡΠ΅Π½ΠΈ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΊΠ°ΡΠΎ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ, ΡΠ°Π·ΡΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ Π½Π° Π½ΡΠ»Π΅Π²ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ ΠΈΠ·Π²ΡΠ½ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° Π±ΡΡΠ΅ΡΠ°.
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π² Rust ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΡΡΠ΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈΡΠ΅, ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ ΠΈ ΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΆΠΈΠ²ΠΎΡ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ (ΠΎΠ±Ρ
Π²Π°Ρ), ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΡΠ΅Π· ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎΡΡΡΠ° Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°. Rust ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° Π·Π°ΡΠΈΡΠ° ΠΎΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ½ΠΈ ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½ΠΈΡ, ΠΈΠ·ΠΈΡΠΊΠ²Π° Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΈ ΡΠΏΠΎΡΡΠ΅Π±Π°, ΠΏΠΎ-Π΄ΠΎΠ±ΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΡΠΈΠ»Π°Π³Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ (immutable) Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈΡΠ΅ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠΈΠ»Π½Π° ΡΡΠ°ΡΠΈΡΠ½Π° ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
