మొజిల్లా ప్రాజెక్ట్ ద్వారా స్థాపించబడిన సాధారణ-ప్రయోజన ప్రోగ్రామింగ్ లాంగ్వేజ్ రస్ట్ 1.58 విడుదల, కానీ ఇప్పుడు స్వతంత్ర లాభాపేక్ష లేని సంస్థ రస్ట్ ఫౌండేషన్ ఆధ్వర్యంలో అభివృద్ధి చేయబడింది, ప్రచురించబడింది. భాష మెమరీ భద్రతపై దృష్టి పెడుతుంది, ఆటోమేటిక్ మెమరీ నిర్వహణను అందిస్తుంది మరియు చెత్త సేకరించేవాడు లేదా రన్టైమ్ను ఉపయోగించకుండా అధిక పని సమాంతరతను సాధించడానికి మార్గాలను అందిస్తుంది (రన్టైమ్ ప్రాథమిక లైబ్రరీ యొక్క ప్రాథమిక ప్రారంభ మరియు నిర్వహణకు తగ్గించబడుతుంది).
రస్ట్ యొక్క ఆటోమేటిక్ మెమరీ మేనేజ్మెంట్ పాయింటర్లను మానిప్యులేట్ చేసేటప్పుడు లోపాలను తొలగిస్తుంది మరియు తక్కువ-స్థాయి మెమరీ మానిప్యులేషన్ నుండి ఉత్పన్నమయ్యే సమస్యల నుండి రక్షిస్తుంది, ఉదాహరణకు మెమరీ ప్రాంతాన్ని విడుదల చేసిన తర్వాత యాక్సెస్ చేయడం, శూన్య పాయింటర్ డెరిఫరెన్స్లు, బఫర్ ఓవర్రన్లు మొదలైనవి. లైబ్రరీలను పంపిణీ చేయడానికి, అసెంబ్లీని నిర్ధారించడానికి మరియు డిపెండెన్సీలను నిర్వహించడానికి, ప్రాజెక్ట్ కార్గో ప్యాకేజీ మేనేజర్ను అభివృద్ధి చేస్తోంది. లైబ్రరీలను హోస్ట్ చేయడానికి crates.io రిపోజిటరీకి మద్దతు ఉంది.
ప్రధాన ఆవిష్కరణలు:
- లైన్ ఫార్మాటింగ్ బ్లాక్లలో, సంఖ్య మరియు పేరు ద్వారా పంక్తి తర్వాత స్పష్టంగా జాబితా చేయబడిన వేరియబుల్లను ప్రత్యామ్నాయం చేసే సామర్థ్యంతో పాటు, లైన్కు “{identifier}” వ్యక్తీకరణను జోడించడం ద్వారా ఏకపక్ష ఐడెంటిఫైయర్లను ప్రత్యామ్నాయం చేసే సామర్థ్యం అమలు చేయబడుతుంది. ఉదాహరణకు: // మునుపు మద్దతు ఉన్న నిర్మాణాలు: println!("హలో, {}!", get_person()); println!("హలో, {0}!", get_person()); println!("హలో, {వ్యక్తి}!", వ్యక్తి = get_person()); // ఇప్పుడు మీరు లెట్ వ్యక్తిని పేర్కొనవచ్చు = get_person(); println!("హలో, {వ్యక్తి}!");
ఐడెంటిఫైయర్లను నేరుగా ఫార్మాటింగ్ ఎంపికలలో కూడా పేర్కొనవచ్చు. వీలు (వెడల్పు, ఖచ్చితత్వం) = get_format(); (పేరు, స్కోర్) కోసం get_scores() {println!("{name}: {score:width$.precision$}"); }
కొత్త ప్రత్యామ్నాయం స్ట్రింగ్ ఫార్మాట్ డెఫినిషన్కు మద్దతిచ్చే అన్ని మాక్రోలలో పనిచేస్తుంది, “పానిక్!” మాక్రో మినహా. రస్ట్ భాష యొక్క 2015 మరియు 2018 వెర్షన్లలో, ఇందులో భయాందోళన!("{ident}") సాధారణ స్ట్రింగ్గా పరిగణించబడుతుంది (రస్ట్ 2021లో ప్రత్యామ్నాయం పనిచేస్తుంది).
- std::process:: Windows ప్లాట్ఫారమ్పై కమాండ్ నిర్మాణం యొక్క ప్రవర్తన మార్చబడింది, తద్వారా ఆదేశాలను అమలు చేస్తున్నప్పుడు, భద్రతా కారణాల దృష్ట్యా, ఇది ప్రస్తుత డైరెక్టరీలో ఎక్జిక్యూటబుల్ ఫైల్ల కోసం వెతకదు. ప్రోగ్రామ్లు అవిశ్వసనీయ డైరెక్టరీలలో (CVE-2021-3013) అమలు చేయబడితే, హానికరమైన కోడ్ని అమలు చేయడానికి ఇది ఉపయోగించబడుతుంది కాబట్టి ప్రస్తుత డైరెక్టరీ మినహాయించబడింది. కొత్త ఎక్జిక్యూటబుల్ డిటెక్షన్ లాజిక్లో రస్ట్ డైరెక్టరీలు, అప్లికేషన్ డైరెక్టరీ, విండోస్ సిస్టమ్ డైరెక్టరీ మరియు PATH ఎన్విరాన్మెంట్ వేరియబుల్లో పేర్కొన్న డైరెక్టరీలను శోధించడం ఉంటుంది.
- ప్రామాణిక లైబ్రరీ "#[తప్పక_ఉపయోగించండి]" అని గుర్తు పెట్టబడిన ఫంక్షన్ల సంఖ్యను విస్తరించింది, రిటర్న్ విలువ విస్మరించబడితే హెచ్చరికను జారీ చేస్తుంది, ఇది ఒక ఫంక్షన్ కొత్త విలువను తిరిగి ఇవ్వడానికి బదులుగా విలువలను మారుస్తుందని భావించడం వల్ల కలిగే లోపాలను గుర్తించడంలో సహాయపడుతుంది.
- API యొక్క కొత్త భాగం స్థిరమైన వర్గానికి తరలించబడింది, ఇందులో పద్ధతులు మరియు లక్షణాల అమలులు స్థిరీకరించబడ్డాయి:
- మెటాడేటా::is_symlink
- మార్గం:: is_symlink
- {integer}::saturating_div
- ఎంపిక:: unwrap_unchecked
- ఫలితం:: unwrap_unchecked
- ఫలితం::unwrap_err_unchecked
- స్థిరాంకాలకి బదులుగా ఏదైనా సందర్భంలో ఉపయోగించగల అవకాశాన్ని నిర్ణయించే “const” లక్షణం ఫంక్షన్లలో ఉపయోగించబడుతుంది:
- వ్యవధి::కొత్తది
- వ్యవధి:: checked_add
- వ్యవధి::saturating_add
- వ్యవధి::checked_sub
- వ్యవధి::సంతృప్త_ఉప
- వ్యవధి:: తనిఖీ_ముల్
- వ్యవధి::సంతృప్త_ముల్
- వ్యవధి::checked_div
- "const" సందర్భాలలో "*const T" పాయింటర్ల తొలగింపు అనుమతించబడింది.
- కార్గో ప్యాకేజీ మేనేజర్లో, ప్యాకేజీ మెటాడేటాకు rust_version ఫీల్డ్ జోడించబడింది మరియు “--message-format” ఎంపిక “cargo install” కమాండ్కు జోడించబడింది.
- కంపైలర్ CFI (కంట్రోల్ ఫ్లో ఇంటిగ్రిటీ) రక్షణ యంత్రాంగానికి మద్దతును అమలు చేస్తుంది, ఇది ప్రతి పరోక్ష కాల్కు ముందు కొన్ని రకాల నిర్వచించబడని ప్రవర్తనను గుర్తించడానికి తనిఖీలను జోడిస్తుంది, దీని ఫలితంగా సాధారణ అమలు క్రమం (నియంత్రణ ప్రవాహం) ఉల్లంఘనకు దారితీయవచ్చు. ఫంక్షన్లలో మెమరీలో నిల్వ చేయబడిన పాయింటర్లను మార్చే దోపిడీల ఉపయోగం.
- టెస్టింగ్ సమయంలో కోడ్ కవరేజీని అంచనా వేయడానికి ఉపయోగించే LLVM కవరేజ్ కంపారిజన్ ఫార్మాట్ యొక్క 5 మరియు 6 వెర్షన్లకు కంపైలర్ మద్దతును జోడించింది.
- కంపైలర్లో, LLVM యొక్క కనీస వెర్షన్ కోసం అవసరాలు LLVM 12కి పెంచబడ్డాయి.
- x86_64-unknown-none ప్లాట్ఫారమ్ కోసం మూడవ స్థాయి మద్దతు అమలు చేయబడింది. మూడవ స్థాయి ప్రాథమిక మద్దతును కలిగి ఉంటుంది, కానీ ఆటోమేటెడ్ టెస్టింగ్ లేకుండా, అధికారిక బిల్డ్లను ప్రచురించడం లేదా కోడ్ని నిర్మించవచ్చో లేదో తనిఖీ చేయడం.
అదనంగా, Windows 0.30 లైబ్రరీల కోసం రస్ట్ విడుదలను Microsoft ద్వారా ప్రచురించడాన్ని మేము గమనించవచ్చు, ఇది Windows OS కోసం అప్లికేషన్లను అభివృద్ధి చేయడానికి రస్ట్ భాషను ఉపయోగించడానికి మిమ్మల్ని అనుమతిస్తుంది. సెట్లో రెండు క్రేట్ ప్యాకేజీలు (విండోస్ మరియు విండోస్-సిస్) ఉన్నాయి, దీని ద్వారా మీరు రస్ట్ ప్రోగ్రామ్లలో విన్ APIని యాక్సెస్ చేయవచ్చు. API మద్దతు కోసం కోడ్ APIని వివరించే మెటాడేటా నుండి డైనమిక్గా రూపొందించబడింది, ఇది ఇప్పటికే ఉన్న Win API కాల్లకు మాత్రమే కాకుండా భవిష్యత్తులో కనిపించే కాల్లకు మద్దతును అమలు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. కొత్త వెర్షన్ UWP (యూనివర్సల్ విండోస్ ప్లాట్ఫారమ్) టార్గెట్ ప్లాట్ఫారమ్కు మద్దతును జోడిస్తుంది మరియు హ్యాండిల్ మరియు డీబగ్ రకాలను అమలు చేస్తుంది.
మూలం: opennet.ru