మొజిల్లా ప్రాజెక్ట్ ద్వారా స్థాపించబడిన రస్ట్ 1.59 సాధారణ-ప్రయోజన ప్రోగ్రామింగ్ లాంగ్వేజ్ విడుదల, కానీ ఇప్పుడు స్వతంత్ర లాభాపేక్ష లేని సంస్థ రస్ట్ ఫౌండేషన్ ఆధ్వర్యంలో అభివృద్ధి చేయబడింది, ప్రచురించబడింది. భాష మెమరీ భద్రతపై దృష్టి పెడుతుంది మరియు చెత్త సేకరించేవాడు మరియు రన్టైమ్ (ప్రామాణిక లైబ్రరీ యొక్క ప్రాథమిక ప్రారంభ మరియు నిర్వహణకు రన్టైమ్ తగ్గించబడింది) వినియోగాన్ని నివారించేటప్పుడు అధిక ఉద్యోగ సమాంతరతను సాధించడానికి మార్గాలను అందిస్తుంది.
రస్ట్ యొక్క మెమరీ హ్యాండ్లింగ్ పద్ధతులు పాయింటర్లను మానిప్యులేట్ చేసేటప్పుడు డెవలపర్ను లోపాల నుండి కాపాడతాయి మరియు తక్కువ-స్థాయి మెమరీ హ్యాండ్లింగ్ కారణంగా తలెత్తే సమస్యల నుండి రక్షిస్తాయి, అనగా మెమరీ ప్రాంతాన్ని విడుదల చేసిన తర్వాత యాక్సెస్ చేయడం, శూన్య పాయింటర్లను డిఫెరెన్సింగ్ చేయడం, బఫర్ ఓవర్రన్లు మొదలైనవి. లైబ్రరీలను పంపిణీ చేయడానికి, బిల్డ్లను అందించడానికి మరియు డిపెండెన్సీలను నిర్వహించడానికి, ప్రాజెక్ట్ కార్గో ప్యాకేజీ మేనేజర్ను అభివృద్ధి చేస్తుంది. లైబ్రరీలను హోస్ట్ చేయడానికి crates.io రిపోజిటరీకి మద్దతు ఉంది.
రిఫరెన్స్ చెకింగ్, ఆబ్జెక్ట్ యాజమాన్యాన్ని ట్రాక్ చేయడం, ఆబ్జెక్ట్ జీవితకాలాన్ని (స్కోప్లు) ట్రాక్ చేయడం మరియు కోడ్ అమలు సమయంలో మెమరీ యాక్సెస్ యొక్క ఖచ్చితత్వాన్ని అంచనా వేయడం ద్వారా కంపైల్ సమయంలో రస్ట్లో మెమరీ భద్రత అందించబడుతుంది. రస్ట్ పూర్ణాంకాల ఓవర్ఫ్లోల నుండి రక్షణను కూడా అందిస్తుంది, ఉపయోగించే ముందు వేరియబుల్ విలువలను తప్పనిసరిగా ప్రారంభించడం అవసరం, ప్రామాణిక లైబ్రరీలో లోపాలను మెరుగ్గా నిర్వహిస్తుంది, డిఫాల్ట్గా మార్పులేని సూచనలు మరియు వేరియబుల్స్ భావనను వర్తింపజేస్తుంది, లాజికల్ లోపాలను తగ్గించడానికి బలమైన స్టాటిక్ టైపింగ్ను అందిస్తుంది.
ప్రధాన ఆవిష్కరణలు:
- తక్కువ స్థాయిలో అమలును నియంత్రించాల్సిన లేదా ప్రత్యేక యంత్ర సూచనలను ఉపయోగించగల అనువర్తనాల్లో డిమాండ్ ఉన్న అసెంబ్లీ భాషా ఇన్సర్ట్లను ఉపయోగించడం సాధ్యమవుతుంది. అసెంబ్లీ ఇన్సర్ట్లు మాక్రోలను ఉపయోగించి జోడించబడతాయి "asm!" మరియు "global_asm!" రస్ట్లో స్ట్రింగ్ ప్రత్యామ్నాయాల కోసం ఉపయోగించే రిజిస్టర్లకు పేరు పెట్టడానికి స్ట్రింగ్ ఫార్మాటింగ్ సింటాక్స్ని ఉపయోగించడం. కంపైలర్ x86, x86-64, ARM, AArch64 మరియు RISC-V ఆర్కిటెక్చర్ల కోసం అసెంబ్లీ సూచనలకు మద్దతు ఇస్తుంది. చొప్పించడం ఉదాహరణ: std:: arch:: asm; // షిఫ్ట్లను ఉపయోగించి xని 6తో గుణించండి మరియు లెట్ మట్ x: u64 = 4; సురక్షితం కాదు { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg ) x, tmp = అవుట్(reg) _, ); } assert_eq!(x, 4 * 6);
- డిస్స్ట్రక్చర్డ్ (సమాంతర) అసైన్మెంట్లకు మద్దతు జోడించబడింది, దీనిలో వ్యక్తీకరణ యొక్క ఎడమ వైపున అనేక లక్షణాలు, ముక్కలు లేదా నిర్మాణాలు పేర్కొనబడ్డాయి. ఉదాహరణకు: లెట్ (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; స్ట్రక్ట్ {ఇ, ..} = స్ట్రక్ట్ {ఇ: 5, ఎఫ్: 3}; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
- కాన్స్ట్ జెనరిక్స్ కోసం డిఫాల్ట్ విలువలను పేర్కొనే సామర్థ్యం అందించబడింది: struct ArrayStorage {arr: [T; N], } impl అర్రేస్టోరేజ్ {fn కొత్త(a: T, b: T) -> ArrayStorage { ArrayStorage {arr: [a, b], } } }
- కార్గో ప్యాకేజీ మేనేజర్ కంపైలర్లోని లోపాల కారణంగా ప్రాసెస్ చేయబడిన డిపెండెన్సీలలో చెల్లని నిర్మాణాల ఉపయోగం గురించి హెచ్చరికలను అందిస్తుంది (ఉదాహరణకు, ఒక లోపం కారణంగా, ప్యాక్ చేయబడిన నిర్మాణాల ఫీల్డ్లను సురక్షిత బ్లాక్లలో రుణం తీసుకోవడానికి అనుమతించబడింది). అటువంటి నిర్మాణాలకు ఇకపై రస్ట్ యొక్క భవిష్యత్తు వెర్షన్లో మద్దతు ఉండదు.
- కార్గో మరియు rustc ప్రత్యేక యుటిలిటీని కాల్ చేయవలసిన అవసరం లేకుండా డీబగ్గింగ్ డేటా (స్ట్రిప్ = "డీబగిన్ఫో") మరియు చిహ్నాలు (స్ట్రిప్ = "సింబల్స్") నుండి తొలగించబడిన ఎక్జిక్యూటబుల్ ఫైల్లను రూపొందించే అంతర్నిర్మిత సామర్థ్యాన్ని కలిగి ఉంటాయి. Cargo.tomlలోని “స్ట్రిప్” పరామితి ద్వారా శుభ్రపరిచే సెట్టింగ్ అమలు చేయబడుతుంది: [profile.release] strip = “debuginfo”, “చిహ్నాలు”
- ఇంక్రిమెంటల్ కంపైలేషన్ డిఫాల్ట్గా నిలిపివేయబడింది. కంపైలర్లోని బగ్కు క్రాష్లు మరియు డీరియలైజేషన్ ఎర్రర్లకు దారితీసే తాత్కాలిక పరిష్కారమే కారణం. బగ్ పరిష్కారం ఇప్పటికే సిద్ధం చేయబడింది మరియు తదుపరి విడుదలలో చేర్చబడుతుంది. ఇంక్రిమెంటల్ కంపైలేషన్ను తిరిగి ఇవ్వడానికి, మీరు పర్యావరణ వేరియబుల్ RUSTC_FORCE_INCREMENTAL=1ని ఉపయోగించవచ్చు.
- API యొక్క కొత్త భాగం స్థిరమైన వర్గానికి తరలించబడింది, ఇందులో పద్ధతులు మరియు లక్షణాల అమలులు స్థిరీకరించబడ్డాయి:
- std::thread::available_parallelism
- ఫలితం:: కాపీ చేయబడింది
- ఫలితం::క్లోన్ చేయబడింది
- arch :: asm!
- arch ::global_asm!
- ops::ControlFlow::is_break
- ops::ControlFlow::is_continue
- u8 కోసం ప్రయత్నించండి
- char::TryFromCharError (క్లోన్, డీబగ్, డిస్ప్లే, PartialEq, కాపీ, Eq, ఎర్రర్)
- iter :: zip
- NonZeroU8:: is_power_of_to
- NonZeroU16:: is_power_of_to
- NonZeroU32:: is_power_of_to
- NonZeroU64:: is_power_of_to
- NonZeroU128:: is_power_of_to
- ToLowercase నిర్మాణం కోసం DoubleEndedIterator
- Touppercase నిర్మాణం కోసం DoubleEndedIterator
- [T; కోసం<&mut [T]> నుండి ప్రయత్నించండి; N]
- ఒకసారి నిర్మాణం కోసం అన్వైండ్సేఫ్
- ఒకసారి కోసం RefUnwindSafe
- armv8 నియాన్ సపోర్ట్ ఫంక్షన్లు aarch64 కోసం కంపైలర్లో నిర్మించబడ్డాయి
- స్థిరాంకాలకి బదులుగా ఏదైనా సందర్భంలో ఉపయోగించగల అవకాశాన్ని నిర్ణయించే “const” లక్షణం ఫంక్షన్లలో ఉపయోగించబడుతుంది:
- mem::MaybeUninit::as_ptr
- mem::MaybeUninit::assume_init
- mem::MaybeUninit::assume_init_ref
- ffi::CStr::నిల్_చెక్ చేయని_బైట్ల నుండి
మూలం: opennet.ru