நிரலாக்க மொழியான ரஸ்ட் 1.75 மற்றும் யூனிகர்னல் ஹெர்மிட் 0.6.7 வெளியீடு

ரஸ்ட் 1.75 பொது-நோக்க நிரலாக்க மொழியின் வெளியீடு, Mozilla திட்டத்தால் நிறுவப்பட்டது, ஆனால் இப்போது சுயாதீனமான இலாப நோக்கற்ற அமைப்பான Rust Foundation இன் அனுசரணையில் உருவாக்கப்பட்டது, வெளியிடப்பட்டது. மொழி நினைவகப் பாதுகாப்பில் கவனம் செலுத்துகிறது மற்றும் குப்பை சேகரிப்பான் மற்றும் இயக்க நேரத்தைப் பயன்படுத்துவதைத் தவிர்க்கும் அதே வேளையில் அதிக வேலை இணைத்தன்மையை அடைவதற்கான வழிமுறைகளை வழங்குகிறது (இயக்க நேரம் நிலையான நூலகத்தின் அடிப்படை துவக்கம் மற்றும் பராமரிப்புக்கு குறைக்கப்படுகிறது).

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

குறிப்புச் சரிபார்ப்பு, பொருளின் உரிமையைக் கண்காணித்தல், பொருளின் ஆயுட்காலம் (நோக்குகள்) ஆகியவற்றைக் கண்காணிப்பது மற்றும் குறியீடு செயலாக்கத்தின் போது நினைவக அணுகலின் சரியான தன்மையை மதிப்பிடுதல் ஆகியவற்றின் மூலம் தொகுக்கும் நேரத்தில் ரஸ்டில் நினைவகப் பாதுகாப்பு வழங்கப்படுகிறது. ரஸ்ட் முழு எண் வழிதல்களுக்கு எதிராக பாதுகாப்பை வழங்குகிறது, பயன்பாட்டிற்கு முன் மாறி மதிப்புகளை கட்டாயமாக துவக்க வேண்டும், நிலையான நூலகத்தில் பிழைகளை சிறப்பாக கையாளுகிறது, இயல்புநிலையாக மாறாத குறிப்புகள் மற்றும் மாறிகளின் கருத்தைப் பயன்படுத்துகிறது, தருக்க பிழைகளைக் குறைக்க வலுவான நிலையான தட்டச்சு வழங்குகிறது.

முக்கிய கண்டுபிடிப்புகள்:

  • தனிப்பட்ட குணாதிசயங்களில் “Async fn” மற்றும் “->impl Trait” குறியீட்டைப் பயன்படுத்துவதற்கான திறன் சேர்க்கப்பட்டது. எடுத்துக்காட்டாக, “->impl Trait” ஐப் பயன்படுத்தி, நீங்கள் ஒரு மறு செய்கையை வழங்கும் பண்பு முறையை எழுதலாம்: trait Container {fn items(&self) -> impl Iterator; } Impl Container for MyContainer {fn items(&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 இயங்குதளத்திற்கு மட்டுமே முன்னிருப்பாக செயல்படுத்தப்படும்.

    ரஸ்டில் எழுதப்பட்ட ஆண்ட்ராய்டு இயங்குதளக் கூறுகளின் உருவாக்க நேரத்தைக் குறைக்க, முன்னர் குறிப்பிடப்பட்ட மேம்படுத்தல்கள் Google ஆல் சோதிக்கப்பட்டன. ஆண்ட்ராய்டை உருவாக்கும்போது “-C codegen-units=1”ஐப் பயன்படுத்துவதால், கருவித்தொகுப்பின் அளவை 5.5% குறைக்கவும், அதன் செயல்திறனை 1.8% அதிகரிக்கவும் அனுமதித்தது, அதே நேரத்தில் கருவித்தொகுப்பின் உருவாக்க நேரம் கிட்டத்தட்ட இரட்டிப்பாகும்.

    இணைப்பு நேர குப்பை சேகரிப்பை இயக்குவது (“--gc-sections”) செயல்திறன் ஆதாயத்தை 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_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
    • ஒருவேளை யூனினிட்:: பூஜ்யம்
    • 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

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