మోజిల్లాచే స్థాపించబడి, ప్రస్తుతం స్వతంత్ర లాభాపేక్షలేని రస్ట్ ఫౌండేషన్ ద్వారా నిర్వహించబడుతున్న సిస్టమ్ ప్రోగ్రామింగ్ భాష అయిన రస్ట్ 1.56 విడుదల చేయబడింది. దాని అధికారిక వెర్షన్ సంఖ్యతో పాటు, ఈ విడుదలను రస్ట్ 2021గా కూడా పేర్కొన్నారు మరియు ఇది గత మూడు సంవత్సరాలుగా ప్రతిపాదించబడిన మార్పుల స్థిరీకరణను సూచిస్తుంది. గత మూడు సంవత్సరాలుగా భాషా అభివృద్ధికి రస్ట్ 2018 ఎలా ఆధారాన్ని ఏర్పరచిందో, అదే విధంగా రాబోయే మూడు సంవత్సరాలలో ఫీచర్లను జోడించడానికి రస్ట్ 2021 కూడా పునాదిగా పనిచేస్తుంది.
అనుకూలతను కొనసాగించడానికి, డెవలపర్లు తమ ప్రోగ్రామ్లలో "2015," "2018," మరియు "2021" లేబుల్లను ఉపయోగించవచ్చు. ఇవి, ఎంచుకున్న రస్ట్ ఎడిషన్లకు సంబంధించిన లాంగ్వేజ్ స్టేట్ స్లైస్లతో వాటిని అనుసంధానిస్తాయి. అనుకూలత లేని మార్పులను వేరు చేయడానికి ఎడిషన్లు ప్రవేశపెట్టబడ్డాయి మరియు కార్గో ప్యాకేజీ మెటాడేటాలో "[package]" విభాగంలోని "edition" ఫీల్డ్ ద్వారా ఇవి కాన్ఫిగర్ చేయబడతాయి. ఉదాహరణకు, "2018" ఎడిషన్లో 2018 చివరి నాటికి స్థిరపడిన ఫంక్షనాలిటీ ఉంటుంది మరియు భవిష్యత్తులో రాబోయే, అంతరాయం కలిగించని అన్ని మార్పులను కూడా ఇది కవర్ చేస్తుంది. "2021" ఎడిషన్లో అదనంగా, ప్రస్తుత 1.56 విడుదలలో ప్రతిపాదించబడిన మరియు భవిష్యత్తు అమలు కోసం ఆమోదించబడిన, అంతరాయం కలిగించే ఫీచర్లు కూడా ఉంటాయి. భాషతో పాటు, ఎడిషన్లు టూల్చెయిన్ మరియు డాక్యుమెంటేషన్ స్థితిని కూడా పరిగణనలోకి తీసుకుంటాయి.
రస్ట్ 2021లో పరిష్కరించబడిన ప్రధాన అసమర్థతలు:
- క్లోజర్లలో ప్రత్యేక క్యాప్చర్ – క్లోజర్లు ఇప్పుడు మొత్తం ఐడెంటిఫైయర్కు బదులుగా వ్యక్తిగత ఫీల్డ్ పేర్లను క్యాప్చర్ చేయగలవు. ఉదాహరణకు, "|| ax + 1" అనేది "a"కు బదులుగా "ax"ను మాత్రమే క్యాప్చర్ చేస్తుంది.
- శ్రేణుల కోసం IntoIterator trait: array.into_iter() మిమ్మల్ని శ్రేణి మూలకాలను రిఫరెన్స్ల ద్వారా కాకుండా విలువల ద్వారా పునరావృతం చేయడానికి అనుమతిస్తుంది.
- macro_rulesలో, ప్యాటర్న్లలోని "|" ఎక్స్ప్రెషన్ల (లాజికల్ OR ఆపరేషన్) నిర్వహణ మార్చబడింది - ఇప్పుడు matchesలోని ":pat" స్పెసిఫైయర్ "A | B" ప్యాటర్న్లను పరిగణనలోకి తీసుకుంటుంది.
- రస్ట్ 1.51లో జోడించబడిన ఫీచర్ రిసాల్వర్ యొక్క రెండవ వెర్షన్ ఇప్పుడు కార్గో ప్యాకేజీ మేనేజర్లో డిఫాల్ట్గా చేర్చబడింది.
- ట్రైఫ్రమ్, ట్రైఇంటో మరియు ఫ్రమ్ఇటరేటర్ ట్రెయిట్లు ప్రిల్యూడ్ స్టాండర్డ్ లైబ్రరీ మాడ్యూల్కు జోడించబడ్డాయి.
- `panic!(..)` మరియు `assert!(expr, ..)` మాక్రోలు ఇప్పుడు `println!()` లాగానే, స్ట్రింగ్లను ఫార్మాట్ చేయడానికి ఎల్లప్పుడూ `format_args!(..)`ను ఉపయోగిస్తాయి.
- ident#, ident»…» మరియు ident'…' అనే పదబంధాలు భాషా వాక్యనిర్మాణంలో రిజర్వ్ చేయబడ్డాయి.
- bare_trait_objects మరియు ellipsis_inclusive_range_patterns హెచ్చరికలు లోపాలుగా మార్చబడ్డాయి.
రస్ట్ 1.56లో కొత్తగా వచ్చినవి:
- Cargo.toml లోని "[package]" విభాగానికి rust-version అనే ఫీల్డ్ జోడించబడింది. ఈ ఫీల్డ్, ఒక క్రేట్ ప్యాకేజీకి మద్దతు ఇచ్చే కనీస రస్ట్ వెర్షన్ను పేర్కొనడానికి మిమ్మల్ని అనుమతిస్తుంది. ప్రస్తుత వెర్షన్ పేర్కొన్న పారామీటర్తో సరిపోలకపోతే, Cargo పనిచేయడం ఆపివేసి, ఒక ఎర్రర్ను తిరిగి ఇస్తుంది.
- "binding @ pattern" ఎక్స్ప్రెషన్లను ఉపయోగించి ప్యాటర్న్ మ్యాచింగ్ చేసేటప్పుడు, అదనపు బైండింగ్లను పేర్కొనడానికి ఇప్పుడు మద్దతు అమలు చేయబడింది (ఉదా. "let matrix @ Matrix { row_len, .. } = get_matrix();").
- API యొక్క కొత్త భాగం స్థిరమైన వర్గానికి తరలించబడింది, ఇందులో పద్ధతులు మరియు లక్షణాల అమలులు స్థిరీకరించబడ్డాయి:
- std::os::unix::fs::chroot
- UnsafeCell::raw_get
- BufWriter::into_parts
- core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
- Vec::shrink_to
- స్ట్రింగ్::shrink_to
- OsString::shrink_to
- PathBuf::shrink_to
- బైనరీహీప్::ష్రింక్_టు
- VecDeque::shrink_to
- HashMap::shrink_to
- HashSet::shrink_to
- స్థిరాంకాలకు బదులుగా ఏ సందర్భంలోనైనా దీనిని ఉపయోగించే అవకాశాన్ని నిర్ధారించే "const" ఫ్లాగ్ను ఫంక్షన్లలో ఉపయోగిస్తారు.
- std::mem::transmute
- [టి]::మొదటి
- [టి]::స్ప్లిట్_ఫస్ట్
- [టి]::చివరి
- [T]::split_last
- కంపైలర్ LLVM వెర్షన్ 13ని ఉపయోగించేలా మార్చబడింది.
- aarch64-apple-ios-sim ప్లాట్ఫారమ్ కోసం లెవెల్ 2 మద్దతు మరియు powerpc-unknown-freebsd మరియు riscv32imc-esp-espidf ప్లాట్ఫారమ్ల కోసం లెవెల్ 3 మద్దతు అమలు చేయబడింది. లెవెల్ 3 ప్రాథమిక మద్దతును అందిస్తుంది, కానీ ఆటోమేటెడ్ టెస్టింగ్, అధికారిక బిల్డ్ విడుదలలు లేదా బిల్డ్ వెరిఫికేషన్ లేకుండా.
గుర్తుంచుకోవలసిన విషయం ఏమిటంటే, రస్ట్ భాష మెమరీ భద్రతపై దృష్టి పెడుతుంది, ఆటోమేటిక్ మెమరీ నిర్వహణను అందిస్తుంది, మరియు టాస్క్ ఎగ్జిక్యూషన్లో అధిక సమాంతరతను సాధించడానికి మార్గాలను అందిస్తుంది, ఇవన్నీ గార్బేజ్ కలెక్టర్ లేదా రన్టైమ్ అవసరం లేకుండానే జరుగుతాయి (రన్టైమ్ అనేది స్టాండర్డ్ లైబ్రరీ యొక్క ప్రాథమిక ఇనిషియలైజేషన్ మరియు నిర్వహణకు మాత్రమే పరిమితం).
రస్ట్ యొక్క ఆటోమేటిక్ మెమరీ మేనేజ్మెంట్ పాయింటర్లను మానిప్యులేట్ చేసేటప్పుడు లోపాలను తొలగిస్తుంది మరియు తక్కువ-స్థాయి మెమరీ మానిప్యులేషన్ నుండి ఉత్పన్నమయ్యే సమస్యల నుండి రక్షిస్తుంది, ఉదాహరణకు మెమరీ ప్రాంతాన్ని విడుదల చేసిన తర్వాత యాక్సెస్ చేయడం, శూన్య పాయింటర్ డెరిఫరెన్స్లు, బఫర్ ఓవర్రన్లు మొదలైనవి. లైబ్రరీలను పంపిణీ చేయడానికి, అసెంబ్లీని నిర్ధారించడానికి మరియు డిపెండెన్సీలను నిర్వహించడానికి, ప్రాజెక్ట్ కార్గో ప్యాకేజీ మేనేజర్ను అభివృద్ధి చేస్తోంది. లైబ్రరీలను హోస్ట్ చేయడానికి crates.io రిపోజిటరీకి మద్దతు ఉంది.
మూలం: opennet.ru
