ක්‍රමලේඛන භාෂාව Rust 1.75 සහ Unikernel Hermit 0.6.7 නිකුත් කිරීම

Mozilla ව්‍යාපෘතිය විසින් ආරම්භ කරන ලද, නමුත් දැන් ස්වාධීන ලාභ නොලබන සංවිධානයක් වන Rust Foundation හි අනුග්‍රහය යටතේ සංවර්ධනය කරන ලද Rust 1.75 පොදු කාර්ය ක්‍රමලේඛන භාෂාව නිකුත් කිරීම ප්‍රකාශයට පත් කර ඇත. භාෂාව මතක ආරක්‍ෂාව කෙරෙහි අවධානය යොමු කරන අතර කසළ එකතු කරන්නෙකු සහ ධාවන කාලය (ධාවන කාලය සම්මත පුස්තකාලයේ මූලික ආරම්භ කිරීම සහ නඩත්තු කිරීම දක්වා අඩු කර ඇති අතර) භාවිතය වළක්වා ගනිමින් ඉහළ රැකියා සමාන්තරතාවයක් ලබා ගැනීමට මාධ්‍යයන් සපයයි.

රස්ට්ගේ මතකය හැසිරවීමේ ක්‍රම මගින් පොයින්ටර් හසුරුවන විට ඇතිවන දෝෂ වලින් සංවර්ධකයා සුරකින අතර අඩු මට්ටමේ මතකය හැසිරවීම නිසා පැන නගින ගැටළු වලින් ආරක්ෂා කරයි, එනම් මතක ප්‍රදේශයකට නිදහස් වූ පසු ප්‍රවේශ වීම, ශුන්‍ය දර්ශක ඉවත් කිරීම, බෆරය ඉක්මවා යාම යනාදිය. පුස්තකාල බෙදා හැරීම, ගොඩනැගීම් සැපයීම සහ පරායත්තතා කළමනාකරණය කිරීම සඳහා, ව්‍යාපෘතිය Cargo pack manager සංවර්ධනය කරයි. crates.io ගබඩාව පුස්තකාල සත්කාරකත්වය සඳහා සහය දක්වයි.

සමුද්දේශ පරීක්ෂා කිරීම, වස්තු හිමිකාරිත්වය නිරීක්ෂණය කිරීම, වස්තුවේ ආයු කාලය (පථය) නිරීක්ෂණය කිරීම සහ කේත ක්‍රියාත්මක කිරීමේදී මතක ප්‍රවේශයේ නිවැරදි බව තක්සේරු කිරීම හරහා සම්පාදනය කරන වේලාවේදී මතක ආරක්ෂාව රස්ට් තුළ සපයනු ලැබේ. මලකඩ පූර්ණ සංඛ්‍යා පිටාර ගැලීම් වලට එරෙහිව ආරක්ෂාව සපයයි, භාවිතයට පෙර විචල්‍ය අගයන් අනිවාර්යයෙන් ආරම්භ කිරීම අවශ්‍ය වේ, සම්මත පුස්තකාලයේ දෝෂ වඩා හොඳින් හසුරුවයි, පෙරනිමියෙන් වෙනස් කළ නොහැකි යොමු සහ විචල්‍යයන් පිළිබඳ සංකල්පය යොදයි, තාර්කික දෝෂ අවම කිරීම සඳහා ශක්තිමත් ස්ථිතික ටයිප් කිරීමක් ඉදිරිපත් කරයි.

