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

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

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

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

  • కార్గో ప్యాకేజీ మేనేజర్ ప్రత్యామ్నాయ ప్యాకేజీ రిజిస్ట్రీలతో పనిచేయడానికి సాధనాలను జోడించారు, అది crates.io పబ్లిక్ రిజిస్ట్రీతో కలిసి ఉంటుంది. ఉదాహరణకు, యాజమాన్య అప్లికేషన్‌ల డెవలపర్‌లు ఇప్పుడు వారి స్వంత ప్రైవేట్ రిజిస్ట్రీని ఉపయోగించవచ్చు, ఇది Cargo.tomlలో డిపెండెన్సీలను జాబితా చేసేటప్పుడు ఉపయోగించవచ్చు మరియు వారి ఉత్పత్తులకు crates.io మాదిరిగానే సంస్కరణ మోడల్‌ను వర్తింపజేయవచ్చు, అలాగే రెండు క్రేట్‌లకు డిపెండెన్సీలను సూచించవచ్చు. io మరియు మీ స్వంత రిజిస్ట్రీకి.

    ~/.cargo/configకి బాహ్య రిజిస్ట్రీని జోడించడానికి
    “[రిజిస్ట్రీలు]” విభాగంలో “నా-రిజిస్ట్రీ” అనే కొత్త ఎంపిక అందించబడింది మరియు “[డిపెండెన్సీలు]” విభాగంలో Cargo.tomlలోని డిపెండెన్సీలలో బాహ్య రిజిస్ట్రీని పేర్కొనడానికి “ఇతర-క్రేట్” ఎంపిక జోడించబడింది. అదనపు రిజిస్ట్రీకి కనెక్ట్ చేయడానికి, ~/.cargo/credentials ఫైల్‌లో ధృవీకరణ టోకెన్‌ను ఉంచండి మరియు ఆదేశాన్ని అమలు చేయండి
    "కార్గో లాగిన్ --రిజిస్ట్రీ=మై-రిజిస్ట్రీ" మరియు ప్యాకేజీని ప్రచురించడానికి -
    "కార్గో పబ్లిష్ -రిజిస్ట్రీ=నా-రిజిస్ట్రీ";

  • “?” ఆపరేటర్‌ని ఉపయోగించడానికి పూర్తి మద్దతు జోడించబడింది. డాక్టెస్ట్‌లలో, ఇది డాక్యుమెంటేషన్ నుండి ఉదాహరణ కోడ్‌ను పరీక్షలుగా ఉపయోగించడానికి మిమ్మల్ని అనుమతిస్తుంది. గతంలో ఆపరేటర్
    "?" "fn మెయిన్()" ఫంక్షన్ సమక్షంలో లేదా "#[test]" ఫంక్షన్‌లలో మాత్రమే పరీక్ష అమలు సమయంలో లోపాలను నిర్వహించడానికి ఉపయోగించవచ్చు;

  • విధానపరమైన మాక్రోలను ఉపయోగించి నిర్వచించబడిన అనుకూల లక్షణాలలో, ఏకపక్ష టోకెన్‌ల సెట్‌లను ఉపయోగించడం సాధ్యమవుతుంది (“#[attr($tokens)]”, “#[attr[$tokens]] మరియు #[attr{$tokens}]”) . ఇంతకుముందు, మూలకాలను స్ట్రింగ్ లిటరల్స్ ఉపయోగించి చెట్టు/పునరావృత రూపంలో మాత్రమే పేర్కొనవచ్చు, ఉదాహరణకు “#[foo(bar, baz(quux, foo = “bar”)))]”, కానీ ఇప్పుడు గణనలను ఉపయోగించడం సాధ్యమవుతుంది (' #[పరిధి(0. .10)]') మరియు “#[బౌండ్(T: MyTrait)]” వంటి నిర్మాణాలు;
  • TryFrom మరియు TryInto లక్షణాలు స్థిరీకరించబడ్డాయి, ఎర్రర్ హ్యాండ్లింగ్‌తో టైప్ కన్వర్షన్‌లను అనుమతిస్తుంది. ఉదాహరణకు, పూర్ణాంక రకాలతో from_be_bytes వంటి పద్ధతులు శ్రేణులను ఇన్‌పుట్‌గా ఉపయోగిస్తాయి, అయితే డేటా తరచుగా స్లైస్ రకంలో వస్తుంది మరియు శ్రేణులు మరియు స్లైస్‌ల మధ్య మార్చడం మాన్యువల్‌గా చేయడం సమస్యాత్మకం. కొత్త లక్షణాల సహాయంతో, పేర్కొన్న ఆపరేషన్‌ను .try_into()కి కాల్ చేయడం ద్వారా ఫ్లైలో నిర్వహించవచ్చు, ఉదాహరణకు, “లెట్ num = u32::from_be_bytes(slice.try_into()?)”. ఎల్లప్పుడూ విజయవంతమయ్యే మార్పిడుల కోసం (ఉదాహరణకు, రకం u8 నుండి u32 వరకు), పారదర్శకంగా ఉపయోగించడాన్ని అనుమతించడానికి ఒక ఇన్‌ఫాల్బుల్ ఎర్రర్ రకం జోడించబడింది.
    "From" యొక్క అన్ని అమలుల కోసం ప్రయత్నించండి;

  • CommandExt::before_exec ఫంక్షన్‌ని నిలిపివేయబడింది, ఇది fork() కాల్ తర్వాత ఫోర్క్ చేయబడిన చైల్డ్ ప్రాసెస్ సందర్భంలో అమలు చేయబడిన execకి ముందు హ్యాండ్లర్‌ను అమలు చేయడానికి అనుమతించింది. అటువంటి పరిస్థితులలో, ఫైల్ డిస్క్రిప్టర్లు మరియు మ్యాప్ చేయబడిన మెమరీ ప్రాంతాలు వంటి పేరెంట్ ప్రాసెస్ యొక్క కొన్ని వనరులు నకిలీ చేయబడవచ్చు, ఇది నిర్వచించబడని ప్రవర్తన మరియు లైబ్రరీల తప్పు ఆపరేషన్‌కు దారితీయవచ్చు.
    before_execకి బదులుగా, అసురక్షిత ఫంక్షన్ CommandExt::pre_execని ఉపయోగించమని సిఫార్సు చేయబడింది.

  • 8 నుండి 64 బిట్‌ల పరిమాణంలో స్థిరీకరించబడిన మరియు సంతకం చేయని పరమాణు పూర్ణాంకాల రకాలు (ఉదాహరణకు, AtomicU8), అలాగే సంతకం చేయబడిన రకాలు NonZeroI[8|16|32|54|128].
  • ఏదైనా::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|subతో సహా APIలోని కొత్త భాగం స్థిరమైన వర్గానికి తరలించబడింది. ] మరియు SystemTime పద్ధతులు స్థిరీకరించబడ్డాయి ::checked_[add|sub]. iter::from_fn మరియు iter:: అనుచరుల ఫంక్షన్‌లు స్థిరీకరించబడ్డాయి;
  • అన్ని పూర్ణాంకాల రకాల కోసం, చెక్డ్_పౌ, సాచురేటింగ్_పౌ, ర్యాపింగ్_పౌ మరియు ఓవర్‌ఫ్లోవింగ్_పౌ పద్ధతులు అమలు చేయబడతాయి;
  • “-C లింకర్-ప్లగిన్-lto” బిల్డ్ ఎంపికను పేర్కొనడం ద్వారా లింకింగ్ దశలో ఆప్టిమైజేషన్‌లను ఎనేబుల్ చేసే సామర్థ్యాన్ని జోడించారు (rustc రస్ట్ కోడ్‌ను LLVM బిట్‌కోడ్‌లోకి కంపైల్ చేస్తుంది, ఇది LTO ఆప్టిమైజేషన్‌లను వర్తింపజేయడానికి అనుమతిస్తుంది).

మూలం: opennet.ru

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