మొజిల్లా ప్రాజెక్ట్ ద్వారా స్థాపించబడిన రస్ట్ 1.75 సాధారణ-ప్రయోజన ప్రోగ్రామింగ్ లాంగ్వేజ్ విడుదల, కానీ ఇప్పుడు స్వతంత్ర లాభాపేక్ష లేని సంస్థ రస్ట్ ఫౌండేషన్ ఆధ్వర్యంలో అభివృద్ధి చేయబడింది, ప్రచురించబడింది. భాష మెమరీ భద్రతపై దృష్టి పెడుతుంది మరియు చెత్త సేకరించేవాడు మరియు రన్టైమ్ (ప్రామాణిక లైబ్రరీ యొక్క ప్రాథమిక ప్రారంభ మరియు నిర్వహణకు రన్టైమ్ తగ్గించబడింది) వినియోగాన్ని నివారించేటప్పుడు అధిక ఉద్యోగ సమాంతరతను సాధించడానికి మార్గాలను అందిస్తుంది.
రస్ట్ యొక్క మెమరీ హ్యాండ్లింగ్ పద్ధతులు పాయింటర్లను మానిప్యులేట్ చేసేటప్పుడు డెవలపర్ను లోపాల నుండి కాపాడతాయి మరియు తక్కువ-స్థాయి మెమరీ హ్యాండ్లింగ్ కారణంగా తలెత్తే సమస్యల నుండి రక్షిస్తాయి, అనగా మెమరీ ప్రాంతాన్ని విడుదల చేసిన తర్వాత యాక్సెస్ చేయడం, శూన్య పాయింటర్లను డిఫెరెన్సింగ్ చేయడం, బఫర్ ఓవర్రన్లు మొదలైనవి. లైబ్రరీలను పంపిణీ చేయడానికి, బిల్డ్లను అందించడానికి మరియు డిపెండెన్సీలను నిర్వహించడానికి, ప్రాజెక్ట్ కార్గో ప్యాకేజీ మేనేజర్ను అభివృద్ధి చేస్తుంది. లైబ్రరీలను హోస్ట్ చేయడానికి 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 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 ద్వారా గతంలో పేర్కొన్న ఆప్టిమైజేషన్లు పరీక్షించబడ్డాయి. ఆండ్రాయిడ్ను నిర్మించేటప్పుడు "-C codegen-units=1"ని ఉపయోగించడం వలన టూల్కిట్ యొక్క పరిమాణాన్ని 5.5% తగ్గించి, దాని పనితీరును 1.8% పెంచవచ్చు, అయితే టూల్కిట్ యొక్క నిర్మాణ సమయం దాదాపు రెట్టింపు అవుతుంది.
లింక్-టైమ్ చెత్త సేకరణను ప్రారంభించడం (“--gc-విభాగాలు”) పనితీరు లాభాలను 1.9%కి పెంచింది, లింక్-టైమ్ ఆప్టిమైజేషన్ (LTO)ని 7.7% వరకు మరియు ప్రొఫైల్-ఆధారిత ఆప్టిమైజేషన్లను (PGO) 19.8% వరకు పెంచింది. ఫైనల్లో, BOLT యుటిలిటీని ఉపయోగించి ఆప్టిమైజేషన్లు వర్తింపజేయబడ్డాయి, దీని వలన నిర్మాణ వేగాన్ని 24.7%కి పెంచడం సాధ్యమైంది, అయితే టూల్కిట్ పరిమాణం 10.9% పెరిగింది.
- 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 లైసెన్స్ల క్రింద పంపిణీ చేయబడింది. రస్ట్, గో, ఫోర్ట్రాన్, సి మరియు సి++లో వ్రాసిన అప్లికేషన్ల స్టాండ్-ఏలోన్ ఎగ్జిక్యూషన్ కోసం అసెంబ్లీకి మద్దతు ఉంది. ప్రాజెక్ట్ దాని స్వంత బూట్లోడర్ను కూడా అభివృద్ధి చేస్తోంది, ఇది QEMU మరియు KVMని ఉపయోగించి హెర్మిట్ని లాంచ్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.
మూలం: opennet.ru