Rust ಭಾಷೆಯ ಬೆಂಬಲದೊಂದಿಗೆ Linux ಕರ್ನಲ್‌ಗಾಗಿ ಪ್ಯಾಚ್‌ಗಳ ಆರನೇ ಆವೃತ್ತಿ

Rust-for-Linux ಯೋಜನೆಯ ಲೇಖಕರಾದ Miguel Ojeda, Linux ಕರ್ನಲ್ ಡೆವಲಪರ್‌ಗಳ ಪರಿಗಣನೆಗಾಗಿ Rust ಭಾಷೆಯಲ್ಲಿ ಸಾಧನ ಡ್ರೈವರ್‌ಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಲು v6 ಘಟಕಗಳ ಬಿಡುಗಡೆಯನ್ನು ಪ್ರಸ್ತಾಪಿಸಿದರು. ಇದು ಪ್ಯಾಚ್‌ಗಳ ಏಳನೇ ಆವೃತ್ತಿಯಾಗಿದೆ, ಮೊದಲ ಆವೃತ್ತಿಯನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಂಡು, ಆವೃತ್ತಿ ಸಂಖ್ಯೆ ಇಲ್ಲದೆ ಪ್ರಕಟಿಸಲಾಗಿದೆ. ರಸ್ಟ್ ಬೆಂಬಲವನ್ನು ಪ್ರಾಯೋಗಿಕವೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ, ಆದರೆ ಈಗಾಗಲೇ ಲಿನಕ್ಸ್-ಮುಂದಿನ ಶಾಖೆಯಲ್ಲಿ ಸೇರಿಸಲಾಗಿದೆ ಮತ್ತು ಕರ್ನಲ್ ಉಪವ್ಯವಸ್ಥೆಗಳ ಮೇಲೆ ಅಮೂರ್ತ ಪದರಗಳನ್ನು ರಚಿಸುವ ಕೆಲಸವನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಾಕಷ್ಟು ಅಭಿವೃದ್ಧಿಪಡಿಸಲಾಗಿದೆ, ಹಾಗೆಯೇ ಡ್ರೈವರ್‌ಗಳು ಮತ್ತು ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ಬರೆಯುವುದು. ಅಭಿವೃದ್ಧಿಯು Google ಮತ್ತು ISRG (ಇಂಟರ್ನೆಟ್ ಸೆಕ್ಯುರಿಟಿ ರಿಸರ್ಚ್ ಗ್ರೂಪ್) ನಿಂದ ಧನಸಹಾಯ ಪಡೆದಿದೆ, ಇದು ಲೆಟ್ಸ್ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಯೋಜನೆಯ ಸಂಸ್ಥಾಪಕವಾಗಿದೆ ಮತ್ತು ಇಂಟರ್ನೆಟ್ ಸುರಕ್ಷತೆಯನ್ನು ಸುಧಾರಿಸಲು HTTPS ಮತ್ತು ತಂತ್ರಜ್ಞಾನಗಳ ಅಭಿವೃದ್ಧಿಯನ್ನು ಉತ್ತೇಜಿಸುತ್ತದೆ.

