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

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

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

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

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

fn ಮುಖ್ಯ() {
xs = [0; 34];
println!("{:?}", xs);
}

  • ಚಿಕ್ಕ ಕುರುಹುಗಳ ಔಟ್ಪುಟ್ (ಬ್ಯಾಕ್ಟ್ರೇಸ್), ತುರ್ತು ಸಂದರ್ಭಗಳಲ್ಲಿ ಔಟ್ಪುಟ್ ಅನ್ನು ಒದಗಿಸಲಾಗಿದೆ. ಹೆಚ್ಚಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ ಆಸಕ್ತಿಯಿಲ್ಲದ ಅಂಶಗಳು, ಆದರೆ ಔಟ್ಪುಟ್ ಅನ್ನು ಅಸ್ತವ್ಯಸ್ತಗೊಳಿಸುತ್ತವೆ ಮತ್ತು ಸಮಸ್ಯೆಯ ಪ್ರಾಥಮಿಕ ಕಾರಣಗಳಿಂದ ಗಮನವನ್ನು ಬೇರೆಡೆಗೆ ಸೆಳೆಯುತ್ತವೆ, ಜಾಡಿನಿಂದ ಹೊರಗಿಡಲಾಗುತ್ತದೆ. ಪೂರ್ಣ ಜಾಡನ್ನು ಹಿಂತಿರುಗಿಸಲು, ನೀವು ಪರಿಸರ ವೇರಿಯಬಲ್ "RUST_BACKTRACE=full" ಅನ್ನು ಬಳಸಬಹುದು. ಉದಾಹರಣೆಗೆ, ಕೋಡ್ಗಾಗಿ

fn ಮುಖ್ಯ() {
ದಿಗಿಲು!();
}

ಹಿಂದೆ, ಟ್ರೇಸ್ ಅನ್ನು 23 ಹಂತಗಳಲ್ಲಿ ಔಟ್ಪುಟ್ ಮಾಡಲಾಗಿತ್ತು, ಆದರೆ ಈಗ ಅದನ್ನು 3 ಹಂತಗಳಿಗೆ ಇಳಿಸಲಾಗುತ್ತದೆ, ಇದು ತಕ್ಷಣವೇ ಸಾರವನ್ನು ಗ್ರಹಿಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ:

ಥ್ರೆಡ್ 'ಮುಖ್ಯ' 'ಸ್ಪಷ್ಟ ಪ್ಯಾನಿಕ್' ನಲ್ಲಿ ಪ್ಯಾನಿಕ್ಡ್, src/main.rs:2:5
ಸ್ಟಾಕ್ ಬ್ಯಾಕ್‌ಟ್ರೇಸ್:
0: std::panicking::begin_panic
ನಲ್ಲಿ /rustc/d…d75a/library/std/src/panicking.rs:497
1: ಆಟದ ಮೈದಾನ::ಮುಖ್ಯ
./src/main.rs:2 ನಲ್ಲಿ
2: core::ops::function::FnOnce::call_one
ನಲ್ಲಿ /rustc/d…d75a/library/core/src/ops/function.rs:227

  • LLVM 11 ಅನ್ನು ಬಳಸಿಕೊಂಡು ನಿರ್ಮಿಸಲು rustc ಕಂಪೈಲರ್ ಅನ್ನು ನವೀಕರಿಸಲಾಗಿದೆ (ರಸ್ಟ್ LLVM ಅನ್ನು ಕೋಡ್ ಉತ್ಪಾದನೆಗೆ ಬ್ಯಾಕೆಂಡ್ ಆಗಿ ಬಳಸುತ್ತದೆ). ಅದೇ ಸಮಯದಲ್ಲಿ, ಆವೃತ್ತಿ 8 ರವರೆಗೆ ಹಳೆಯ LLVM ನೊಂದಿಗೆ ನಿರ್ಮಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಉಳಿಸಿಕೊಂಡಿದೆ, ಆದರೆ ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ (rust-lang/llvm-project ನಲ್ಲಿ) LLVM 11 ಅನ್ನು ಈಗ ಬಳಸಲಾಗಿದೆ. LLVM 11 ರ ಬಿಡುಗಡೆಯನ್ನು ಮುಂಬರುವ ದಿನಗಳಲ್ಲಿ ನಿರೀಕ್ಷಿಸಲಾಗಿದೆ ದಿನಗಳು.
  • ವಿಂಡೋಸ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ನಲ್ಲಿ, "-C ಕಂಟ್ರೋಲ್-ಫ್ಲೋ-ಗಾರ್ಡ್" ಫ್ಲ್ಯಾಗ್ ಬಳಸಿ ಸಕ್ರಿಯಗೊಳಿಸಲಾದ ನಿಯಂತ್ರಣ ಹರಿವಿನ ಸಮಗ್ರತೆಯ ಪರಿಶೀಲನೆಗಳನ್ನು (ಕಂಟ್ರೋಲ್ ಫ್ಲೋ ಗಾರ್ಡ್) ಸಕ್ರಿಯಗೊಳಿಸಲು rustc ಕಂಪೈಲರ್ ಬೆಂಬಲವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಇತರ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ಗಳಲ್ಲಿ ಈ ಧ್ವಜವನ್ನು ಸದ್ಯಕ್ಕೆ ನಿರ್ಲಕ್ಷಿಸಲಾಗಿದೆ.
  • API ಯ ಹೊಸ ಭಾಗವನ್ನು ಸ್ಥಿರವಾದ ವರ್ಗಕ್ಕೆ ವರ್ಗಾಯಿಸಲಾಗಿದೆ, ಇದರಲ್ಲಿ ಸ್ಥಿರವಾದ ಗುರುತು::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU ಮತ್ತು f64::TAU.
  • ಸ್ಥಿರಾಂಕಗಳ ಬದಲಿಗೆ ಯಾವುದೇ ಸಂದರ್ಭದಲ್ಲಿ ಅದನ್ನು ಬಳಸುವ ಸಾಧ್ಯತೆಯನ್ನು ನಿರ್ಧರಿಸುವ "const" ಗುಣಲಕ್ಷಣವನ್ನು ವಿಧಾನಗಳಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ:
    • ಶೂನ್ಯವನ್ನು ಹೊರತುಪಡಿಸಿ ಎಲ್ಲಾ ಪೂರ್ಣಾಂಕಗಳಿಗೆ ಹೊಸದು;
    • ಚೆಕ್ಡ್_ಆಡ್, ಚೆಕ್ಡ್_ಸಬ್, ಚೆಕ್ಡ್_ಮುಲ್, ಚೆಕ್ಡ್_ನೆಗ್, ಚೆಕ್ಡ್_ಶ್ಲ್, ಚೆಕ್ಡ್_ಶ್ರ್, ಸ್ಯಾಚುರೇಟಿಂಗ್_ಆಡ್, ಸ್ಯಾಚುರೇಟಿಂಗ್_ಸಬ್ ಮತ್ತು ಸ್ಯಾಚುರೇಟಿಂಗ್_ಮುಲ್ ಎಲ್ಲಾ ಪೂರ್ಣಾಂಕಗಳಿಗೆ;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_loorcase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_Punctuation, is_ascii_graphic, is_ascii_whitespace ಮತ್ತು 8 ವಿಧಗಳು
  • FreeBSD ಗಾಗಿ, FreeBSD 11.4 ನಿಂದ ಟೂಲ್ಕಿಟ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ (FreeBSD 10 LLVM 11 ಅನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ).

ನಿಂದ ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ opennet.ru

ಮೂಲ: linux.org.ru

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