ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯ ಬಿಡುಗಡೆ ರಸ್ಟ್ 1.75 ಮತ್ತು ಯುನಿಕರ್ನಲ್ ಹರ್ಮಿಟ್ 0.6.7

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

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

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

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

  • ಖಾಸಗಿ ಗುಣಲಕ್ಷಣಗಳಲ್ಲಿ "ಅಸಿಂಕ್ ಎಫ್ಎನ್" ಮತ್ತು "-> ಇಂಪ್ಲ್ ಟ್ರೇಟ್" ಸಂಕೇತಗಳನ್ನು ಬಳಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಉದಾಹರಣೆಗೆ, “->impl ಟ್ರೇಟ್” ಅನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ಪುನರಾವರ್ತಕವನ್ನು ಹಿಂದಿರುಗಿಸುವ ಲಕ್ಷಣ ವಿಧಾನವನ್ನು ಬರೆಯಬಹುದು: ಟ್ರೇಟ್ ಕಂಟೈನರ್ {fn ಐಟಂಗಳು(&self) -> impl Iterator; } ಮೈಕಂಟೇನರ್‌ಗಾಗಿ ಇಂಪ್ಲ್ ಕಂಟೈನರ್ {fn ಐಟಂಗಳು(&self) -> impl Iterator {self.items.iter().cloned()}}

    "async fn" ಅನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ಗುಣಲಕ್ಷಣಗಳನ್ನು ಸಹ ರಚಿಸಬಹುದು: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // ಗೆ ವಿಸ್ತರಿಸಲಾಗುವುದು: // fn fetch(&self, url: Url) -> impl Future; }

  • ಪಾಯಿಂಟರ್‌ಗಳಿಗೆ ಸಂಬಂಧಿಸಿದಂತೆ ಬೈಟ್ ಆಫ್‌ಸೆಟ್‌ಗಳನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು API ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಬೇರ್ ಪಾಯಿಂಟರ್‌ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ("*const T" ಮತ್ತು "*mut T"), ಪಾಯಿಂಟರ್‌ಗೆ ಆಫ್‌ಸೆಟ್ ಅನ್ನು ಸೇರಿಸಲು ಕಾರ್ಯಾಚರಣೆಗಳು ಅಗತ್ಯವಾಗಬಹುದು. ಹಿಂದೆ, ಇದಕ್ಕಾಗಿ ":: add(1)" ನಂತಹ ನಿರ್ಮಾಣವನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಯಿತು, "size_of::()" ಗಾತ್ರಕ್ಕೆ ಅನುಗುಣವಾದ ಬೈಟ್‌ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಸೇರಿಸುತ್ತದೆ. ಹೊಸ API ಈ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ ಮತ್ತು "*const u8" ಅಥವಾ "*mut u8" ಗೆ ಪ್ರಕಾರಗಳನ್ನು ಬಿತ್ತರಿಸದೆಯೇ ಬೈಟ್ ಆಫ್‌ಸೆಟ್‌ಗಳನ್ನು ಕುಶಲತೆಯಿಂದ ನಿರ್ವಹಿಸಲು ಸಾಧ್ಯವಾಗಿಸುತ್ತದೆ.
    • ಪಾಯಿಂಟರ್::byte_add
    • ಪಾಯಿಂಟರ್::byte_offset
    • ಪಾಯಿಂಟರ್::byte_offset_from
    • ಪಾಯಿಂಟರ್:: byte_sub
    • ಪಾಯಿಂಟರ್:: wrapping_byte_add
    • ಪಾಯಿಂಟರ್:: wrapping_byte_offset
    • ಪಾಯಿಂಟರ್:: wrapping_byte_sub
  • rustc ಕಂಪೈಲರ್‌ನ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಹೆಚ್ಚಿಸಲು ಮುಂದುವರಿದ ಕೆಲಸ. BOLT ಆಪ್ಟಿಮೈಜರ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಇದು ಲಿಂಕ್-ನಂತರದ ಹಂತದಲ್ಲಿ ಚಲಿಸುತ್ತದೆ ಮತ್ತು ಪೂರ್ವ-ತಯಾರಾದ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಪ್ರೊಫೈಲ್‌ನಿಂದ ಮಾಹಿತಿಯನ್ನು ಬಳಸುತ್ತದೆ. BOLT ಅನ್ನು ಬಳಸುವುದರಿಂದ ಪ್ರೊಸೆಸರ್ ಸಂಗ್ರಹದ ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿ ಬಳಕೆಗಾಗಿ librustc_driver.so ಲೈಬ್ರರಿ ಕೋಡ್‌ನ ವಿನ್ಯಾಸವನ್ನು ಬದಲಾಯಿಸುವ ಮೂಲಕ ಕಂಪೈಲರ್ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಅನ್ನು ಸುಮಾರು 2% ರಷ್ಟು ವೇಗಗೊಳಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.

    LLVM ನಲ್ಲಿ ಆಪ್ಟಿಮೈಸೇಶನ್ ಗುಣಮಟ್ಟವನ್ನು ಸುಧಾರಿಸಲು "-Ccodegen-units=1" ಆಯ್ಕೆಯೊಂದಿಗೆ rustc ಕಂಪೈಲರ್ ಅನ್ನು ನಿರ್ಮಿಸುವುದನ್ನು ಒಳಗೊಂಡಿದೆ. ನಡೆಸಿದ ಪರೀಕ್ಷೆಗಳು "-Ccodegen-units=1" ನಿರ್ಮಾಣದ ಸಂದರ್ಭದಲ್ಲಿ ಸುಮಾರು 1.5% ರಷ್ಟು ಕಾರ್ಯಕ್ಷಮತೆಯ ಹೆಚ್ಚಳವನ್ನು ತೋರಿಸುತ್ತವೆ. x86_64-unknown-linux-gnu ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ಗಾಗಿ ಮಾತ್ರ ಸೇರಿಸಲಾದ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳನ್ನು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ.

    ರಸ್ಟ್‌ನಲ್ಲಿ ಬರೆಯಲಾದ Android ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಘಟಕಗಳ ನಿರ್ಮಾಣ ಸಮಯವನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಹಿಂದೆ ಉಲ್ಲೇಖಿಸಲಾದ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳನ್ನು Google ಪರೀಕ್ಷಿಸಿದೆ. Android ಅನ್ನು ನಿರ್ಮಿಸುವಾಗ “-C codegen-units=1” ಅನ್ನು ಬಳಸುವುದರಿಂದ ಟೂಲ್‌ಕಿಟ್‌ನ ಗಾತ್ರವನ್ನು 5.5% ರಷ್ಟು ಕಡಿಮೆ ಮಾಡಲು ಮತ್ತು ಅದರ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು 1.8% ರಷ್ಟು ಹೆಚ್ಚಿಸಲು ನಮಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಟ್ಟಿತು, ಆದರೆ ಟೂಲ್‌ಕಿಟ್‌ನ ನಿರ್ಮಾಣ ಸಮಯವು ಬಹುತೇಕ ದ್ವಿಗುಣಗೊಂಡಿದೆ.

    ಲಿಂಕ್-ಟೈಮ್ ಕಸ ಸಂಗ್ರಹಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದು (“--ಜಿಸಿ-ವಿಭಾಗಗಳು”) ಕಾರ್ಯಕ್ಷಮತೆಯ ಲಾಭವನ್ನು 1.9% ವರೆಗೆ ತಂದಿತು, ಲಿಂಕ್-ಟೈಮ್ ಆಪ್ಟಿಮೈಸೇಶನ್ (LTO) 7.7% ವರೆಗೆ ಮತ್ತು ಪ್ರೊಫೈಲ್-ಆಧಾರಿತ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳನ್ನು (PGO) 19.8% ವರೆಗೆ ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ. ಅಂತಿಮ ಹಂತದಲ್ಲಿ, BOLT ಉಪಯುಕ್ತತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳನ್ನು ಅನ್ವಯಿಸಲಾಯಿತು, ಇದು ನಿರ್ಮಾಣ ವೇಗವನ್ನು 24.7% ಗೆ ಹೆಚ್ಚಿಸಲು ಸಾಧ್ಯವಾಗಿಸಿತು, ಆದರೆ ಟೂಲ್‌ಕಿಟ್‌ನ ಗಾತ್ರವು 10.9% ಹೆಚ್ಚಾಗಿದೆ.

    ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯ ಬಿಡುಗಡೆ ರಸ್ಟ್ 1.75 ಮತ್ತು ಯುನಿಕರ್ನಲ್ ಹರ್ಮಿಟ್ 0.6.7

  • API ಯ ಹೊಸ ಭಾಗವನ್ನು ಸ್ಥಿರತೆಯ ವರ್ಗಕ್ಕೆ ಸರಿಸಲಾಗಿದೆ, ಇದರಲ್ಲಿ ವಿಧಾನಗಳು ಮತ್ತು ಗುಣಲಕ್ಷಣಗಳ ಅನುಷ್ಠಾನಗಳನ್ನು ಸ್ಥಿರಗೊಳಿಸಲಾಗಿದೆ:
    • ಪರಮಾಣು*:: from_ptr
    • ಫೈಲ್ಟೈಮ್ಸ್
    • FileTimesExt
    • ಫೈಲ್::set_modified
    • ಫೈಲ್::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • ಆಯ್ಕೆ::ಆಸ್_ಸ್ಲೈಸ್
    • ಆಯ್ಕೆ:: as_mut_slice
    • ಪಾಯಿಂಟರ್::byte_add
    • ಪಾಯಿಂಟರ್::byte_offset
    • ಪಾಯಿಂಟರ್::byte_offset_from
    • ಪಾಯಿಂಟರ್:: byte_sub
    • ಪಾಯಿಂಟರ್:: wrapping_byte_add
    • ಪಾಯಿಂಟರ್:: wrapping_byte_offset
    • ಪಾಯಿಂಟರ್:: wrapping_byte_sub
  • ಸ್ಥಿರಾಂಕಗಳ ಬದಲಿಗೆ ಯಾವುದೇ ಸಂದರ್ಭದಲ್ಲಿ ಅದನ್ನು ಬಳಸುವ ಸಾಧ್ಯತೆಯನ್ನು ನಿರ್ಧರಿಸುವ "const" ಗುಣಲಕ್ಷಣವನ್ನು ಕಾರ್ಯಗಳಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ:
    • Ipv6Addr::to_ipv4_mapped
    • ಬಹುಶಃUninit::assume_init_read
    • ಬಹುಶಃ ಯುನಿನಿಟ್:: ಶೂನ್ಯ
    • mem:: ತಾರತಮ್ಯ
    • mem:: ಶೂನ್ಯ
  • csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd ಮತ್ತು mipsel-unknown-netbsd ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ಗಳಿಗೆ ಮೂರನೇ ಹಂತದ ಬೆಂಬಲವನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ. ಮೂರನೇ ಹಂತವು ಮೂಲಭೂತ ಬೆಂಬಲವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ಆದರೆ ಸ್ವಯಂಚಾಲಿತ ಪರೀಕ್ಷೆ ಇಲ್ಲದೆ, ಅಧಿಕೃತ ನಿರ್ಮಾಣಗಳನ್ನು ಪ್ರಕಟಿಸುವುದು ಅಥವಾ ಕೋಡ್ ಅನ್ನು ನಿರ್ಮಿಸಬಹುದೇ ಎಂದು ಪರಿಶೀಲಿಸುವುದು.