ಹೊಸ ಆವೃತ್ತಿಯಲ್ಲಿ:

  • ದೋಷಗಳು ಸಂಭವಿಸಿದಾಗ "ಪ್ಯಾನಿಕ್" ಸ್ಥಿತಿಯ ಸಂಭವನೀಯ ಪೀಳಿಗೆಯಿಂದ ಮುಕ್ತಗೊಳಿಸಲಾದ ಟೂಲ್‌ಕಿಟ್ ಮತ್ತು ಅಲೋಕ್ ಲೈಬ್ರರಿಯ ರೂಪಾಂತರವನ್ನು ರಸ್ಟ್ 1.60 ರ ಬಿಡುಗಡೆಗೆ ನವೀಕರಿಸಲಾಗಿದೆ, ಇದು ಕರ್ನಲ್ ಪ್ಯಾಚ್‌ಗಳಲ್ಲಿ ಬಳಸಲಾದ "maybe_uninit_extra" ಮೋಡ್‌ಗೆ ಬೆಂಬಲವನ್ನು ಸ್ಥಿರಗೊಳಿಸುತ್ತದೆ.
  • ಕರ್ನಲ್ API ಗೆ ಜೋಡಿಸಲಾದ ಪರೀಕ್ಷೆಗಳ ಕಂಪೈಲ್-ಟೈಮ್ ಪರಿವರ್ತನೆಯ ಮೂಲಕ ಕರ್ನಲ್ ಲೋಡಿಂಗ್ ಸಮಯದಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾದ KUnit ಪರೀಕ್ಷೆಗಳಿಗೆ ದಸ್ತಾವೇಜನ್ನು (ದಾಖಲೆಯಲ್ಲಿ ಉದಾಹರಣೆಗಳಾಗಿ ಬಳಸಲಾಗುವ ಪರೀಕ್ಷೆಗಳು) ಪರೀಕ್ಷೆಗಳನ್ನು ನಡೆಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • ರಸ್ಟ್ ಕರ್ನಲ್ ಕೋಡ್‌ನಂತೆ ಪರೀಕ್ಷೆಗಳು ಕ್ಲಿಪ್ಪಿ ಲಿಂಟರ್ ಎಚ್ಚರಿಕೆಗೆ ಕಾರಣವಾಗಬಾರದು ಎಂಬ ಅವಶ್ಯಕತೆಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಲಾಗಿದೆ.
  • ನೆಟ್ವರ್ಕ್ ಕಾರ್ಯಗಳೊಂದಿಗೆ "ನೆಟ್" ಮಾಡ್ಯೂಲ್ನ ಆರಂಭಿಕ ಅನುಷ್ಠಾನವನ್ನು ಪ್ರಸ್ತಾಪಿಸಲಾಗಿದೆ. ನೇಮ್‌ಸ್ಪೇಸ್ (ಸ್ಟ್ರಕ್ಟ್ ನೆಟ್ ಕರ್ನಲ್ ರಚನೆಯ ಆಧಾರದ ಮೇಲೆ), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddvaltrV4 ಮತ್ತು SocketAddvaltrV6 ನಂತಹ ಕರ್ನಲ್ ನೆಟ್‌ವರ್ಕ್ ರಚನೆಗಳಿಗೆ ರಸ್ಟ್ ಕೋಡ್ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿದೆ. .
  • ಅಸಮಕಾಲಿಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ತಂತ್ರಗಳಿಗೆ (ಅಸಿಂಕ್) ಆರಂಭಿಕ ಬೆಂಬಲವಿದೆ, ಇದನ್ನು kasync ಮಾಡ್ಯೂಲ್ ರೂಪದಲ್ಲಿ ಅಳವಡಿಸಲಾಗಿದೆ. ಉದಾಹರಣೆಗೆ, ನೀವು TCP ಸಾಕೆಟ್‌ಗಳನ್ನು ಕುಶಲತೆಯಿಂದ ನಿರ್ವಹಿಸಲು ಅಸಮಕಾಲಿಕ ಕೋಡ್ ಅನ್ನು ಬರೆಯಬಹುದು: async fn echo_server(stream: TcpStream) -> ಫಲಿತಾಂಶ {ಲೆಟ್ mut buf = [0u8; 1024]; ಲೂಪ್ {ಲೆಟ್ n = stream.read(&mut buf).waiit?; n == 0 ಆಗಿದ್ದರೆ {ರಿಟರ್ನ್ ಸರಿ(()); } stream.write_all(&buf[..n]).ನಿರೀಕ್ಷೆ?; } }
  • ನೆಟ್‌ವರ್ಕ್ ಪ್ಯಾಕೆಟ್ ಫಿಲ್ಟರ್‌ಗಳನ್ನು ಮ್ಯಾನಿಪುಲೇಟ್ ಮಾಡಲು ನೆಟ್:: ಫಿಲ್ಟರ್ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ರಸ್ಟ್ ಭಾಷೆಯಲ್ಲಿ ಫಿಲ್ಟರ್ ಅನುಷ್ಠಾನದೊಂದಿಗೆ rust_netfilter.rs ಉದಾಹರಣೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • ಪಿನ್ನಿಂಗ್ ಅಗತ್ಯವಿಲ್ಲದ ಸರಳ ಮ್ಯೂಟೆಕ್ಸ್ ಸ್ಮುಟೆಕ್ಸ್ ::ಮ್ಯೂಟೆಕ್ಸ್‌ನ ಅನುಷ್ಠಾನವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • NoWaitLock ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಇದು ಲಾಕ್‌ಗಾಗಿ ಎಂದಿಗೂ ಕಾಯುವುದಿಲ್ಲ, ಮತ್ತು ಇನ್ನೊಂದು ಥ್ರೆಡ್‌ನಿಂದ ಆಕ್ರಮಿಸಿಕೊಂಡಿದ್ದರೆ, ಕರೆ ಮಾಡುವವರನ್ನು ನಿಲ್ಲಿಸುವ ಬದಲು ಲಾಕ್ ಅನ್ನು ಪಡೆದುಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸುವಾಗ ದೋಷವನ್ನು ವರದಿ ಮಾಡಲು ಕಾರಣವಾಗುತ್ತದೆ.
  • ನಿಷ್ಕ್ರಿಯವಾಗಿರದ ವಿಭಾಗಗಳಿಗೆ ಅನ್ವಯಿಸಲು ಕರ್ನಲ್‌ನಲ್ಲಿ raw_spinlock_t ನಿಂದ ಗುರುತಿಸಲಾದ RawSpinLock ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • ಉಲ್ಲೇಖ ಎಣಿಕೆಯ ಕಾರ್ಯವಿಧಾನವನ್ನು ಅನ್ವಯಿಸುವ ವಸ್ತುವಿನ ಉಲ್ಲೇಖಗಳಿಗಾಗಿ ARef ಪ್ರಕಾರವನ್ನು ಸೇರಿಸಲಾಗಿದೆ (ಯಾವಾಗಲೂ-ಮರುಕಳಿಸಲಾಗುವುದು).
  • rustc_codegen_gcc ಬ್ಯಾಕೆಂಡ್, GCC ಯಲ್ಲಿ ಲಭ್ಯವಿರುವ ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗಳು ಮತ್ತು ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳಿಗೆ ಬೆಂಬಲದೊಂದಿಗೆ rustc ಅನ್ನು ಒದಗಿಸಲು GCC ಯೋಜನೆಯಿಂದ libgccjit ಲೈಬ್ರರಿಯನ್ನು rustc ನಲ್ಲಿ ಕೋಡ್ ಜನರೇಟರ್ ಆಗಿ ಬಳಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ, rustc ಕಂಪೈಲರ್ ಅನ್ನು ಬೂಟ್‌ಸ್ಟ್ರ್ಯಾಪ್ ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ. ಕಂಪೈಲರ್ ಪ್ರಚಾರ ಎಂದರೆ rustc ಕಂಪೈಲರ್ ಅನ್ನು ನಿರ್ಮಿಸಲು rustc ನಲ್ಲಿ GCC ಆಧಾರಿತ ಕೋಡ್ ಜನರೇಟರ್ ಅನ್ನು ಬಳಸುವ ಸಾಮರ್ಥ್ಯ. ಜೊತೆಗೆ, GCC 12.1 ರ ಇತ್ತೀಚಿನ ಬಿಡುಗಡೆಯು rustc_codegen_gcc ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡಲು ಅಗತ್ಯವಾದ libgccjit ಗೆ ಪರಿಹಾರಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ರಸ್ಟಪ್ ಸೌಲಭ್ಯವನ್ನು ಬಳಸಿಕೊಂಡು rustc_codegen_gcc ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಒದಗಿಸಲು ಸಿದ್ಧತೆಗಳು ನಡೆಯುತ್ತಿವೆ.
  • GCC ಆಧಾರಿತ ರಸ್ಟ್ ಭಾಷಾ ಸಂಕಲನದ ಅಳವಡಿಕೆಯೊಂದಿಗೆ GCC ಮುಂಭಾಗದ gccrs ನ ಅಭಿವೃದ್ಧಿಯಲ್ಲಿನ ಪ್ರಗತಿಯನ್ನು ಗುರುತಿಸಲಾಗಿದೆ. ಪ್ರಸ್ತುತ gccrs ನಲ್ಲಿ ಇಬ್ಬರು ಪೂರ್ಣ ಸಮಯದ ಡೆವಲಪರ್‌ಗಳು ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದಾರೆ.

