ரஸ்ட் 1.38 நிரலாக்க மொழி வெளியீடு

வெளியிடப்பட்டது கணினி நிரலாக்க மொழி வெளியீடு துரு 1.38, Mozilla திட்டத்தால் நிறுவப்பட்டது. மொழி நினைவக பாதுகாப்பில் கவனம் செலுத்துகிறது, தானியங்கி நினைவக நிர்வாகத்தை வழங்குகிறது, மேலும் குப்பை சேகரிப்பான் அல்லது இயக்க நேரத்தைப் பயன்படுத்தாமல் உயர் பணி இணையான நிலையை அடைவதற்கான வழிமுறையை வழங்குகிறது.

ரஸ்டின் தானியங்கி நினைவக மேலாண்மை டெவலப்பரை சுட்டிக்காட்டி கையாளுதலில் இருந்து விடுவிக்கிறது மற்றும் இலவச நினைவக அணுகல்கள், பூஜ்ய சுட்டிக்காட்டி குறைபாடுகள், பஃபர் ஓவர்ரன்கள் மற்றும் பல போன்ற குறைந்த-நிலை நினைவக கையாளுதலில் இருந்து எழும் சிக்கல்களிலிருந்து பாதுகாக்கிறது. நூலகங்களை விநியோகிக்கவும், அசெம்பிளியை உறுதி செய்யவும் மற்றும் திட்டத்தின் சார்புகளை நிர்வகிக்கவும் ஒரு தொகுப்பு மேலாளர் உருவாக்கப்படுகிறது. சரக்கு, நிரலுக்குத் தேவையான நூலகங்களை ஒரே கிளிக்கில் பெற உங்களை அனுமதிக்கிறது. நூலகங்களை ஹோஸ்ட் செய்ய ஒரு களஞ்சியம் துணைபுரிகிறது crates.io.

