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

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

రస్ట్ యొక్క ఆటోమేటిక్ మెమరీ మేనేజ్‌మెంట్ డెవలపర్‌ను పాయింటర్ మానిప్యులేషన్ నుండి విముక్తి చేస్తుంది మరియు తక్కువ-స్థాయి మెమరీ మానిప్యులేషన్ నుండి ఉత్పన్నమయ్యే సమస్యల నుండి రక్షిస్తుంది, ఉదాహరణకు ఫ్రీ-ఫ్రీ మెమరీ యాక్సెస్‌లు, శూన్య పాయింటర్ డెరిఫరెన్స్‌లు, బఫర్ ఓవర్‌రన్‌లు మరియు వంటివి. లైబ్రరీలను పంపిణీ చేయడానికి, అసెంబ్లీని నిర్ధారించడానికి మరియు ప్రాజెక్ట్ ద్వారా డిపెండెన్సీలను నిర్వహించడానికి ప్యాకేజీ మేనేజర్ అభివృద్ధి చేయబడుతోంది. సరుకు, ప్రోగ్రామ్‌కు అవసరమైన లైబ్రరీలను ఒకే క్లిక్‌లో పొందడానికి మిమ్మల్ని అనుమతిస్తుంది. లైబ్రరీలను హోస్ట్ చేయడానికి రిపోజిటరీకి మద్దతు ఉంది 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›());
    డిఫాల్ట్::డిఫాల్ట్()
    }

    fn ప్రధాన() {
    వీలు _: i32 = gen_value(); # "i32" ముద్రించబడుతుంది
    వీలు _: స్ట్రింగ్ = gen_value(); # "alloc::string::String"ని ప్రింట్ చేస్తుంది
    }

  • ప్రామాణిక లైబ్రరీ యొక్క విస్తరించిన విధులు:
    • స్లైస్::{concat, connect, join} ఇప్పుడు &Tకి అదనంగా &[T] విలువను తీసుకోవచ్చు;
    • "*const T" మరియు "*mut T" ఇప్పుడు మార్కర్‌ని అమలు చేయండి ::అన్‌పిన్;
    • "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;

  • కార్గో ప్యాకేజీ మేనేజర్‌లో విభిన్న లక్షణాలను ప్రారంభించడానికి “--ఫీచర్స్” ఎంపికను అనేకసార్లు పేర్కొనడానికి మద్దతు జోడించబడింది;
  • కంపైలర్ మూడవదాన్ని అందిస్తుంది స్థాయి టార్గెట్ ప్లాట్‌ఫారమ్‌లకు మద్దతు -gnueabi, armv64-unknown-linux-musleabi, hexagon-unknown-linux-musl మరియు riscv686i-unknown-none-elf. మూడవ స్థాయి ప్రాథమిక మద్దతును కలిగి ఉంటుంది, కానీ ఆటోమేటెడ్ టెస్టింగ్ మరియు అధికారిక నిర్మాణాల ప్రచురణ లేకుండా.

మూలం: opennet.ru

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