ಪ್ರಸ್ತಾವಿತ ಬದಲಾವಣೆಗಳು ಡ್ರೈವರ್‌ಗಳು ಮತ್ತು ಕರ್ನಲ್ ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಲು ರಸ್ಟ್ ಅನ್ನು ಎರಡನೇ ಭಾಷೆಯಾಗಿ ಬಳಸಲು ಸಾಧ್ಯವಾಗಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನೆನಪಿಸಿಕೊಳ್ಳಿ. ರಸ್ಟ್ ಬೆಂಬಲವನ್ನು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸದ ಒಂದು ಆಯ್ಕೆಯಾಗಿ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ ಮತ್ತು ಕರ್ನಲ್‌ಗೆ ಅಗತ್ಯವಾದ ನಿರ್ಮಾಣ ಅವಲಂಬನೆಯಾಗಿ ರಸ್ಟ್ ಅನ್ನು ಸೇರಿಸಲು ಕಾರಣವಾಗುವುದಿಲ್ಲ. ಚಾಲಕ ಅಭಿವೃದ್ಧಿಗಾಗಿ ರಸ್ಟ್ ಅನ್ನು ಬಳಸುವುದರಿಂದ ನೀವು ಕನಿಷ್ಟ ಪ್ರಯತ್ನದಲ್ಲಿ ಸುರಕ್ಷಿತ ಮತ್ತು ಉತ್ತಮ ಡ್ರೈವರ್‌ಗಳನ್ನು ರಚಿಸಲು ಅನುಮತಿಸುತ್ತದೆ, ಮುಕ್ತಗೊಳಿಸಿದ ನಂತರ ಮೆಮೊರಿ ಪ್ರವೇಶ, ಶೂನ್ಯ ಪಾಯಿಂಟರ್ ನಿರಾಕರಣೆಗಳು ಮತ್ತು ಬಫರ್ ಓವರ್‌ರನ್‌ಗಳಂತಹ ಸಮಸ್ಯೆಗಳಿಂದ ಮುಕ್ತವಾಗಿರುತ್ತದೆ.

ಕಂಪೈಲ್ ಸಮಯದಲ್ಲಿ ಕಂಪೈಲ್ ಸಮಯದಲ್ಲಿ ಮೆಮೊರಿ-ಸುರಕ್ಷಿತ ನಿರ್ವಹಣೆಯನ್ನು ಒದಗಿಸಲಾಗುತ್ತದೆ, ಆಬ್ಜೆಕ್ಟ್ ಮಾಲೀಕತ್ವ ಮತ್ತು ಆಬ್ಜೆಕ್ಟ್ ಜೀವಿತಾವಧಿಯನ್ನು (ವ್ಯಾಪ್ತಿ) ಟ್ರ್ಯಾಕ್ ಮಾಡುವುದು, ಹಾಗೆಯೇ ಕೋಡ್ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯದಲ್ಲಿ ಮೆಮೊರಿ ಪ್ರವೇಶದ ಸರಿಯಾದ ಮೌಲ್ಯಮಾಪನದ ಮೂಲಕ. ರಸ್ಟ್ ಪೂರ್ಣಾಂಕದ ಉಕ್ಕಿ ಹರಿಯುವಿಕೆಯ ವಿರುದ್ಧ ರಕ್ಷಣೆ ನೀಡುತ್ತದೆ, ಬಳಕೆಗೆ ಮೊದಲು ವೇರಿಯಬಲ್ ಮೌಲ್ಯಗಳ ಕಡ್ಡಾಯ ಆರಂಭದ ಅಗತ್ಯವಿರುತ್ತದೆ, ಪ್ರಮಾಣಿತ ಗ್ರಂಥಾಲಯದಲ್ಲಿ ದೋಷಗಳನ್ನು ಉತ್ತಮವಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ, ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಬದಲಾಗದ ಉಲ್ಲೇಖಗಳು ಮತ್ತು ವೇರಿಯೇಬಲ್‌ಗಳ ಪರಿಕಲ್ಪನೆಯನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ, ತಾರ್ಕಿಕ ದೋಷಗಳನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಬಲವಾದ ಸ್ಥಿರ ಟೈಪಿಂಗ್ ಅನ್ನು ನೀಡುತ್ತದೆ.

ಮೂಲ: opennet.ru

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