முக்கிய புதுமைகள்:

  • பைப்லைன் செய்யப்பட்ட தொகுத்தல் முறை (பைப்லைன்) சேர்க்கப்பட்டது, இதில் சார்பு க்ரேட் தொகுப்பின் உருவாக்கம், சார்பு மெட்டாடேட்டா கிடைக்கும் வரை அதன் தொகுப்பு முடிவடையும் வரை காத்திருக்காமல் தொடங்குகிறது. ஒரு தொகுப்பை தொகுக்கும்போது, ​​சார்புகளை முழுமையாக இணைக்க வேண்டிய அவசியமில்லை, மெட்டாடேட்டாவை வரையறுக்க வேண்டும், இதில் வகைகள், சார்புகள் மற்றும் ஏற்றுமதி செய்யப்பட்ட கூறுகளின் பட்டியல்கள் உள்ளன. மெட்டாடேட்டா தொகுத்தல் செயல்பாட்டின் ஆரம்பத்தில் கிடைக்கிறது, எனவே இணைக்கப்பட்ட தொகுப்புகள் இப்போது மிகவும் முன்னதாகவே தொகுக்கப்படலாம். ஒற்றை தொகுப்புகளை உருவாக்கும்போது, ​​முன்மொழியப்பட்ட பயன்முறை செயல்திறனை பாதிக்காது, ஆனால் உருவாக்கமானது கிளை சார்ந்த சார்புகளுடன் தொகுப்புகளை உள்ளடக்கியிருந்தால், ஒட்டுமொத்த உருவாக்க நேரத்தை 10-20% குறைக்கலாம்;
  • செயல்பாடுகளின் தவறான பயன்பாட்டைக் கண்டறிவதை உறுதி செய்கிறது std::mem::தொடக்கப்படாதது и std::mem::zeroed. எடுத்துக்காட்டாக, std::mem:: uninitialized ஆனது வரிசைகளை விரைவாக உருவாக்குவதற்கு வசதியானது, ஆனால் இது கம்பைலரை தவறாக வழிநடத்துகிறது, ஏனெனில் அது துவக்கப்பட்டதாகத் தோன்றுகிறது, ஆனால் உண்மையில் மதிப்பு துவக்கப்படாமல் உள்ளது. மெம்::தொடக்கப்படாத செயல்பாடு ஏற்கனவே நிறுத்தப்பட்டதாகக் குறிக்கப்பட்டுள்ளது, அதற்குப் பதிலாக இடைநிலை வகையைப் பயன்படுத்த பரிந்துரைக்கப்படுகிறது. ஒருவேளை யூனிட். mem ::zeroed ஐப் பொறுத்தவரை, இந்த செயல்பாடு பூஜ்ஜிய மதிப்புகளை ஏற்க முடியாத வகைகளில் சிக்கல்களை ஏற்படுத்தும்.

    வரையறுக்கப்படாத நடத்தையை அடையாளம் காண உதவ, புதிய வெளியீடு கம்பைலரில் ஒரு மெல்லிய காசோலையைச் சேர்க்கிறது, இது mem::uninitialized அல்லது mem::zeroed உடன் சில சிக்கல்களைக் கண்டறியும். எடுத்துக்காட்டாக, பூஜ்ய மதிப்புகளை ஏற்க முடியாத சுட்டிப் பொருட்களைக் குறிக்கும் &T மற்றும் Box‹T› வகைகளுடன் mem::uninitialized அல்லது mem::zeroed ஐப் பயன்படுத்த முயற்சிக்கும்போது இப்போது பிழை ஏற்பட்டது;

  • க்ரேட் பேக்கேஜ்கள் வழக்கற்றுப் போய்விட்டதாகக் குறிக்கப்படுவதற்கும், எதிர்காலத்தில் நீக்குவதற்குத் திட்டமிடுவதற்கும் அனுமதிக்க, “#[நிறுத்தப்பட்ட]” பண்புக்கூறு விரிவாக்கப்பட்டது. ரஸ்ட் 1.38 இன் படி, இந்த பண்பு மேக்ரோக்களுக்கும் பயன்படுத்தப்படலாம்;
  • துணைத் தொகுதிகளில் “#[global_allocator]” பண்புக்கூறைப் பயன்படுத்தும் திறன் சேர்க்கப்பட்டது;
  • அம்சம் சேர்க்கப்பட்டது std:: any::type_name, இது வகையின் பெயரைக் கண்டறிய உங்களை அனுமதிக்கிறது, இது பிழைத்திருத்த நோக்கங்களுக்காக பயனுள்ளதாக இருக்கும். எடுத்துக்காட்டாக, நிரல் செயல்பாட்டின் போது எந்த வகை செயல்பாடு அழைக்கப்படுகிறது என்பதை நீங்கள் கண்டுபிடிக்கலாம்:

    fn gen_value‹T: Default>() -› T {
    println!("{} இன் நிகழ்வைத் தொடங்குதல்", std::any::type_name::‹T›());
    இயல்புநிலை::default()
    }

    fn முக்கிய() {
    விடு _: i32 = gen_value(); # "i32" அச்சிடப்படும்
    விடு _: சரம் = gen_value(); # "alloc::string::String" என்று அச்சிடும்
    }

  • நிலையான நூலகத்தின் விரிவாக்கப்பட்ட செயல்பாடுகள்:
    • ஸ்லைஸ்::{concat, connect, join} இப்போது &T க்கு கூடுதலாக &[T] மதிப்பை எடுக்கலாம்;
    • "*const T" மற்றும் "*mut T" இப்போது மார்க்கரை செயல்படுத்துகிறது ::Unpin;
    • "Arc‹[T]›" மற்றும் "Rc‹[T]›" இப்போது FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} இப்போது DoubleEndedIterator ஐ செயல்படுத்தவும்.
    • ascii::EscapeDefault குளோன் மற்றும் காட்சியை செயல்படுத்துகிறது.
  • நிலைப்படுத்தப்பட்ட முறைகள் உட்பட, APIகளின் புதிய பகுதி நிலையான வகைக்கு மாற்றப்பட்டது
    • ‹*const T›::cast, ‹*mut T›::cast,
    • காலம்::as_secs_f{32|64},
    • காலம்::div_duration_f{32|64},
    • காலம்::div_f{32|64},
    • காலம்::from_secs_f{32|64},
    • காலம்::mul_f{32|64},
    • மீதமுள்ளவற்றுடன் பிரிவு செயல்பாடுகள்
      அனைத்து முழு எண் முதற்பொருள்களுக்கும் div_euclid மற்றும் rem_euclid;

  • கார்கோ பேக்கேஜ் மேனேஜரில் பல்வேறு அம்சங்களை இயக்க, “--features” விருப்பத்தை பலமுறை குறிப்பிடுவதற்கான ஆதரவு சேர்க்கப்பட்டது;
  • தொகுப்பி மூன்றில் ஒரு பகுதியை வழங்குகிறது நிலை aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-gnu, x7_7-uwp-windows-msvc-தெரிந்த arminuns-msvx32 இலக்கு தளங்களுக்கான ஆதரவு -gnueabi, armvXNUMX-unknown-linux-musleabi, hexagon-unknown-linux-musl மற்றும் riscvXNUMXi-unknown-none-elf. மூன்றாவது நிலை அடிப்படை ஆதரவை உள்ளடக்கியது, ஆனால் தானியங்கு சோதனை மற்றும் அதிகாரப்பூர்வ உருவாக்கங்களின் வெளியீடு இல்லாமல்.

ஆதாரம்: opennet.ru

கருத்தைச் சேர்