เบชเบฐเบšเบฑเบšเบ—เบตเบซเบปเบเบ‚เบญเบ‡ patches เบชเปเบฒเบฅเบฑเบš Linux kernel เบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบฒเบชเบฒ Rust

Miguel Ojeda, เบœเบนเป‰เบ‚เบฝเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ Rust-for-Linux, เป„เบ”เป‰เบชเบฐเป€เบซเบ™เบตเบเบฒเบ™เบ›เปˆเบญเบเบญเบปเบ‡เบ›เบฐเบเบญเบš v6 เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป€เบงเบตเบญเบธเบ›เบฐเบเบญเบ™เปƒเบ™เบžเบฒเบชเบฒ Rust เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป‚เบ”เบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Linux kernel. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบšเบฑเบšเบ—เบตเป€เบˆเบฑเบ”เบ‚เบญเบ‡ patches, เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเบฐเบšเบฑเบšเบ—เปเบฒเบญเบดเบ”, เบˆเบฑเบ”เบžเบตเบกเบกเบฒเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบซเบกเบฒเบเป€เบฅเบเบชเบฐเบšเบฑเบš. เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Rust เปเบกเปˆเบ™เบ–เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡, เปเบ•เปˆเป„เบ”เป‰เบ–เบทเบเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบชเบฒเบ‚เบฒเบ•เปเปˆเป„เบ›เบ‚เบญเบ‡ linux เปเบฅเบฐเป„เบ”เป‰เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเปˆเบฒเบ‡เบžเบฝเบ‡เบžเปเป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบŠเบฑเป‰เบ™ abstraction เป€เบ—เบดเบ‡เบฅเบฐเบšเบปเบšเบเปˆเบญเบ kernel, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป„เบ”เป€เบงเบตเปเบฅเบฐเป‚เบกเบ”เบนเบ™. เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบถเบ™เบˆเบฒเบ Google เปเบฅเบฐ ISRG (เบเบธเปˆเบกเบ„เบปเป‰เบ™เบ„เป‰เบงเบฒเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”), เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบœเบนเป‰เบเปเปˆเบ•เบฑเป‰เบ‡เป‚เบ„เบ‡เบเบฒเบ™ Let's Encrypt เปเบฅเบฐเบชเบปเปˆเบ‡เป€เบชเบตเบก HTTPS เปเบฅเบฐเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”.

