మొజిల్లా ప్రాజెక్ట్ ద్వారా స్థాపించబడిన రస్ట్ 1.84 సాధారణ-ప్రయోజన ప్రోగ్రామింగ్ లాంగ్వేజ్ విడుదల, కానీ ఇప్పుడు స్వతంత్ర లాభాపేక్ష లేని సంస్థ రస్ట్ ఫౌండేషన్ ఆధ్వర్యంలో అభివృద్ధి చేయబడింది, ప్రచురించబడింది. భాష మెమరీ భద్రతపై దృష్టి పెడుతుంది మరియు చెత్త సేకరించేవాడు మరియు రన్టైమ్ (ప్రామాణిక లైబ్రరీ యొక్క ప్రాథమిక ప్రారంభ మరియు నిర్వహణకు రన్టైమ్ తగ్గించబడింది) వినియోగాన్ని నివారించేటప్పుడు అధిక ఉద్యోగ సమాంతరతను సాధించడానికి మార్గాలను అందిస్తుంది.
రస్ట్ యొక్క మెమరీ హ్యాండ్లింగ్ పద్ధతులు పాయింటర్లను మానిప్యులేట్ చేసేటప్పుడు డెవలపర్ను లోపాల నుండి కాపాడతాయి మరియు తక్కువ-స్థాయి మెమరీ హ్యాండ్లింగ్ కారణంగా తలెత్తే సమస్యల నుండి రక్షిస్తాయి, అనగా మెమరీ ప్రాంతాన్ని విడుదల చేసిన తర్వాత యాక్సెస్ చేయడం, శూన్య పాయింటర్లను డిఫెరెన్సింగ్ చేయడం, బఫర్ ఓవర్రన్లు మొదలైనవి. లైబ్రరీలను పంపిణీ చేయడానికి, బిల్డ్లను అందించడానికి మరియు డిపెండెన్సీలను నిర్వహించడానికి, ప్రాజెక్ట్ కార్గో ప్యాకేజీ మేనేజర్ను అభివృద్ధి చేస్తుంది. లైబ్రరీలను హోస్ట్ చేయడానికి crates.io రిపోజిటరీకి మద్దతు ఉంది.
రిఫరెన్స్ చెకింగ్, ఆబ్జెక్ట్ యాజమాన్యాన్ని ట్రాక్ చేయడం, ఆబ్జెక్ట్ జీవితకాలాన్ని (స్కోప్లు) ట్రాక్ చేయడం మరియు కోడ్ అమలు సమయంలో మెమరీ యాక్సెస్ యొక్క ఖచ్చితత్వాన్ని అంచనా వేయడం ద్వారా కంపైల్ సమయంలో రస్ట్లో మెమరీ భద్రత అందించబడుతుంది. రస్ట్ పూర్ణాంకాల ఓవర్ఫ్లోల నుండి రక్షణను కూడా అందిస్తుంది, ఉపయోగించే ముందు వేరియబుల్ విలువలను తప్పనిసరిగా ప్రారంభించడం అవసరం, ప్రామాణిక లైబ్రరీలో లోపాలను మెరుగ్గా నిర్వహిస్తుంది, డిఫాల్ట్గా మార్పులేని సూచనలు మరియు వేరియబుల్స్ భావనను వర్తింపజేస్తుంది, లాజికల్ లోపాలను తగ్గించడానికి బలమైన స్టాటిక్ టైపింగ్ను అందిస్తుంది.
ప్రధాన ఆవిష్కరణలు:
- కార్గో ప్యాకేజీ మేనేజర్ స్థిరీకరించబడిన డిపెండెన్సీ ప్రాసెసింగ్ మెకానిజంను కలిగి ఉంది, ఇది ప్రాజెక్ట్ (MSRV, కనీస మద్దతు గల రస్ట్ వెర్షన్) ద్వారా కనిష్టంగా మద్దతు ఇవ్వబడిన రస్ట్ కంపైలర్ వెర్షన్లతో అనుకూలతను పరిగణనలోకి తీసుకుని డిపెండెంట్ కాంపోనెంట్ల వెర్షన్లను ఎంచుకుంటుంది. కొత్త ఫీచర్ రస్ట్ టూల్కిట్ యొక్క పాత వెర్షన్లకు అనుకూలంగా ఉండే ప్రాజెక్ట్లలో ప్రతి డిపెండెన్సీ యొక్క పాత వెర్షన్లను మాన్యువల్గా ఎంచుకోవాల్సిన అవసరాన్ని మెయింటెయిన్ర్లు తొలగిస్తుంది. కొత్త డిపెండెన్సీ రిజల్యూషన్ మోడ్ రస్ట్ 1.85 విడుదలలో డిఫాల్ట్గా ప్రారంభించబడుతుంది, కానీ ప్రస్తుతానికి "[resolver]" విభాగంలో "incompatible-rust-versions = "ని పేర్కొనడం ద్వారా ప్రారంభించబడే ఒక ఎంపికగా అందుబాటులో ఉంది. cargo/config.toml" ఫైల్. ఫాల్బ్యాక్"'.
- మేము కంపైలర్ను కొత్త రకం పరిష్కరిణికి మార్చడం ప్రారంభించాము, లక్షణాల యొక్క వర్తించే సరిహద్దులను తనిఖీ చేయడానికి, రకాలను సాధారణీకరించడానికి మరియు రకం అనుకూలతను అంచనా వేయడానికి రూపొందించబడింది. సంస్కరణ 1.84లో, లక్షణాల అమలు యొక్క స్థిరత్వాన్ని తనిఖీ చేయడానికి కొత్త హ్యాండ్లర్ ఉపయోగించబడుతుంది, అనగా. ఇతర క్రేట్ ప్యాకేజీల నుండి కోడ్ను పరిగణనలోకి తీసుకుని, ప్రశ్నలోని రకం కోసం గరిష్టంగా ఒక లక్షణం ఉనికిని అంచనా వేయడం. ఈ చెక్ టైప్ హ్యాండ్లర్ యొక్క పాత అమలులో సమస్యలను వదిలించుకోవడానికి మాకు అనుమతినిచ్చింది, ఇది రకాలు వివిధ అమలుల ఖండన కారణంగా వివాదాలకు దారితీయవచ్చు.
- ఒక కొత్త API “స్ట్రిక్ట్ ప్రోవెన్స్” ప్రతిపాదించబడింది, ఇది పాయింటర్ను పూర్ణాంకం మరియు వెనుకకు మార్చడానికి ఉపయోగించబడుతుంది, పాయింటర్కు దాని మూలం మరియు వినియోగ ప్రాంతం గురించి సమాచారంతో జోడించిన మెటాడేటాను పరిగణనలోకి తీసుకుంటుంది (అదనంగా చిరునామా, ఇతర పాయింటర్లతో కనెక్షన్ గురించిన సమాచారంతో పాయింటర్కు “ప్రోవెన్స్” విలువ జోడించబడింది, ఇది పాయింటర్ మెమరీని ఎక్కడ మరియు ఎప్పుడు యాక్సెస్ చేయగలదో నిర్ణయించడానికి మిమ్మల్ని అనుమతిస్తుంది). పాయింటర్ను పూర్ణాంకం మరియు వెనుకకు ప్రసారం చేస్తున్నప్పుడు, ఫలిత పాయింటర్ యొక్క మూలాన్ని గుర్తించడంలో ఇబ్బంది కారణంగా నిర్వచించబడని ప్రవర్తన ఏర్పడుతుంది. పాయింటర్ను పూర్ణాంకానికి ప్రసారం చేయకుండా, పాయింటర్ యొక్క తక్కువ-ఆర్డర్ బిట్లలో అదనపు సమాచారాన్ని నిల్వ చేయడం వంటి తక్కువ-స్థాయి పాయింటర్ కార్యకలాపాలను నిర్వహించడానికి కొత్త API మిమ్మల్ని అనుమతిస్తుంది.
- API యొక్క కొత్త భాగం స్థిరమైన వర్గానికి తరలించబడింది, ఇందులో పద్ధతులు మరియు లక్షణాల అమలులు స్థిరీకరించబడ్డాయి:
- Ipv6Addr:: is_unique_local
- Ipv6Addr::is_unicast_link_local
- కోర్::ptr::విత్_exposed_provenance
- కోర్::ptr::విత్_exposed_provenance_mut
- ::addr
- :: expose_provenance
- :: with_addr
- ::map_addr
- :: isqrt
- :: checked_isqrt
- :: isqrt
- నాన్ జీరో:: isqrt
- కోర్::ptr::నిరూపణ_రహిత
- కోర్::ptr::నిరూపణ_ముట్ లేకుండా
- కోర్::ptr::డాంగ్లింగ్
- కోర్::ptr::dangling_mut
- పిన్::as_deref_mut
- "const" గుర్తు ఫంక్షన్లలో ఉపయోగించబడుతుంది:
- అటామిక్బూల్:: నుండి_ptr
- AtomicPtr::from_ptr
- AtomicU8::from_ptr
- AtomicU16::from_ptr
- AtomicU32::from_ptr
- AtomicU64::from_ptr
- AtomicUsize:: from_ptr
- అటామిక్I8:: నుండి_ptr
- అటామిక్I16:: నుండి_ptr
- అటామిక్I32:: నుండి_ptr
- అటామిక్I64:: నుండి_ptr
- అటామిక్ పరిమాణం:: నుండి_ptr
- :: is_null
- :: as_ref
- :: as_mut
- పిన్::కొత్తది
- పిన్::new_unchecked
- పిన్::get_ref
- పిన్::లోకి_ref
- పిన్::get_mut
- పిన్::get_unchecked_mut
- పిన్::static_ref
- పిన్::static_mut
- s390x మరియు Arm64EC ఆర్కిటెక్చర్ల కోసం అసెంబ్లర్ ఇన్లైన్ ఇన్సర్ట్లకు మద్దతు స్థిరీకరించబడింది.
- WebAssembly టార్గెట్ ప్లాట్ఫారమ్ కోసం మల్టీవాల్యూ, రిఫరెన్స్-టైప్లు మరియు టెయిల్-కాల్ ఫంక్షనాలిటీకి మద్దతు స్థిరీకరించబడింది.
- wasm32v1-none ప్లాట్ఫారమ్కు రెండవ స్థాయి మద్దతు అమలు చేయబడింది. రెండవ స్థాయి మద్దతు అసెంబ్లీ హామీని కలిగి ఉంటుంది.
అదనంగా, రస్ట్కు సంబంధించిన అనేక ప్రాజెక్టులను గమనించవచ్చు:
- టోక్ 2.2 ఆపరేటింగ్ సిస్టమ్ యొక్క విడుదల, రస్ట్ భాషలో వ్రాయబడింది మరియు మైక్రోకంట్రోలర్లలో వినియోగాన్ని లక్ష్యంగా చేసుకుంది, ప్రచురించబడింది. సెన్సార్లు, TPM (ట్రస్టెడ్ ప్లాట్ఫారమ్ మాడ్యూల్), ప్రామాణీకరణ కీ ఫోబ్లు మరియు ధరించగలిగిన పరికరాలు వంటి పరిమిత RAM పరిమాణంతో పొందుపరిచిన పరికరాలలో బహుళ అవిశ్వాస అప్లికేషన్లను ఏకకాలంలో అమలు చేయడానికి సిస్టమ్ అనుమతిస్తుంది. ARM కార్టెక్స్-M మరియు RISC-V ఆర్కిటెక్చర్ల ఆధారంగా మైక్రోకంట్రోలర్లతో ప్లాట్ఫారమ్లకు మద్దతు ఉంది. టోక్ యొక్క ముఖ్య లక్షణం అప్లికేషన్, కెర్నల్ మరియు డ్రైవర్ లేయర్లను వేరుచేయడం, అలాగే ప్రతి అప్లికేషన్ మరియు డ్రైవర్ను విడిగా వేరుచేయడం. ఐసోలేషన్ రస్ట్ లాంగ్వేజ్ యొక్క సామర్థ్యాలను మరియు మెమరీ ప్రొటెక్షన్ లెవల్ వద్ద వేరుచేయడం రెండింటినీ ఉపయోగిస్తుంది.
- VEKOS (ధృవీకరించబడిన ప్రయోగాత్మక కెర్నల్ OS) ప్రాజెక్ట్ రస్ట్ భాషలో ఆపరేటింగ్ సిస్టమ్ కెర్నల్ను అభివృద్ధి చేస్తుంది, ఇది ఎక్జిక్యూటబుల్ కాంపోనెంట్ల ధృవీకరణను అందిస్తుంది. ప్రతి ఫైల్ సిస్టమ్ ఆపరేషన్, ప్రాసెస్ క్రియేషన్ మరియు మెమరీ కేటాయింపు కోసం, ఒక క్రిప్టోగ్రాఫిక్ ప్రూఫ్ ఉత్పత్తి చేయబడుతుంది, ఇది అమలు సమయంలో ఆపరేషన్ను ధృవీకరించడానికి అనుమతిస్తుంది (అమలు ఆపరేటింగ్ సిస్టమ్లోని చర్యలను ధృవీకరించడానికి బ్లాక్చెయిన్ను ఉపయోగించడంతో పోల్చబడుతుంది). VKFS ఫైల్ సిస్టమ్లో, రెట్రోయాక్టివ్ వక్రీకరణ నుండి సమగ్రతను మరియు రక్షణను నిర్ధారించడానికి, మెర్కిల్ ట్రీ నిర్మాణం ఉపయోగించబడుతుంది, దీనిలో ప్రతి శాఖలో ట్రీ హ్యాషింగ్కు ధన్యవాదాలు, అన్ని అంతర్లీన శాఖలు మరియు నోడ్లను ధృవీకరిస్తుంది. మెమరీ కేటాయింపు COW (కాపీ-ఆన్-రైట్) మోడ్లో జరుగుతుంది.
- మైక్రోసాఫ్ట్ మరియు ఇన్రియా నుండి పరిశోధకుల బృందం C భాష యొక్క ఉపసమితిని అభివృద్ధి చేస్తోంది, Mini-C, C ప్రోగ్రామ్లను రస్ట్ ప్రాతినిధ్యంగా స్వయంచాలకంగా అనువదించడానికి రూపొందించబడింది. c2rust కంపైలర్ వలె కాకుండా, కొత్త ప్రాజెక్ట్ అసురక్షితాన్ని ఉపయోగించకుండా రస్ట్ కోడ్ను రూపొందించడానికి మిమ్మల్ని అనుమతిస్తుంది, అయితే విశ్వసనీయతకు అధికారిక రుజువు ఉన్న C ప్రాజెక్ట్లను మార్చడం ప్రధానంగా లక్ష్యంగా పెట్టుకుంది. సి నుండి రస్ట్కి నేరుగా కంపైల్ చేసిన తర్వాత అసురక్షిత బ్లాక్లను తిరిగి వ్రాయడం కంటే పాయింటర్ అంకగణితాన్ని అనుమతించని మినీ-సి ప్రాతినిధ్యానికి సి ప్రాజెక్ట్ను మార్చడం సులభతరం అవుతుంది.
కంపైలర్ అమలు KaRaMeL టూల్కిట్పై ఆధారపడి ఉంటుంది. మినీ-సి రస్ట్లోని HACL* క్రిప్టోగ్రాఫిక్ లైబ్రరీని తిరిగి వ్రాయడానికి ఒక ప్రాజెక్ట్లో భాగంగా అభివృద్ధి చేయబడింది మరియు పరీక్షించబడింది, దీని కోసం విశ్వసనీయతకు అధికారిక రుజువు అందించబడింది. మినీ-సి నుండి సురక్షితమైన రస్ట్ కోడ్ను రూపొందించే సామర్థ్యాన్ని ప్రదర్శించడానికి ఇదే విధమైన రుజువు ఉపయోగించబడింది.
- కర్ల్ యుటిలిటీ రచయిత డేనియల్ స్టెన్బర్గ్, కర్ల్ ప్రాజెక్ట్ ఇకపై హైపర్ లైబ్రరీని ఉపయోగించి రస్ట్లో వ్రాసిన ప్రత్యామ్నాయ HTTP బ్యాకెండ్ను అభివృద్ధి చేయదని మరియు నిర్వహించదని ప్రకటించారు. డెవలపర్లు మరియు వినియోగదారుల పట్ల ఆసక్తి లేకపోవడమే దీనికి కారణం.
- రస్ట్లో తిరిగి వ్రాయబడిన ఫిష్ 4.0 కమాండ్ షెల్ యొక్క బీటా విడుదల ప్రకటించబడింది. రెండు సంవత్సరాల అభివృద్ధి తర్వాత, ఫిష్ కోడ్బేస్ పూర్తిగా C++ నుండి రస్ట్కి బదిలీ చేయబడిందని గుర్తించబడింది. రస్ట్కి మారడం వల్ల మల్టీథ్రెడింగ్తో సమస్యలను పరిష్కరించడానికి, కంపైలేషన్ దశలో లోపాలను గుర్తించే ఆధునిక సాధనాలను పొందడానికి, మెమరీ భద్రతను మెరుగుపరచడానికి మరియు ప్రాజెక్ట్ను కొత్త డెవలపర్లకు మరింత ఆకర్షణీయంగా చేయడానికి మాకు అనుమతినిచ్చింది.
- టోర్ ప్రాజెక్ట్ ఆర్టి 1.3.2 విడుదలను ప్రచురించింది, ఇది రస్ట్లో టోర్ క్లయింట్ యొక్క ప్రత్యామ్నాయ అమలు. వివిధ అప్లికేషన్ల ద్వారా ఉపయోగించబడే ఒక పొందుపరచదగిన లైబ్రరీని ఆర్టి అందిస్తుంది. ఆర్టిని సృష్టించేటప్పుడు, తెలిసిన నిర్మాణ సమస్యలను నివారించడానికి మరియు ప్రాజెక్ట్ను మరింత మాడ్యులర్ మరియు సమర్థవంతంగా చేయడానికి టోర్ను అభివృద్ధి చేయడంలో గత అనుభవం పరిగణనలోకి తీసుకోబడింది. 1.x బ్రాంచ్ సాధారణ వినియోగదారుల ఉపయోగం కోసం తగినదిగా గుర్తించబడింది మరియు ప్రధాన C అమలులో ఉన్న అదే స్థాయి గోప్యత, వినియోగం మరియు స్థిరత్వాన్ని అందిస్తుంది. కొత్త వెర్షన్ RPC అభివృద్ధిని కొనసాగిస్తుంది, రిలే మద్దతును అమలు చేయడానికి సన్నాహాలు చేయబడ్డాయి మరియు ఉల్లిపాయ సేవలపై DoS దాడుల నుండి రక్షణ జోడించబడింది.
- రస్ట్లో వ్రాసిన బెవీ 0.15 గేమ్ ఇంజిన్ విడుదల ప్రచురించబడింది. గేమ్ లాజిక్ను నిర్వచించడానికి ఇంజిన్ డేటా డ్రైవెన్ మోడల్ను ఉపయోగిస్తుంది, సమాంతరంగా అమలు చేయగల రెడీమేడ్ బెవీ ECS (ఎంటిటీ కాంపోనెంట్ సిస్టమ్) భాగాల సెట్ పైన నిర్మించబడింది. 2D మరియు 3D రెండరింగ్, స్కెలిటల్ యానిమేషన్, రెండరింగ్ గ్రాఫ్ డెఫినిషన్, సీన్ జనరేషన్ సిస్టమ్, యూజర్ ఇంటర్ఫేస్ ఫ్రేమ్వర్క్, పునఃప్రారంభించాల్సిన అవసరం లేకుండా దృశ్యాలు మరియు వనరులకు మార్పులు చేయడం వంటి వాటికి మద్దతు ఇస్తుంది.
- కన్సోల్ టెక్స్ట్ ఎడిటర్ Helix 25.01 ప్రచురించబడింది, రస్ట్లో వ్రాయబడింది మరియు విమ్ మరియు నియోవిమ్లలో అంతర్లీనంగా ఉన్న ఆలోచనలను విస్తరించింది. LSP సర్వర్లు మరియు ట్రీ-సిట్టర్తో ఏకీకరణ, అనేక బ్లాక్ల ఏకకాల ఎంపిక, సవరించేటప్పుడు బహుళ కర్సర్ల ఉపయోగం, థీమ్లు మరియు DAP (డీబగ్ అడాప్టర్ ప్రోటోకాల్) డీబగ్గింగ్ ప్రోటోకాల్కు మద్దతు ఇస్తుంది.
- రస్ట్లో వ్రాయబడిన సర్వో బ్రౌజర్ ఇంజిన్, డార్క్ డిజైన్ మోడ్కు మద్దతును జోడించింది. సర్వోషెల్ బ్రౌజర్ పరిమాణం 20% తగ్గించబడింది. డిస్కార్డ్లో లాగిన్ మరియు సందేశాలను చదవడానికి వెబ్ స్పెసిఫికేషన్లకు మద్దతు విస్తరించబడింది (సందేశాలను పంపడం ఇంకా సాధ్యం కాదు).
- మొజిల్లా రస్ట్ లాంగ్వేజ్లో రియాక్ట్ నేటివ్ కోసం మాడ్యూల్లను రూపొందించడానికి యునిఫీ ఫర్ రియాక్ట్ నేటివ్ టూల్కిట్ను పరిచయం చేసింది.
- PNG ఇమేజ్ ఎన్కోడర్ల పనితీరు పరీక్షించబడింది. రస్ట్ డీకోడర్లు (png, zune-png, wuffs) C డీకోడర్ల (libpng, spng, stb_image) కంటే వేగవంతమైనవిగా మారాయి. ఉదాహరణకు, crate png ప్యాకేజీ (image-rs) x1.8 సిస్టమ్లో 86 రెట్లు మరియు ARM సిస్టమ్లో 1.5 రెట్లు libpng కంటే ఎక్కువ పనితీరును కనబరిచింది. image-rs: 375.401 MP/s (సగటు) 318.632 MP/s (భూగోళ) జూన్-png: 376.649 MP/s (సగటు) 302.529 MP/s (భూగోళ) wuffs: 376.205 MP/s (సగటున 287.181/208.906 MPs) జియోమియన్) libpng: 173.034 MP/s (సగటు) 299.515 MP/s (భూగోళ) spng: 235.495 MP/s (సగటు) 234.353 MP/s (భూగోళ) stb_image: 171.505 MP/s (సగటు) XNUMX MP
మూలం: opennet.ru
