Miguel Ojeda, ืืขืจ ืืืืจ ืคืื ืื Rust-for-Linux ืคึผืจืืืขืงื, ืคืืจืืขืืืืื ืื ืืขืืืื ื ืคืื ืื6 ืงืึทืืคึผืึธืื ืึทื ืฅ ืคึฟืึทืจ ืืขืืืขืืึธืคึผืื ื ืืืื ืืจืืืืขืจืก ืืื ืื Rust ืฉืคึผืจืึทื ืคึฟืึทืจ ืืึทืืจืึทืืืื ื ืืืจื ืืื ืืงืก ืงืขืจื ืืขืืืขืืึธืคึผืขืจืก. ืืืก ืืื ืื ืืืืขืืข ืืืืกืืืืข ืคืื โโืื ืคึผืึทืืฉืึทื, ืืขื ืืืขื ืืื ืืฉืืื ืื ืขืจืฉืืขืจ ืืืขืจืกืืข, ืืจืืืก ืึธื ืึท ืืืขืจืกืืข ื ืืืขืจ. ืืฉืึทืืืขืจ ืฉืืืฆื ืืื ืืขืจืขืื ื ืืื ืืงืกืคึผืขืจืืขื ืึทื, ืึธืืขืจ ืืื ืฉืืื ืึทืจืืึทื ืืขืจืขืื ื ืืื ืื ืืื ืืงืก-ืืืืึทืืขืจ ืฆืืืืึทื ืืื ืืื ืืขื ืื ืืขืืืขืืึธืคึผืขื ืฆื ืึธื ืืืืื ืืจืืขืื ืืืืฃ ืงืจืืืืืื ื ืึทืืกืืจืึทืงืฆืืข ืืืึทืขืจืก ืืืืขืจ ืงืขืจื ืกืึทืืกืืกืืึทืื, ืืื ืืขืืื ื ืืื ืฉืจืืืื ืืจืืืืขืจืก ืืื ืืึทืืืฉืืื. ืื ืึทื ืืืืืงืืื ื ืืื ืคืึทื ืืึทื ืืืจื Google ืืื ืื ISRG (Internet Security Research Group), ืืืึธืก ืืื ืืขืจ ืืจืื ืืขืจ ืคืื ืื Let's Encrypt ืคึผืจืืืขืงื ืืื ืคึผืจืึทืืึธืืฅ ืืืืคึผืก ืืื ืื ืึทื ืืืืืงืืื ื ืคืื ืืขืงื ืึทืืึทืืืฉืื ืฆื ืคึฟืึทืจืืขืกืขืจื ืืื ืืขืจื ืขื ืืืืขืจืืืื.
ืืื ืื ื ืืึทืข ืืืขืจืกืืข:
- ืื ืืึธืึธืืงืื ืืื ืึท ืืืึทืจืืึทื ื ืคืื ืื ืึทืืืึธืง ืืืืืืึธืืขืง, ืืืคืจืืื ืคืื ืืขืืืขื ืืืจ ืคืื ืึท "ืคึผืึทื ืืง" ืฉืืึทื ืืืขื ืขืจืจืึธืจืก ืคืึทืื, ืืึธืื ืฉืืื ืืขืจืืืึทื ืืืงื ืฆื ืื ืืขืืืื ื ืคืื Rust 1.60, ืืืึธืก ืกืืืืืึทืืืืืื ืฉืืืฆื ืคึฟืึทืจ ืื "ืืืึทืืข_ืื ืื ืื_ืขืงืกืืจืึท" ืืึธืืข ืืขื ืืฆื ืืื ืงืขืจื ืคึผืึทืืฉืึทื.
- ืฆืืืขืืืืื ืื ืคืืืืงืืื ืฆื ืืืืคื ืืขืกืฅ ืคึฟืื ืื ืืึทืงืืืืขื ืืืืฉืึทื (ืืขืกืืก ืืืึธืก ืืขื ืขื ืืืื ืืขื ืืฆื ืืื ืืืืฉืคืืื ืืื ืื ืืึทืงืืืืขื ืืืืฉืึทื), ืืืจื ืฆืื ืืืคื ืขืืขื-ืฆืืื ืงืึทื ืืืขืจืืฉืึทื ืคืื ืืขืกืฅ ืืืื ืฆื ืื ืงืขืจื ืึทืคึผื ืืื KUnit ืืขืกืฅ ืขืงืกืึทืงืืืืึทื ืืขืฉืึทืก ืงืขืจื ืืึธืืืื ื.
- ืจืขืงืืืืจืขืืขื ืฅ ืืึธืื ืฉืืื ืื ืืขื ืืืขื ืึทื ืืขืกืฅ ืืึธื ื ืืฉื ืจืขืืืืืึทื ืืื ืึท ืงืืืคึผืคึผื ืืื ืืขืจ ืืืืจืขื ืื ื, ืคึผืื ืงื ืืื ืืฉืึทืืืขืจ ืงืขืจื ืงืึธื.
- ืึทื ืขืจืฉื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืื "ื ืขืฅ" ืืึธืืืืข ืืื ื ืขืฅ ืคืึทื ืืงืฉืึทื ื ืืื ืคืืจืืขืืืืื. ืจืึทืกื ืงืึธื ืืื ืึทืงืกืขืก ืฆื ืงืขืจื ื ืขืฅ ืกืืจืึทืงืืฉืขืจื ืึทืืึท ืืื ื ืึทืืขืกืคึผืึทืกืข (ืืืืืจื ืืืืฃ ืื ืกืืจืืงืืืจ ื ืขืฅ ืงืขืจื ืกืืจืืงืืืจ), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) ืืื ืืืืขืจ IPv6 ืืงืืืืืืึทืืึทื ืฅ. .
- ืขืก ืืื ืขืจืฉื ืฉืืืฆื ืคึฟืึทืจ ืืืกืื ืืงืจืึทื ืึทืก ืคึผืจืึธืืจืึทืืืื ื ืืขืงื ืืงืก (ืึทืกืื ืง), ืืืคึผืืึทืืขื ืึทื ืืื ืื ืคืึธืจืขื ืคืื ืื ืงืึทืกืื ืง ืืึธืืืืข. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืจ ืงืขื ืขื ืฉืจืืึทืื ืืืกืื ืืงืจืึทื ืึทืก ืงืึธื ืฆื ืืึทื ืืคึผืืืืจื ืืงืคึผ ืกืึธืงืงืขืฅ: async fn echo_server (ืกืืจืื: TcpStream) -> ืจืขืืืืืึทื {let mut buf = [0u8; 1024]; ืฉืืืืฃ { ืืึธืื n = ืกืืจืื.ืจืขื (&ืืื ืืืฃ).ืึทืืืืื?; ืืืื n == 0 {ืฆืืจืืงืงืืืขื Ok (()); } stream.write_all(&buf[..n]).ืึทืืืืื?; } }
- ืฆืืืขืืืืื ื ืขืฅ :: ืคืืืืขืจ ืืึธืืืืข ืคึฟืึทืจ ืืึทื ืืคึผืืึทืืืืืื ื ื ืขืฅ ืคึผืึทืงืึทื ืคืืืืขืจืก. ืฆืืืขืืืืื ืืืึทืฉืคึผืื rust_netfilter.rs ืืื ืึท ืคืืืืขืจ ืืืคึผืืึทืืขื ืืืืฉืึทื ืืื ืื ืจืืกื ืฉืคึผืจืึทื.
- ืฆืืืขืืขืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืึท ืคึผืฉืื ืืืืขืงืก ืกืืืืขืงืก :: ืืืืขืงืก, ืืืึธืก ืืื ื ืืฉื ืืึทืจืคื ืคึผืื ืื ื.
- ืฆืืืขืืขืื ืึท NoWaitLock ืฉืืึธืก ืืืึธืก ืงืืื ืืึธื ืืืึทืจืื ืคึฟืึทืจ ืึท ืืขืืืื ื, ืืื ืืืื ืขืก ืืื ืคืึทืจื ืืืขื ืืืจื ืื ืื ืืขืจ ืคืึธืืขื, ืึท ืืขืืช ืืื ืืขืืืืื ืืืขื ืืืจ ืคึผืจืืืื ืฆื ืงืจืืื ืืขื ืฉืืึธืก ืึทื ืฉืืึธื ืคืื ืกืืึธืคึผืคึผืื ื ืื ืงืึทืืืขืจ.
- ืฆืืืขืืขืื ืึท RawSpinLock ืฉืืึธืก ืืืืขื ืึทืคืืื ืืื raw_spinlock_t ืืื ืื ืงืขืจื, ืืขืืืขื ืื ืฆื ืกืขืงืฉืึทื ื ืืืึธืก ืงืขื ืขื ื ืืฉื ืืืื ืืืืืืง.
- ืฆืืืขืืขืื ARef ืืืคึผ ืคึฟืึทืจ ืืึทืืืืึทืื ืฆื ืึท ืืืืคืขืฅ ืฆื ืืืึธืก ืื ืจืขืคึฟืขืจืขื ืฅ ืงืึทืื ืืื ื ืืขืงืึทื ืืืึทื ืืื ืืขืืืขื ืื (ืฉืืขื ืืืง ืจืขืงืึธืื ืืขื).
- ืื rustc_codegen_gcc ืืึทืงืขื ื, ืืืึธืก ืึทืืึทืื ืืืจ ืฆื ื ืืฆื ืื libgccjit ืืืืืืึธืืขืง ืคืื ืื GCC ืคึผืจืืืขืงื ืืื ืึท ืงืึธื ืืขื ืขืจืึทืืึธืจ ืืื rustc ืฆื ืฆืืฉืืขืื rustc ืฉืืืฆื ืคึฟืึทืจ ืึทืจืงืึทืืขืงืืฉืขืจื ืืื ืึธืคึผืืืืืืึทืืืึธื ืก ืื ืืืฆื ืืื GCC, ืืื ืืืคึผืืึทืืขื ืึทื ืื ืคืืืืงืืื ืฆื ืืึธืึธืืกืืจืึทืคึผืื ื ืื Rustc ืงืึทืืคึผืืืืขืจ. ืงืึทืืคึผืืืืขืจ ืืขืืขืจืื ื ืืืื ืื ืคืืืืงืืื ืฆื ื ืืฆื ืึท GCC-ืืืืืจื ืงืึธื ืืขื ืขืจืึทืืึธืจ ืืื Rustc ืฆื ืืืืขื ืื Rustc ืงืึทืืคึผืืืืขืจ ืืื. ืืื ืึทืืืฉืึทื, ืื ืืขืฆืืข ืืขืืืื ื ืคืื GCC 12.1 ืืืื ืคืืงืกืื ืฆื libgccjit ื ืืืืืง ืคึฟืึทืจ rustc_codegen_gcc ืฆื ืึทืจืืขืื ืจืืืืืง. ืคึผืจืขืคึผืขืจืืืฉืึทื ื ืืขื ืขื ืึทื ืืขืจืืืื ืฆื ืฆืืฉืืขืื ืื ืคืืืืงืืื ืฆื ืื ืกืืึทืืืจื rustc_codegen_gcc ื ืืฆื ืื ืจืืกืืึธืคึผ ื ืืฆื.
- ืื ืคึผืจืึธืืจืขืก ืืื ืืขืจ ืึทื ืืืืืงืืื ื ืคืื ืื GCC ืคืจืึธื ืืขื ื ืืงืงืจืก ืืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืื Rust ืฉืคึผืจืึทื ืงืึทืืคึผืืืืขืจ ืืืืืจื ืืืืฃ GCC ืืื ืืืืขืจืงื. ืขืก ืืขื ืขื ืืขืจืืืืึทื ืฆืืืื ืคืื-ืฆืืื ืืขืืืขืืึธืคึผืขืจืก ืืจืืขืื ืืืืฃ gccrs.
ืฆืืจืืงืจืืคื ืึทื ืื ืคืืจืืขืืืืื ืขื ืืขืจืื ืืขื ืืึทืื ืขืก ืืขืืืขื ืฆื ื ืืฆื Rust ืืื ืึท ืฆืืืืื ืฉืคึผืจืึทื ืคึฟืึทืจ ืืขืืืขืืึธืคึผืื ื ืืจืืืืขืจืก ืืื ืงืขืจื ืืึทืืืฉืืื. ืืฉืึทืืืขืจ ืฉืืืฆื ืืื ืืขืจืืื ืื ืืื ืึทื ืึธืคึผืฆืืข ืืืึธืก ืืื ื ืืฉื ืขื ืืืืึทืื ืืืจื ืคืขืืืงืืึทื ืืื ืืื ื ืืฉื ืจืขืืืืืึทื ืืื ืืฉืึทืืืขืจ ืื ืงืืืืขื ืืื ืึท ืคืืจืืื ืื ืืืืขื ืืขืคึผืขื ืืขื ืกื ืคึฟืึทืจ ืื ืงืขืจื. ื ืืฆื ืจืืกื ืคึฟืึทืจ ืฉืึธืคืขืจ ืึทื ืืืืืงืืื ื ืืืขื ืืึธืื ืืืจ ืฆื ืฉืึทืคึฟื ืกืึทืคืขืจ ืืื ืืขืกืขืจ ืืจืืืืขืจืก ืืื ืืื ืืืึทื ืื, ืคืจืื ืคืื ืคึผืจืึธืืืขืืก ืึทืืึท ืืื ืืึผืจืื ืึทืงืกืขืก ื ืึธื ืคืจืื, ื ืึทื ืืืึทืื ืืืคืขืจืึทื ืกืื ืืื ืืึทืคืขืจ ืึธืืืืขืจืจืึทื ื.
ืืฉืึทืืืขืจ ืขื ืคืึธืจืกืื ืืืงืึธืจื ืืืืขืจืงืืึทื ืืื ืื ืงืึทืืคึผืืืืื ื ืฆืืื ืืืจื ืจืขืคึฟืขืจืขื ืฅ ืงืึธื ืืจืึธืืืจืื ื, ืึธืืืืฉืขืงื ืึธืื ืขืจืฉืืคึผ ืืื ืึทืืืืฉืขืงืฅ ืืขืื ืืจืึทืงืื ื (ืกืงืึธืคึผืขืก), ืืื ืืืจื ืืืืึทืืืืืืืื ื ืื ืจืืืืืง ืืืงืึธืจื ืึทืงืกืขืก ืืื ืจืื ืืืืข. ืืฉืึทืืืขืจ ืืืื ืคึผืจืึธืืืืืขืก ืฉืืฅ ืงืขืื ืื ืืึทืืืฉืขืจ ืึธืืืืขืจืคืืึธืื, ืจืืงืืืืืขืจื ืึทื ืื ืืืขืจืืึทืืึทื ืืืึทืืืขืก ืืขื ืขื ืื ืืืืึทืืืืื ืืืืืขืจ ื ืืฆื, ืืื ืืขืกืขืจ ืืขืืช ืืึทื ืืืื ื ืืื ืืขืจ ื ืึธืจืืึทื ืืืืืืึธืืขืง, ื ืืฆื ืืขื ืืึทืืจืืฃ ืคืื ืืืคึผืืืึทืืึทืืึทื ืืึทืืืืึทืื ืืื ืืืขืจืืึทืืึทืื ืืืจื ืคืขืืืงืืึทื, ืืื ืึธืคืคืขืจืก ืฉืืึทืจืง ืกืืึทืืืง ืืืืคึผืื ื ืฆื ืืื ืึทืืืื ืืึทืืืฉืืงืึทื ืขืจืจืึธืจืก.
ืืงืืจ: opennet.ru