ප්රධාන නවෝත්පාදන:

  • පුද්ගලික ගතිලක්ෂණ වල "Async fn" සහ "->impl Trait" අංකනය භාවිතා කිරීමේ හැකියාව එක් කරන ලදී. උදාහරණයක් ලෙස, “->impl Trait” භාවිතයෙන් ඔබට පුනරාවර්තකයක් ආපසු ලබා දෙන ලක්ෂණ ක්‍රමයක් ලිවිය හැක: trait Container {fn items(&self) -> impl Iterator; } Impl MyContainer සඳහා කන්ටේනරය {fn items(&self) -> impl Iterator {self.items.iter().cloned()}}

    ඔබට "async fn" භාවිතයෙන් ගති ලක්ෂණ නිර්මාණය කළ හැක: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // දක්වා පුළුල් වනු ඇත: // fn ලබා ගැනීම (&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 වේදිකාව සඳහා පමණි.

    රස්ට් වලින් ලියා ඇති ඇන්ඩ්‍රොයිඩ් වේදිකා සංරචක ගොඩනැගීමේ කාලය අඩු කිරීම සඳහා කලින් සඳහන් කළ ප්‍රශස්තිකරණයන් ගූගල් විසින් පරීක්ෂා කරන ලදී. ඇන්ඩ්‍රොයිඩ් තැනීමේදී “-C codegen-units=1” භාවිතා කිරීමෙන් අපට මෙවලම් කට්ටලයේ ප්‍රමාණය 5.5% කින් අඩු කිරීමට සහ එහි ක්‍රියාකාරිත්වය 1.8% කින් වැඩි කිරීමට හැකි වූ අතර මෙවලම් කට්ටලයේ ගොඩනැගීමේ කාලය දෙගුණයකට ආසන්න විය.

    සබැඳි-කාල කුණු එකතු කිරීම සබල කිරීම (“--gc-sections”) කාර්ය සාධන ලාභය 1.9% දක්වා ද, සබැඳි-කාල ප්‍රශස්තිකරණය (LTO) 7.7% දක්වා ද, පැතිකඩ මත පදනම් වූ ප්‍රශස්තකරණය (PGO) 19.8% දක්වා ද ගෙන ආවේය. අවසාන අවස්ථාවේදී, BOLT උපයෝගීතාව භාවිතයෙන් ප්‍රශස්තකරණයන් යොදන ලද අතර, එමඟින් ගොඩනැගීමේ වේගය 24.7% දක්වා වැඩි කිරීමට හැකි වූ නමුත් මෙවලම් කට්ටලයේ ප්‍රමාණය 10.9% කින් වැඩි විය.

    ක්‍රමලේඛන භාෂාව Rust 1.75 සහ Unikernel Hermit 0.6.7 නිකුත් කිරීම

  • API හි නව කොටසක් ස්ථායී කාණ්ඩයට ගෙන ගොස් ඇත, ගතිලක්ෂණවල ක්‍රම සහ ක්‍රියාත්මක කිරීම් ස්ථායීකරණය කර ඇත:
    • පරමාණු*::from_ptr
    • FileTimes
    • FileTimesExt
    • ගොනුව::set_modified
    • ගොනුව::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • විකල්පය:: ලෙස_slice
    • විකල්පය::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
    • සමහරවිටUninit::zeroed
    • mem:: වෙනස් කොට සලකන
    • mem::zeroed
  • csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd සහ mipsel-unknown-netbsd වේදිකා සඳහා තුන්වන මට්ටමේ සහය ක්‍රියාත්මක කර ඇත. තුන්වන මට්ටමට මූලික සහාය ඇතුළත් වේ, නමුත් ස්වයංක්‍රීය පරීක්ෂාවකින් තොරව, නිල ගොඩනැගීම් ප්‍රකාශනය කිරීම හෝ කේතය ගොඩනගා ගත හැකිද යන්න පරීක්ෂා කිරීම.

මීට අමතරව, අපට හර්මිට් ව්‍යාපෘතියේ නව අනුවාදයක් සටහන් කළ හැකිය, එය රස්ට් භාෂාවෙන් ලියා ඇති විශේෂිත කර්නලයක් (යුනිකර්නලය) සංවර්ධනය කරයි, අමතර ස්ථර නොමැතිව හයිපර්වයිසර් හෝ හිස් දෘඩාංග මත ක්‍රියා කළ හැකි ස්වයං අන්තර්ගත යෙදුම් තැනීම සඳහා මෙවලම් සපයයි. සහ මෙහෙයුම් පද්ධතියක් නොමැතිව. ගොඩනඟන විට, යෙදුම ස්ථිතිකව පුස්තකාලයකට සම්බන්ධ කර ඇති අතර, එය OS කර්නලය සහ පද්ධති පුස්තකාලවලට සම්බන්ධ නොවී, ස්වාධීනව අවශ්ය සියලු ක්රියාකාරිත්වය ක්රියාත්මක කරයි. ව්‍යාපෘති කේතය Apache 2.0 සහ MIT බලපත්‍ර යටතේ බෙදා හැරේ. Rust, Go, Fortran, C සහ C++ වලින් ලියා ඇති යෙදුම් තනිවම ක්‍රියාත්මක කිරීම සඳහා එකලස් කිරීම සහාය දක්වයි. මෙම ව්‍යාපෘතිය QEMU සහ KVM භාවිතයෙන් හර්මිට් දියත් කිරීමට ඉඩ සලසන තමන්ගේම ඇරඹුම් කාරකයක් ද සංවර්ධනය කරමින් සිටී.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න