ಹೆಚ್ಚುವರಿಯಾಗಿ, ಹರ್ಮಿಟ್ ಪ್ರಾಜೆಕ್ಟ್‌ನ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ನಾವು ಗಮನಿಸಬಹುದು, ಇದು ರಸ್ಟ್ ಭಾಷೆಯಲ್ಲಿ ಬರೆಯಲಾದ ವಿಶೇಷವಾದ ಕರ್ನಲ್ (ಯೂನಿಕರ್ನಲ್) ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುತ್ತದೆ, ಹೆಚ್ಚುವರಿ ಲೇಯರ್‌ಗಳಿಲ್ಲದೆ ಹೈಪರ್‌ವೈಸರ್ ಅಥವಾ ಬೇರ್ ಹಾರ್ಡ್‌ವೇರ್‌ನ ಮೇಲೆ ಚಲಿಸಬಹುದಾದ ಸ್ವಯಂ-ಹೊಂದಿರುವ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಸಾಧನಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಮತ್ತು ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ ಇಲ್ಲದೆ. ನಿರ್ಮಿಸಿದಾಗ, ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಲೈಬ್ರರಿಗೆ ಸ್ಥಿರವಾಗಿ ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ, ಇದು OS ಕರ್ನಲ್ ಮತ್ತು ಸಿಸ್ಟಮ್ ಲೈಬ್ರರಿಗಳಿಗೆ ಸಂಬಂಧಿಸದೆ ಎಲ್ಲಾ ಅಗತ್ಯ ಕಾರ್ಯಗಳನ್ನು ಸ್ವತಂತ್ರವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ. ಯೋಜನೆಯ ಕೋಡ್ ಅನ್ನು ಅಪಾಚೆ 2.0 ಮತ್ತು MIT ಪರವಾನಗಿಗಳ ಅಡಿಯಲ್ಲಿ ವಿತರಿಸಲಾಗಿದೆ. ರಸ್ಟ್, ಗೋ, ಫೋರ್ಟ್ರಾನ್, ಸಿ ಮತ್ತು ಸಿ++ ನಲ್ಲಿ ಬರೆಯಲಾದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಅದ್ವಿತೀಯ ಕಾರ್ಯಗತಗೊಳಿಸಲು ಅಸೆಂಬ್ಲಿಯನ್ನು ಬೆಂಬಲಿಸಲಾಗುತ್ತದೆ. ಯೋಜನೆಯು ತನ್ನದೇ ಆದ ಬೂಟ್‌ಲೋಡರ್ ಅನ್ನು ಸಹ ಅಭಿವೃದ್ಧಿಪಡಿಸುತ್ತಿದೆ, ಅದು QEMU ಮತ್ತು KVM ಅನ್ನು ಬಳಸಿಕೊಂಡು ಹರ್ಮಿಟ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.

ಮೂಲ: opennet.ru

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