เปƒเบ™โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เปƒเบซเบกเปˆโ€‹:

  • เบŠเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบฅเบฐเบ•เบปเบงเปเบ›เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบˆเบฑเบ”เบชเบฑเบ™, เบ›เบปเบ”เบ›เปˆเบญเบเบˆเบฒเบเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ™เบฐ "panic" เป€เบกเบทเปˆเบญเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™, เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เปˆเบญเบ Rust 1.60, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš "maybe_uninit_extra" เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™ kernel patches.
  • เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบˆเบฒเบเป€เบญเบเบฐเบชเบฒเบ™ (เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบเบฑเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™), เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเป€เบงเบฅเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบ•เบดเบ”เบเบฑเบš kernel API เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš KUnit เบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป‚เบซเบฅเบ”เปเบเปˆเบ™.
  • เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบฎเบฑเบšเบฎเบญเบ‡เป€เบญเบปเบฒเบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบšเปเปˆเบ„เบงเบ™เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เบ„เปเบฒเป€เบ•เบทเบญเบ™ Clippy linter, เบ„เบทเบเบฑเบ™เบเบฑเบšเบฅเบฐเบซเบฑเบ” Rust kernel.
  • เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™ "เบชเบธเบ”เบ—เบด" เบ—เบตเปˆเบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบกเปˆเบ™เบชเบฐเป€เบซเบ™เบต. เบฅเบฐเบซเบฑเบ” Rust เบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ kernel เป€เบŠเบฑเปˆเบ™: Namespace (เบญเบตเบ‡เปƒเบชเปˆเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เปเบเปˆเบ™เบชเบธเบ”เบ—เบด), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) เปเบฅเบฐ IPents เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. .
  • เบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเป€เบ•เบฑเบเบ™เบดเบเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก asynchronous (async), เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™ kasync. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ” asynchronous เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบŠเปˆเบญเบ‡เบชเบฝเบš TCP: async fn echo_server(stream: TcpStream) -> เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš { let mut buf = [0u8; 1024]; loop { เปƒเบซเป‰ n = stream.read(&mut buf).เบฅเปเบ–เป‰เบฒ?; เบ–เป‰เบฒ n == 0 {เบเบฑเบšเบ„เบทเบ™ Ok(()); } stream.write_all(&buf[..n]).เบฅเปเบ–เป‰เบฒเบขเบนเปˆ?; } }
  • เป€เบžเบตเปˆเบก net :: เป‚เบกเบ”เบนเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ•เบปเบงเบเบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เป€เบžเบตเปˆเบกเบ•เบปเบงเบขเปˆเบฒเบ‡ rust_netfilter.rs เบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปƒเบ™เบžเบฒเบชเบฒ Rust.
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡ mutex smutex เบ‡เปˆเบฒเบเบ”เบฒเบ::Mutex, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ pinning.
  • เป€เบžเบตเปˆเบก NoWaitLock, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเป€เบ„เบตเบเบฅเปเบ–เป‰เบฒเบเบฒเบ™เบฅเบฑเบญเบ, เปเบฅเบฐเบ–เป‰เบฒเบ–เบทเบเบ„เบญเบšเบ„เบญเบ‡เป‚เบ”เบเบเบฐเบ—เบนเป‰เบญเบทเปˆเบ™, เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบฅเบฒเบเบ‡เบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบš lock เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบขเบธเบ”เบœเบนเป‰เป‚เบ—.
  • เป€เบžเบตเปˆเบก RawSpinLock, เบฅเบฐเบšเบธเป‚เบ”เบ raw_spinlock_t เปƒเบ™ kernel, เป€เบžเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰.
  • เป€เบžเบตเปˆเบกเบ›เบฐเป€เบžเบ” ARef เบชเบณเบฅเบฑเบšเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบเบปเบ™เป„เบเบเบฒเบ™เบ™เบฑเบšเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ–เบทเบเบ™เบณเปƒเบŠเป‰ (เบ–เบทเบเบ™เบฑเบšเบ„เบทเบ™เบชเบฐเป€เปเบต).
  • backend rustc_codegen_gcc, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” libgccjit เบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™ GCC เป€เบ›เบฑเบ™เบ•เบปเบงเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เปƒเบ™ rustc เป€เบžเบทเปˆเบญเปƒเบซเป‰ rustc เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™ GCC, เป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™ bootstrapping the rustc compiler. เบเบฒเบ™เบชเบปเปˆเบ‡เป€เบชเบตเบกเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ GCC เปƒเบ™ rustc เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ•เบปเบงเบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™ rustc เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เปˆเบญเบ GCC 12.1 เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เปเบเป‰เป„เบ‚ libgccjit เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰ rustc_codegen_gcc เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. เบเบฒเบ™เบเบฐเบเบฝเบกเบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ rustc_codegen_gcc เป‚เบ”เบเปƒเบŠเป‰ rustup utility.
  • เบ„เบงเบฒเบกเบ„เบทเบšเบซเบ™เป‰เบฒเปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ GCC frontend gccrs เบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบžเบฒเบชเบฒ Rust เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ GCC เปเบกเปˆเบ™เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบตเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ•เบฑเบกเป€เบงเบฅเบฒเบชเบญเบ‡เบ„เบปเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบš gccrs.

เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบชเบฐเป€เบซเบ™เบตเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ Rust เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบ—เบตเบชเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป€เบงเบตเปเบฅเบฐเป‚เบกเบ”เบนเบ™ kernel. เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Rust เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰ Rust เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš kernel. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Rust เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ„เบปเบ™เบ‚เบฑเบšเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เป„เบ”เป€เบงเบตเบ—เบตเปˆเบ›เบญเบ”เป„เบžเปเบฅเบฐเบ”เบตเบเบงเปˆเบฒเบ”เป‰เบงเบเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”, เป‚เบ”เบเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบง, เบเบฒเบ™เบ›เบฐเบ•เบดเป€เบชเบ”เบ•เบปเบงเบŠเบตเป‰ null, เปเบฅเบฐ buffer overruns.

Rust เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เป€เบงเบฅเบฒเบฅเบงเบšเบฅเบงเบกเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡, เบเบฒเบ™เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเปเบฅเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ•เบฐเบซเบผเบญเบ”เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ (เบ‚เบญเบšเป€เบ‚เบ”), เปเบฅเบฐเป‚เบ”เบเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เป€เบงเบฅเบฒเปเบฅเปˆเบ™. Rust เบเบฑเบ‡เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™ overflows integer, เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบ„เปˆเบฒเบ•เบปเบงเปเบ›เป„เบ”เป‰เบ–เบทเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰, เบกเบตเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เปƒเบŠเป‰เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ—เบตเปˆเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบฅเบฐเบ•เบปเบงเปเบ›เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปเบฅเบฐเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบžเบดเบกเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเปเบ‚เบ‡เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™