రస్ట్ 1.39 ప్రోగ్రామింగ్ లాంగ్వేజ్ విడుదల

ప్రచురించబడింది సిస్టమ్ ప్రోగ్రామింగ్ భాష విడుదల రస్ట్ 1.39, మొజిల్లా ప్రాజెక్ట్ ద్వారా స్థాపించబడింది. భాష మెమరీ భద్రతపై దృష్టి పెడుతుంది, ఆటోమేటిక్ మెమరీ నిర్వహణను అందిస్తుంది మరియు చెత్త సేకరించేవాడు లేదా రన్‌టైమ్‌ను ఉపయోగించకుండా అధిక పని సమాంతరతను సాధించడానికి ఒక మార్గాన్ని అందిస్తుంది.

రస్ట్ యొక్క ఆటోమేటిక్ మెమరీ మేనేజ్‌మెంట్ డెవలపర్‌ను పాయింటర్ మానిప్యులేషన్ నుండి విముక్తి చేస్తుంది మరియు తక్కువ-స్థాయి మెమరీ మానిప్యులేషన్ నుండి ఉత్పన్నమయ్యే సమస్యల నుండి రక్షిస్తుంది, ఉదాహరణకు ఫ్రీ-ఫ్రీ మెమరీ యాక్సెస్‌లు, శూన్య పాయింటర్ డెరిఫరెన్స్‌లు, బఫర్ ఓవర్‌రన్‌లు మరియు వంటివి. లైబ్రరీలను పంపిణీ చేయడానికి, అసెంబ్లీని నిర్ధారించడానికి మరియు ప్రాజెక్ట్ ద్వారా డిపెండెన్సీలను నిర్వహించడానికి ప్యాకేజీ మేనేజర్ అభివృద్ధి చేయబడుతోంది. సరుకు, ప్రోగ్రామ్‌కు అవసరమైన లైబ్రరీలను ఒకే క్లిక్‌లో పొందడానికి మిమ్మల్ని అనుమతిస్తుంది. లైబ్రరీలను హోస్ట్ చేయడానికి రిపోజిటరీకి మద్దతు ఉంది crates.io.

