ರಸ್ಟ್ 1.82 ಬಿಡುಗಡೆಯಾಗಿದೆ. ರಸ್ಟ್ ಆಧಾರಿತ ಹೊಸ ಬ್ರೌಸರ್. ವೋಲ್ವೋದಲ್ಲಿ ರಸ್ಟ್ ಅನ್ನು ಬಳಸುವುದು

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

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

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

ಮುಖ್ಯ ಆವಿಷ್ಕಾರಗಳು:

  • ರೆಪೊಸಿಟರಿಯಲ್ಲಿ ಪ್ಯಾಕೇಜ್ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ಪ್ರದರ್ಶಿಸಲು "ಮಾಹಿತಿ" ಆಜ್ಞೆಯನ್ನು ಕಾರ್ಗೋ ಪ್ಯಾಕೇಜ್ ಮ್ಯಾನೇಜರ್‌ಗೆ ಸೇರಿಸಲಾಗಿದೆ.
  • "impl Trait" ನಲ್ಲಿ "ಬಳಕೆ<..>" ಸಿಂಟ್ಯಾಕ್ಸ್‌ಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಇದು ಗುಪ್ತ ಪ್ರಕಾರಗಳ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, "impl Trait + use<'x, T>" ಕೇವಲ "x" ಮತ್ತು "T" ನಿಯತಾಂಕಗಳನ್ನು ಗುಪ್ತ ಪ್ರಕಾರದಲ್ಲಿ ಬಳಸಲು ಅನುಮತಿಸಲಾಗಿದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ.
  • ಕಚ್ಚಾ ಪಾಯಿಂಟರ್‌ಗಳನ್ನು ರಚಿಸಲು ಪ್ರತ್ಯೇಕ ಸಿಂಟ್ಯಾಕ್ಸ್ ಅನ್ನು ಪ್ರಸ್ತಾಪಿಸಲಾಗಿದೆ, ಹಿಂದೆ ಬಳಸಿದ ಮ್ಯಾಕ್ರೋಗಳನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ: "addr_of!(expr)" ಮ್ಯಾಕ್ರೋವನ್ನು "&raw const expr" ಆಪರೇಟರ್‌ನಿಂದ ಬದಲಾಯಿಸಲಾಗಿದೆ ಮತ್ತು "addr_of_mut!(expr)" ಮ್ಯಾಕ್ರೋವನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ "&ರಾ ಮಟ್" ಆಪರೇಟರ್ ಎಕ್ಸ್‌ಪಿಆರ್" ಮೂಲಕ. struct ಪ್ಯಾಕ್ ಮಾಡಲಾದ {not_aligned_field: i32, } fn main() {let p = ಪ್ಯಾಕ್ ಮಾಡಲಾದ {not_aligned_field: 1_82 }; // ಕಚ್ಚಾ ಪಾಯಿಂಟರ್ ಅನ್ನು ರಚಿಸಲು ಹಳೆಯ ವಿಧಾನ ptr = std::ptr::addr_of!(p.not_aligned_field); // ಕಚ್ಚಾ ಪಾಯಿಂಟರ್ ಅನ್ನು ರಚಿಸಲು ಹೊಸ ವಿಧಾನ ptr = &raw const p.not_aligned_field; ವಾಲ್ = ಅಸುರಕ್ಷಿತ {ptr.read_unaligned()}; }
  • "ಅಸುರಕ್ಷಿತ" ಗುಣಲಕ್ಷಣದೊಂದಿಗೆ ಬಾಹ್ಯ ಬ್ಲಾಕ್‌ಗಳ ಒಳಗೆ 'ಸ್ಥಿರ' ಜೀವಿತಾವಧಿಯೊಂದಿಗೆ ಸುರಕ್ಷಿತ ಕಾರ್ಯಗಳು ಮತ್ತು ಸ್ಥಿರಾಂಕಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಸಾಧ್ಯವಿದೆ (ಹಿಂದೆ, "ಅಸುರಕ್ಷಿತ ಬಾಹ್ಯ" ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಅಂಶಗಳು "ಅಸುರಕ್ಷಿತ" ಗುಣಲಕ್ಷಣವನ್ನು ಮಾತ್ರ ಹೊಂದಿರಬಹುದು): ಅಸುರಕ್ಷಿತ ಬಾಹ್ಯ {pub ಸುರಕ್ಷಿತ ಸ್ಥಿರ TAU : f64; ಪಬ್ ಸುರಕ್ಷಿತ fn sqrt(x: f64) -> f64; ಪಬ್ ಅಸುರಕ್ಷಿತ fn strlen (p: *const u8) -> ಬಳಸಿ; }
  • ಯಾವುದೇ_ಮ್ಯಾಂಗಲ್, ಲಿಂಕ್_ಸೆಕ್ಷನ್ ಮತ್ತು ರಫ್ತು_ಹೆಸರು ಗುಣಲಕ್ಷಣಗಳು, ವ್ಯಾಖ್ಯಾನಿಸದ ನಡವಳಿಕೆಗೆ ಕಾರಣವಾಗಬಹುದು, ಈಗ ಅಸುರಕ್ಷಿತವೆಂದು ಪರಿಗಣಿಸಲಾಗಿದೆ ಮತ್ತು ಸ್ಪಷ್ಟವಾದ "ಅಸುರಕ್ಷಿತ" ಫ್ಲ್ಯಾಗ್ ಅಗತ್ಯವಿದೆ, ಉದಾಹರಣೆಗೆ: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • ಪ್ಯಾಟರ್ನ್ ಹೊಂದಾಣಿಕೆಯು ಖಾಲಿ ಪ್ರಕಾರಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಲು ಅನುಮತಿಸುತ್ತದೆ, ಉದಾಹರಣೆಗೆ "enum Void {}" ಅಥವಾ ಗೋಚರ ಖಾಲಿ ಕ್ಷೇತ್ರದೊಂದಿಗೆ ರಚನೆಗಳು. ಎಸ್ಟಿಡಿ ಬಳಸಿ:: ಪರಿವರ್ತಿಸಿ:: ತಪ್ಪಾಗಲಾರದು; pub fn unwrap_without_panic (x: ಫಲಿತಾಂಶ ) -> T {ಲೆಟ್ ಸರಿ(x) = x; // "ತಪ್ಪು" ಅನ್ನು ಬಿಟ್ಟುಬಿಡಬಹುದು x }
  • ಫ್ಲೋಟಿಂಗ್ ಪಾಯಿಂಟ್ ಸಂಖ್ಯೆಗಳ ಪ್ರಕಾರಗಳು (f32 ಮತ್ತು f64) ಸಂಖ್ಯಾತ್ಮಕವಲ್ಲದ NaN ಮೌಲ್ಯಗಳನ್ನು (0.0/0.0) ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಾಗ ಪ್ರಮಾಣೀಕೃತ ನಡವಳಿಕೆಯನ್ನು ಹೊಂದಿವೆ, ಮತ್ತು const fn ನಲ್ಲಿ ಫ್ಲೋಟಿಂಗ್ ಪಾಯಿಂಟ್ ಕಾರ್ಯಾಚರಣೆಗಳ ಬಳಕೆಯನ್ನು ಸಹ ಅನುಮತಿಸುತ್ತದೆ.
  • ಅಸೆಂಬ್ಲಿ ಒಳಸೇರಿಸುವಿಕೆಗಳು "ಕಾನ್ಸ್ಟ್" ಗುಣಲಕ್ಷಣದೊಂದಿಗೆ ಒಪೆರಾಂಡ್‌ಗಳನ್ನು ಮೊದಲು ರಿಜಿಸ್ಟರ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸದೆ ಪೂರ್ಣಾಂಕ ಸಂಖ್ಯಾ ಮೌಲ್ಯಗಳನ್ನು ನೇರವಾಗಿ ಬಳಸಲು ಸಾಮರ್ಥ್ಯವನ್ನು ಒದಗಿಸುತ್ತದೆ. const MSG: &str = "ಹಲೋ, ವರ್ಲ್ಡ್!\n"; ಅಸುರಕ್ಷಿತ {core::arch::asm!( "mov rdx, {LEN} // ಸೂಚನೆ 'mov rdx, 14′" ಅನ್ನು ರಚಿಸಲಾಗುತ್ತದೆ, LEN = const MSG.len(), … ); }
  • ಅಸುರಕ್ಷಿತ ಬ್ಲಾಕ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸದೆಯೇ "ಸ್ಥಿರ" ಗುಣಲಕ್ಷಣದೊಂದಿಗೆ ಅಭಿವ್ಯಕ್ತಿಗಳನ್ನು ಸಂಬೋಧಿಸುವುದನ್ನು ಸುರಕ್ಷಿತ ಸನ್ನಿವೇಶದಲ್ಲಿ ಅನುಮತಿಸಲಾಗಿದೆ ("&raw mut" ಮತ್ತು "&raw const" ಆಪರೇಟರ್‌ಗಳು ಒಪೆರಾಂಡ್‌ನ ಮೌಲ್ಯದ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ ಮತ್ತು ಅದಕ್ಕೆ ಪಾಯಿಂಟರ್ ಅನ್ನು ಮಾತ್ರ ರಚಿಸುತ್ತಾರೆ): ಸ್ಥಿರ ಮಟ್ STATIC_MUT: ಪ್ರಕಾರ = ಪ್ರಕಾರ::ಹೊಸ( ); ಬಾಹ್ಯ "C" { ಸ್ಥಿರ EXTERN_STATIC: ಪ್ರಕಾರ; } fn main() {ಲೆಟ್ static_mut_ptr = &raw mut STATIC_MUT; extern_static_ptr = &raw const EXTERN_STATIC; }
  • API ಯ ಹೊಸ ಭಾಗವನ್ನು ಸ್ಥಿರತೆಯ ವರ್ಗಕ್ಕೆ ಸರಿಸಲಾಗಿದೆ, ಇದರಲ್ಲಿ ವಿಧಾನಗಳು ಮತ್ತು ಗುಣಲಕ್ಷಣಗಳ ಅನುಷ್ಠಾನಗಳನ್ನು ಸ್ಥಿರಗೊಳಿಸಲಾಗಿದೆ:
    • std::thread::Builder::spawn_unchecked
    • std::str::CharIndices::offset
    • std::option::Option::is_none_or
    • [T]:: is_sorted
    • [T]::ಇದರಿಂದ_ವಿಂಗಡಿಸಲಾಗಿದೆ
    • [T]:: ಕೀಲಿಯಿಂದ_ವಿಂಗಡಿಸಲಾಗಿದೆ
    • ಪುನರಾವರ್ತಕ :: is_sorted
    • ಪುನರಾವರ್ತಕ:: ಮೂಲಕ_ವಿಂಗಡಿಸಲಾಗಿದೆ
    • ಪುನರಾವರ್ತಕ:: is_sorted_by_key
    • std::future::Ready::into_inner
    • std::iter::repeat_n
    • ಟೇಕ್‌ಗಾಗಿ ಇಂಪ್ಲ್ ಡಬಲ್‌ಎಂಡೆಡ್‌ಇಟರೇಟರ್

      ಮೂಲ: opennet.ru

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