ರಸ್ಟ್ 1.34 ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯ ಬಿಡುಗಡೆ

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

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

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

  • crates.io ಪಬ್ಲಿಕ್ ರಿಜಿಸ್ಟ್ರಿಯೊಂದಿಗೆ ಸಹಬಾಳ್ವೆ ಮಾಡಬಹುದಾದ ಪರ್ಯಾಯ ಪ್ಯಾಕೇಜ್ ರಿಜಿಸ್ಟ್ರಿಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಕಾರ್ಗೋ ಪ್ಯಾಕೇಜ್ ಮ್ಯಾನೇಜರ್‌ಗೆ ಪರಿಕರಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಉದಾಹರಣೆಗೆ, ಖಾಸಗಿ ಅಪ್ಲಿಕೇಶನ್ ಡೆವಲಪರ್‌ಗಳು ಈಗ ತಮ್ಮದೇ ಆದ ಖಾಸಗಿ ನೋಂದಾವಣೆಯನ್ನು ಬಳಸಬಹುದು, ಅದನ್ನು Cargo.toml ನಲ್ಲಿ ಅವಲಂಬನೆಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡುವಾಗ ಬಳಸಬಹುದಾಗಿದೆ ಮತ್ತು ಅವರ ಉತ್ಪನ್ನಗಳಿಗೆ crates.io ಅನ್ನು ಹೋಲುವ ಆವೃತ್ತಿಯ ಮಾದರಿಯನ್ನು ಬಳಸಬಹುದು, ಜೊತೆಗೆ crates.io ಮತ್ತು crates.io ಎರಡನ್ನೂ ಉಲ್ಲೇಖಿಸಬಹುದು. ಅವಲಂಬನೆಗಳಲ್ಲಿ. ನಿಮ್ಮ ಸ್ವಂತ ನೋಂದಾವಣೆಗೆ.

    ~/.cargo/config ಗೆ ಬಾಹ್ಯ ನೋಂದಾವಣೆ ಸೇರಿಸಲು
    "[ರಿಜಿಸ್ಟ್ರಿಗಳು]" ವಿಭಾಗದಲ್ಲಿ "ನನ್ನ-ನೋಂದಣಿ" ಎಂಬ ಹೊಸ ಆಯ್ಕೆಯನ್ನು ಒದಗಿಸಲಾಗಿದೆ ಮತ್ತು "[ಅವಲಂಬನೆಗಳು]" ವಿಭಾಗದಲ್ಲಿ Cargo.toml ನಲ್ಲಿನ ಅವಲಂಬನೆಗಳಲ್ಲಿ ಬಾಹ್ಯ ನೋಂದಾವಣೆಯನ್ನು ನಮೂದಿಸಲು "ಇತರ-ಕ್ರೇಟ್" ಆಯ್ಕೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಹೆಚ್ಚುವರಿ ನೋಂದಾವಣೆಗೆ ಸಂಪರ್ಕಿಸಲು, ~/.cargo/credentials ಫೈಲ್‌ನಲ್ಲಿ ದೃಢೀಕರಣ ಟೋಕನ್ ಅನ್ನು ಇರಿಸಿ ಮತ್ತು ಆಜ್ಞೆಯನ್ನು ಚಲಾಯಿಸಿ
    "ಸರಕು ಲಾಗಿನ್ --ರಿಜಿಸ್ಟ್ರಿ=ಮೈ-ರಿಜಿಸ್ಟ್ರಿ", ಮತ್ತು ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಪ್ರಕಟಿಸಲು -
    "ಸರಕು ಪ್ರಕಟಣೆ --ನೋಂದಣಿ=ನನ್ನ-ನೋಂದಣಿ";

  • "?" ಆಪರೇಟರ್ ಅನ್ನು ಬಳಸಲು ಸಂಪೂರ್ಣ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಡಾಕ್ಟೆಸ್ಟ್‌ಗಳಲ್ಲಿ, ಇದು ದಸ್ತಾವೇಜನ್ನು ಪರೀಕ್ಷೆಗಳಾಗಿ ಉದಾಹರಣೆ ಕೋಡ್ ಅನ್ನು ಬಳಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಹಿಂದೆ ಆಪರೇಟರ್
    "?" "fn main()" ಫಂಕ್ಷನ್ ಅಥವಾ "#[test]" ಫಂಕ್ಷನ್‌ಗಳಲ್ಲಿ ಮಾತ್ರ ಪರೀಕ್ಷಾ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯ ಸಮಯದಲ್ಲಿ ದೋಷಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಬಳಸಬಹುದು;

  • ಕಾರ್ಯವಿಧಾನದ ಮ್ಯಾಕ್ರೋಗಳನ್ನು ಬಳಸಿಕೊಂಡು ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಕಸ್ಟಮ್ ಗುಣಲಕ್ಷಣಗಳಲ್ಲಿ, ಟೋಕನ್‌ಗಳ ಅನಿಯಂತ್ರಿತ ಸೆಟ್‌ಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಿದೆ (“#[attr($tokens)]”, “#[attr[$tokens]] ಮತ್ತು #[attr{$tokens}]”) . ಹಿಂದೆ, ಸ್ಟ್ರಿಂಗ್ ಲಿಟರಲ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರೀ/ರಿಕರ್ಸಿವ್ ರೂಪದಲ್ಲಿ ಅಂಶಗಳನ್ನು ಮಾತ್ರ ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದಾಗಿತ್ತು, ಉದಾಹರಣೆಗೆ “#[foo(bar, baz(quux, foo = “bar”)))]”, ಆದರೆ ಈಗ ಎಣಿಕೆಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಿದೆ (' #[ಶ್ರೇಣಿ(0. .10)]') ಮತ್ತು "#[ಬೌಂಡ್(ಟಿ: ಮೈಟ್ರೇಟ್)]" ನಂತಹ ನಿರ್ಮಾಣಗಳು;
  • TryFrom ಮತ್ತು TryInto ಗುಣಲಕ್ಷಣಗಳನ್ನು ಸ್ಥಿರಗೊಳಿಸಲಾಗಿದೆ, ದೋಷ ನಿರ್ವಹಣೆಯೊಂದಿಗೆ ಪ್ರಕಾರದ ಪರಿವರ್ತನೆಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಪೂರ್ಣಾಂಕ ಪ್ರಕಾರಗಳೊಂದಿಗೆ from_be_bytes ನಂತಹ ವಿಧಾನಗಳು ಅರೇಗಳನ್ನು ಇನ್‌ಪುಟ್ ಆಗಿ ಬಳಸುತ್ತವೆ, ಆದರೆ ಡೇಟಾವು ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಲೈಸ್ ಪ್ರಕಾರದಲ್ಲಿ ಬರುತ್ತದೆ ಮತ್ತು ಅರೇಗಳು ಮತ್ತು ಸ್ಲೈಸ್‌ಗಳ ನಡುವೆ ಪರಿವರ್ತಿಸುವುದು ಹಸ್ತಚಾಲಿತವಾಗಿ ಮಾಡಲು ಸಮಸ್ಯಾತ್ಮಕವಾಗಿರುತ್ತದೆ. ಹೊಸ ಗುಣಲಕ್ಷಣಗಳ ಸಹಾಯದಿಂದ, ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಕಾರ್ಯಾಚರಣೆಯನ್ನು .try_into() ಗೆ ಕರೆ ಮಾಡುವ ಮೂಲಕ ಹಾರಾಟದಲ್ಲಿ ನಿರ್ವಹಿಸಬಹುದು, ಉದಾಹರಣೆಗೆ, "ಲೆಟ್ num = u32::from_be_bytes(slice.try_into()?)". ಯಾವಾಗಲೂ ಯಶಸ್ವಿಯಾಗುವ ಪರಿವರ್ತನೆಗಳಿಗಾಗಿ (ಉದಾಹರಣೆಗೆ, ಟೈಪ್ u8 ನಿಂದ u32 ವರೆಗೆ), ಪಾರದರ್ಶಕ ಬಳಕೆಯನ್ನು ಅನುಮತಿಸಲು ದೋಷರಹಿತ ದೋಷ ಪ್ರಕಾರವನ್ನು ಸೇರಿಸಲಾಗಿದೆ
    ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಎಲ್ಲಾ "ಇಂದ" ಅಳವಡಿಕೆಗಳಿಗಾಗಿ TryFrom;

  • CommandExt::before_exec ಫಂಕ್ಷನ್ ಅನ್ನು ಅಸಮ್ಮತಿಸಲಾಗಿದೆ, ಇದು ಫೋರ್ಕ್() ಕರೆ ನಂತರ ಫೋರ್ಕ್ ಮಾಡಿದ ಚೈಲ್ಡ್ ಪ್ರೊಸೆಸ್ ಸಂದರ್ಭದಲ್ಲಿ ಎಕ್ಸಿಕ್ಯೂಟ್ ಮಾಡಲಾದ ಎಕ್ಸಿಕ್‌ಗಿಂತ ಮೊದಲು ಹ್ಯಾಂಡ್ಲರ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಅವಕಾಶ ಮಾಡಿಕೊಟ್ಟಿತು. ಅಂತಹ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ, ಫೈಲ್ ಡಿಸ್ಕ್ರಿಪ್ಟರ್‌ಗಳು ಮತ್ತು ಮ್ಯಾಪ್ ಮಾಡಲಾದ ಮೆಮೊರಿ ಪ್ರದೇಶಗಳಂತಹ ಪೋಷಕ ಪ್ರಕ್ರಿಯೆಯ ಕೆಲವು ಸಂಪನ್ಮೂಲಗಳನ್ನು ನಕಲು ಮಾಡಬಹುದು, ಇದು ವಿವರಿಸಲಾಗದ ನಡವಳಿಕೆ ಮತ್ತು ಲೈಬ್ರರಿಗಳ ತಪ್ಪಾದ ಕಾರ್ಯಾಚರಣೆಗೆ ಕಾರಣವಾಗಬಹುದು.
    before_exec ಬದಲಿಗೆ, ಅಸುರಕ್ಷಿತ ಕಾರ್ಯ CommandExt::pre_exec ಅನ್ನು ಬಳಸಲು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ.

  • 8 ರಿಂದ 64 ಬಿಟ್‌ಗಳವರೆಗೆ (ಉದಾಹರಣೆಗೆ, AtomicU8) ಗಾತ್ರದಲ್ಲಿ ಸ್ಥಿರವಾದ ಸಹಿ ಮತ್ತು ಸಹಿ ಮಾಡದ ಪರಮಾಣು ಪೂರ್ಣಾಂಕ ಪ್ರಕಾರಗಳು, ಹಾಗೆಯೇ ಸಹಿ ಮಾಡಲಾದ ವಿಧಗಳು NonZeroI[8|16|32|54|128].
  • ಯಾವುದೇ::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, ತತ್‌ಕ್ಷಣ::checked_[ಸೇರಿಸಿದಂತೆ API ಯ ಹೊಸ ಭಾಗವನ್ನು ಸ್ಥಿರತೆಯ ವರ್ಗಕ್ಕೆ ಸರಿಸಲಾಗಿದೆ. |ಉಪ] ಮತ್ತು ಸಿಸ್ಟಂಟೈಮ್ ಅನ್ನು ಸ್ಥಿರಗೊಳಿಸಲಾಗಿದೆ ::ಪರಿಶೀಲಿಸಲಾಗಿದೆ_[ಸೇರಿಸು|ಉಪ]. iter::from_fn ಮತ್ತು iter:: ಉತ್ತರಾಧಿಕಾರಿಗಳ ಕಾರ್ಯಗಳನ್ನು ಸ್ಥಿರಗೊಳಿಸಲಾಗಿದೆ;
  • ಎಲ್ಲಾ ಪೂರ್ಣಾಂಕ ಪ್ರಕಾರಗಳಿಗೆ, ಚೆಕ್ಡ್_ಪೌ, ಸ್ಯಾಚುರೇಟಿಂಗ್_ಪೌ, ರಾಪಿಂಗ್_ಪೌ, ಮತ್ತು ಓವರ್‌ಫ್ಲೋವಿಂಗ್_ಪೌ ವಿಧಾನಗಳನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ;
  • "-C ಲಿಂಕರ್-ಪ್ಲಗಿನ್-lto" ಬಿಲ್ಡ್ ಆಯ್ಕೆಯನ್ನು ಸೂಚಿಸುವ ಮೂಲಕ ಲಿಂಕ್ ಮಾಡುವ ಹಂತದಲ್ಲಿ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಸೇರಿಸಲಾಗಿದೆ (rustc ರಸ್ಟ್ ಕೋಡ್ ಅನ್ನು LLVM ಬಿಟ್‌ಕೋಡ್‌ಗೆ ಕಂಪೈಲ್ ಮಾಡುತ್ತದೆ, ಇದು LTO ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳನ್ನು ಅನ್ವಯಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ).

ಮೂಲ: opennet.ru

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