ప్రధాన ఆవిష్కరణలు:

  • స్థిరీకరించబడింది "async" ఫంక్షన్, async తరలింపు { ... } బ్లాక్ మరియు ".await" ఆపరేటర్ ఆధారంగా కొత్త అసమకాలిక ప్రోగ్రామింగ్ సింటాక్స్, ఇది ప్రధాన కమాండ్ ఫ్లోను నిరోధించని హ్యాండ్లర్‌లను వ్రాయడాన్ని సులభతరం చేస్తుంది. అసమకాలిక I/O కోసం గతంలో అందించిన APIతో పోలిస్తే, async/.await నిర్మాణాలు అర్థం చేసుకోవడం సులభం, బాగా చదవగలిగేవి మరియు లూప్‌లు, షరతులతో కూడిన ప్రకటనలు మరియు మినహాయింపుల ఆధారంగా తెలిసిన ఫ్లో నియంత్రణ పద్ధతులను ఉపయోగించి సంక్లిష్ట అసమకాలిక పరస్పర చర్యలను అమలు చేయడానికి మిమ్మల్ని అనుమతిస్తాయి.

    Async-await సింటాక్స్ వాటి అమలును పాజ్ చేయగల ఫంక్షన్‌లను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది, ప్రధాన థ్రెడ్‌కు నియంత్రణను తిరిగి ఇస్తుంది, ఆపై అవి ఆపివేసిన చోట నుండి అమలును పునఃప్రారంభించవచ్చు. ఉదాహరణకు, I/Oని ప్రాసెస్ చేస్తున్నప్పుడు అటువంటి పాజ్ అవసరం, దీనిలో తదుపరి డేటా వచ్చే వరకు వేచి ఉన్నప్పుడు ఇతర పని చేయవచ్చు. "async fn" మరియు "async move"తో నిర్వచించబడిన విధులు మరియు బ్లాక్‌లు ఒక లక్షణాన్ని అందిస్తాయి భవిష్యత్తు, ఇది వాయిదా వేసిన అసమకాలిక గణన ప్రాతినిధ్యాన్ని నిర్వచిస్తుంది. మీరు నేరుగా వాయిదా వేసిన గణనను ప్రారంభించవచ్చు మరియు “.వెయిట్” ఆపరేటర్‌ని ఉపయోగించి ఫలితాన్ని పొందవచ్చు. .వెయిట్ అని పిలవబడే వరకు ఎటువంటి చర్య నిర్వహించబడదు లేదా ముందుగా ప్రణాళిక చేయబడదు, అదనపు ఓవర్‌హెడ్ లేకుండా సంక్లిష్టమైన సమూహ నిర్మాణాలను సృష్టించడానికి అనుమతిస్తుంది.

    async fn first_function() -> u32 { ..}
    ...
    భవిష్యత్తు = మొదటి_ఫంక్షన్ ();
    ...
    ఫలితాన్ని తెలియజేయండి: u32 = future.await;

  • స్థిరీకరించబడింది "#![ఫీచర్(బైండ్_బై_మూవ్_ప్యాటర్న్_గార్డ్స్)]", బైండింగ్ రకంతో వేరియబుల్స్‌ని ఉపయోగించడానికి అనుమతిస్తుంది "ద్వారా తరలింపు" టెంప్లేట్‌లలో మరియు వ్యక్తీకరణ యొక్క "if" విభాగంలో ఈ వేరియబుల్స్‌కు సూచనలను ఉపయోగించండి "మ్యాచ్". ఉదాహరణకు, కింది నిర్మాణాలు ఇప్పుడు అనుమతించబడ్డాయి:

    fn ప్రధాన() {
    లెట్ అర్రే: బాక్స్<[u8; 4]> = బాక్స్:: కొత్త ([1, 2, 3, 4]);

    మ్యాచ్ శ్రేణి {
    సంఖ్యలు
    ఒకవేళ nums.iter().sum::() == 10

    => {
    డ్రాప్ (సంఖ్యలు);
    }
    _ => అందుబాటులో లేదు!(),
    }
    }

  • సూచన అనుమతించబడింది గుణాలు ఫంక్షన్ పారామితులు, మూసివేతలు మరియు ఫంక్షన్ పాయింటర్‌లను నిర్వచించేటప్పుడు. లింట్ (అనుమతించడం, హెచ్చరించడం, తిరస్కరించడం మరియు నిషేధించడం) ద్వారా డయాగ్నస్టిక్‌లను నియంత్రించే షరతులతో కూడిన సంకలన లక్షణాలు (cfg, cfg_attr) మరియు సహాయక స్థూల కాలింగ్ లక్షణాలకు మద్దతు ఉంది.

    fn లెన్ (
    #[cfg(windows)] స్లైస్: &[u16], // Windowsలో పరామితిని ఉపయోగించండి
    #[cfg(కాదు(విండోస్))] స్లైస్: &[u8], // ఇతర OSలో ఉపయోగించండి
    ) -> ఉపయోగించండి {
    slice.len()
    }

  • NLL (నాన్-లెక్సికల్ లైఫ్‌టైమ్స్) టెక్నిక్‌ని ఉపయోగించి వేరియబుల్స్ (బారో చెకర్) యొక్క రుణాన్ని తనిఖీ చేస్తున్నప్పుడు గుర్తించబడిన సమస్యల గురించి హెచ్చరికలు, అనువదించారు ప్రాణాంతక లోపాల వర్గంలోకి. అరువు తీసుకున్న వేరియబుల్స్ యొక్క జీవితకాలాన్ని పరిగణనలోకి తీసుకునే కొత్త మెకానిజం ఆధారంగా ధృవీకరణ వ్యవస్థ పాత ధృవీకరణ కోడ్ ద్వారా గుర్తించబడని కొన్ని సమస్యలను గుర్తించడం సాధ్యం చేసిందని గుర్తుచేసుకుందాం. అటువంటి తనిఖీల కోసం ఎర్రర్ అవుట్‌పుట్ గతంలో పని చేసే కోడ్‌తో అనుకూలతను ప్రభావితం చేస్తుంది కాబట్టి, మొదట్లో ఎర్రర్‌లకు బదులుగా హెచ్చరికలు జారీ చేయబడ్డాయి. రస్ట్ 2018 మోడ్‌లో రన్ అవుతున్నప్పుడు హెచ్చరికలు ఇప్పుడు ఎర్రర్‌లతో భర్తీ చేయబడ్డాయి. తదుపరి విడుదలలో, రస్ట్ 2015 మోడ్‌లో లోపం అవుట్‌పుట్ కూడా అమలు చేయబడుతుంది, ఇది చివరకు పాత రుణం చెకర్‌ను తొలగిస్తుంది;
  • స్థిరాంకాలకి బదులుగా ఏదైనా సందర్భంలో ఉపయోగించగల అవకాశాన్ని నిర్ణయించే “const” లక్షణం Vec::new, String::new, LinkedList::new, str::len, [T]::len ఫంక్షన్ల కోసం ఉపయోగించబడుతుంది. , str::as_bytes,
    abs, wrapping_abs మరియు overflowing_abs;

  • APIల యొక్క కొత్త భాగం స్థిరీకరించబడిన పద్ధతులతో సహా స్థిరమైన వర్గానికి బదిలీ చేయబడింది
    Pin::into_inner, Instant::checked_duration_ince మరియు Instant::saturating_duration_since;

  • కార్గో ప్యాకేజీ మేనేజర్ ఇప్పుడు కాన్ఫిగరేషన్ ఫైల్‌ల కోసం “.toml” పొడిగింపును ఉపయోగించగల సామర్థ్యాన్ని కలిగి ఉంది. కార్గో నుండి నేరుగా ప్రామాణిక లైబ్రరీని నిర్మించడానికి ప్రాథమిక మద్దతు జోడించబడింది. వివాదాస్పద "--అన్ని" ఫ్లాగ్ స్థానంలో "--వర్క్‌స్పేస్" ఫ్లాగ్ జోడించబడింది. మెటాడేటాకు కొత్త ఫీల్డ్ జోడించబడింది "ప్రచురిస్తున్నాను“, ఇది మీరు git ట్యాగ్ మరియు సంస్కరణ సంఖ్యను పేర్కొనడం ద్వారా డిపెండెన్సీలను ప్రచురించడానికి అనుమతిస్తుంది. వివిధ సంకలన దశల అమలు సమయాల యొక్క HTML నివేదికను రూపొందించడానికి పరీక్ష ఎంపిక "-Ztimings" జోడించబడింది.
  • rustc కంపైలర్‌లో, రోగనిర్ధారణ సందేశాలలో టెర్మినల్‌కు సరిపోని కోడ్ టెయిల్‌లను కత్తిరించడం ఉంటుంది. లక్ష్య ప్లాట్‌ఫారమ్‌లకు మూడవ స్థాయి మద్దతును అందించింది
    i686-unknown-uefi మరియు sparc64-unknown-openbsd. మూడవ స్థాయి ప్రాథమిక మద్దతును కలిగి ఉంటుంది, కానీ ఆటోమేటెడ్ టెస్టింగ్ మరియు అధికారిక నిర్మాణాల ప్రచురణ లేకుండా.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి