విడుదల ప్రచురించబడింది రస్ట్ 1.96.0 రస్ట్ ప్రోగ్రామింగ్ భాష యొక్క తాజా స్థిరమైన వెర్షన్ అప్డేట్ విడుదల చేయబడింది. మే 21, XXX సంవత్సరాలదీనిని ప్రామాణిక rustup update stable కమాండ్ను ఉపయోగించి ఇన్స్టాల్ చేయవచ్చు. ప్రధాన మార్పులలో core::range లో కొత్త శ్రేణి రకాలు, నమూనా సరిపోలిక మాక్రోల స్థిరీకరణ, WebAssembly బిల్డ్ ప్రవర్తనను కఠినతరం చేయడం మరియు Cargoలోని రెండు దుర్బలత్వాలకు పరిష్కారాలు ఉన్నాయి.
ప్రధాన మార్పులు
కొత్త శ్రేణి రకాలు core::range::Range*.
స్టాండర్డ్ లైబ్రరీలో కొత్త రేంజ్ రకాలు స్థిరీకరించబడ్డాయి: core::range::Range, RangeFrom, RangeInclusive, మరియు వాటికి సంబంధించిన ఇటరేటర్లు. core::ops లోని పాత రకాలలా కాకుండా, ఈ కొత్త రేంజ్లు నేరుగా ఇటరేటర్ను అమలు చేయవు, కానీ IntoIterator ద్వారా ఇటరేటర్గా మార్చబడతాయి. ఇది ఈ రేంజ్లను కాపీ చేయదగినవిగా (Copyable) చేయడానికి అనుమతిస్తుంది, ఇది ఒక రేంజ్ను స్ట్రక్చర్ ఫీల్డ్గా నిల్వ చేసేటప్పుడు సౌకర్యవంతంగా ఉంటుంది. ప్రస్తుతం 0..1 వంటి సింటాక్స్ పాత రేంజ్ రకాలను సృష్టిస్తుంది, కానీ భాష యొక్క భవిష్యత్ వెర్షన్లో దీనిని కొత్త రకాలకు మార్చాలని ప్రణాళిక చేయబడింది.assert_matches! మరియు debug_assert_matches! జోడించబడ్డాయి.
కొత్త మాక్రోలు ఒక విలువ ఇచ్చిన నమూనాతో సరిపోలుతుందో లేదో తనిఖీ చేయడానికి మిమ్మల్ని అనుమతిస్తాయి. ఇది భావనలో assert!(matches!(…))ని పోలి ఉంటుంది, కానీ లోపం సంభవించినప్పుడు, విలువ యొక్క డీబగ్ ప్రాతినిధ్యం ముద్రించబడుతుంది, ఇది డయాగ్నొస్టిక్స్ను సులభతరం చేస్తుంది. ప్రసిద్ధ థర్డ్-పార్టీ క్రేట్లతో వైరుధ్యాలను నివారించడానికి ఈ మాక్రోలు ప్రిల్యూడ్లో జోడించబడలేదు, కాబట్టి వాటిని తప్పనిసరిగా కోర్ లేదా std నుండి స్పష్టంగా దిగుమతి చేసుకోవాలి.వెబ్అసెంబ్లీ టార్గెట్ల ప్రవర్తనను మార్చింది.
వెబ్అసెంబ్లీ బిల్డ్ల కోసం రస్ట్ ఇకపై లింకర్కు --allow-undefinedను పంపదు. నిర్వచించబడని సింబల్స్ ఇప్పుడు లింకింగ్ సమయంలో "env" మాడ్యూల్ నుండి ఆటోమేటిక్గా ఇంపోర్ట్లుగా మార్చబడటానికి బదులుగా, ఎర్రర్లుగా పరిగణించబడతాయి. ఇది బిల్డ్ ఎర్రర్లను మరియు చెల్లని సింబల్ పేర్లను ముందుగానే పట్టుకోవాలి. అవసరమైతే, RUSTFLAGS=-Clink-arg=--allow-undefinedను ఉపయోగించడం ద్వారా లేదా #[link(wasm_import_module = "env")] ఉపయోగించి ఇంపోర్ట్ చేయబడిన wasm మాడ్యూల్ను స్పష్టంగా పేర్కొనడం ద్వారా పాత ప్రవర్తనను తిరిగి మార్చవచ్చు.కార్గోకు భద్రతాపరమైన పరిష్కారాలు అందాయి.
భాషలో మార్పులు.
ఈ విడుదలలో ఇవి ఉన్నాయి: అనేక చిన్న దిద్దుబాట్లు మరియు మెరుగుదలలు: మాక్రోల యొక్క expr మెటావేరియబుల్స్ను cfgకి పంపడానికి అనుమతించబడింది, టపుల్ ఎక్స్ప్రెషన్స్లో నెవర్-టైప్ కాస్టింగ్ సరిచేయబడింది, ఫంక్షన్ ఆర్గ్యుమెంట్ల కోసం తప్పుగా టైప్ ఇన్ఫరెన్స్ సూచనలు ఇచ్చే అరుదైన సందర్భాలు పరిష్కరించబడ్డాయి, ఇన్లైన్ అసెంబ్లీలో s390x వెక్టర్ రిజిస్టర్లకు మద్దతు జోడించబడింది, మరియు టెంప్లేట్లుగా ManuallyDrop కాన్స్టాంట్లకు తిరిగి అనుమతి ఇవ్వబడింది—ఇది Rust 1.94.0లో ప్రవేశపెట్టబడిన ఒక రిగ్రెషన్ను సరిచేస్తుంది.కంపైలర్ మరియు ప్లాట్ఫారమ్లలో మార్పులు.
కోసం LinuxLoongArch టార్గెట్ల కోసం లింక్ రిలాక్సేషన్ సపోర్ట్ ఎనేబుల్ చేయబడింది—ఇది కోడ్ డిప్లాయ్మెంట్ తర్వాత కొన్ని ట్రాన్సిషన్లు మరియు కాల్స్ను సులభతరం చేసే ఒక లింకింగ్ ఆప్టిమైజేషన్. riscv64gc-unknown-fuchsia కోసం, బేస్ కాన్ఫిగరేషన్ వెక్టర్ ఎక్స్టెన్షన్లకు సపోర్ట్తో RVA22 ప్రొఫైల్కు అప్డేట్ చేయబడింది.ప్రామాణిక గ్రంథాలయ నవీకరణలు.
సున్నా కాని పూర్ణసంఖ్య శ్రేణులపై పునరావృతం చేయడానికి మద్దతు జోడించబడింది. ToSocketAddr ద్వారా SGXలో హోస్ట్ చిరునామాల లేజీ హ్యాండ్లింగ్ కూడా సరిచేయబడింది, మరియు డాక్యుమెంటేషన్ మరియు అంతర్గత కాంట్రాక్టులలో "చదవగలిగే/వ్రాయగలిగే" మెమరీ నిర్వచనం స్పష్టం చేయబడింది: సాధారణ నిర్వచనం నుండి నల్ పాయింటర్ తొలగించబడింది, మరియు మినహాయింపులు ఇప్పుడు నిర్దిష్ట పద్ధతుల కోసం విడిగా పేర్కొనబడ్డాయి.స్థిరీకరించబడిన APIలు.
స్థిరీకరించబడిన ఇంటర్ఫేస్లలో assert_matches!, debug_assert_matches!, From యొక్క ఇంప్లిమెంటేషన్లు ఉన్నాయి. AssertUnwindSafe కోసం , లేజీసెల్ మరియు లేజీలాక్ అలాగే, core::range నుండి కొత్త శ్రేణి రకాలు మరియు ఇటరేటర్లు, వీటిలో Range, RangeFrom, RangeToInclusive మరియు వాటి ఇటరేటర్లు ఉన్నాయి.కార్గో: డిపెండెన్సీలు మరియు డాక్యుమెంటేషన్లో మార్పులు.
ఒక డిపెండెన్సీ ఇప్పుడు గిట్ రిపోజిటరీ మరియు ప్రత్యామ్నాయ రిజిస్ట్రీ రెండింటినీ పేర్కొనగలదు: గిట్ వెర్షన్ స్థానికంగా ఉపయోగించబడుతుంది, మరియు రిజిస్ట్రీ వెర్షన్ పబ్లిషింగ్ సమయంలో ఉపయోగించబడుతుంది, ఇది crates.io లోని ప్రవర్తనను పోలి ఉంటుంది. కార్గో కాన్ఫిగరేషన్లో target.'cfg(..)'.rustdocflags కు కూడా మద్దతు జోడించబడింది.రస్ట్డాక్ ఇప్పుడు డాక్యుమెంటేషన్ను మరింత కచ్చితంగా నిర్వహిస్తుంది.
వాడుకలో లేని API నోట్స్ ఇప్పుడు, గతంలో white-space: pre-wrap ద్వారా జరిగే ప్రత్యేక ప్రాసెసింగ్ లేకుండా, సాధారణ డాక్యుమెంటేషన్గా ప్రదర్శించబడతాయి. అదనంగా, rustdoc ఇకపై impl లోపల ఉన్న ఎలిమెంట్స్ కోసం missing_doc_code_examples ను లింట్ చేయదు, మరియు మెథడ్స్, వాటికి సంబంధించిన ఫంక్షన్లు ఇప్పుడు డాక్యుమెంటేషన్ సైడ్బార్లో వేరు చేయబడ్డాయి.సంభావ్య అనుకూలత లేని సమస్యలు.
ఈ విడుదలలో ప్రామాణికం కాని కోడ్లో కనిపించే అనేక మార్పులు ఉన్నాయి: కొన్ని అత్యంత క్లిష్టమైన సందర్భాలలో #[repr(Int)] ఎనమ్ల లేఅవుట్ సరిచేయబడింది, మరియు Pin లోని కొన్ని పనికిరాని అన్సైజ్ కాస్ట్లు నిలిపివేయబడ్డాయి. వెబ్అసెంబ్లీ బిల్డ్లు ఇప్పుడు నిర్వచించబడని చిహ్నాల (undefined symbols) కారణంగా క్రాష్ అవుతున్నాయి, అనుకోకుండా స్థిరీకరించబడిన #![reexport_test_harness_main] అట్రిబ్యూట్ మళ్ళీ ఫీచర్ గేటెడ్ చేయబడింది, -Csoft-float ఆప్షన్ తొలగించబడింది, మరియు కనీస బాహ్య LLVM వెర్షన్ 21కి పెంచబడింది. AVR కొరకు, c_double రకం f32గా మార్చబడింది, ఎందుకంటే ఈ టార్గెట్లలో C డబుల్స్ డిఫాల్ట్గా 32-బిట్గా ఉంటాయి.
మూలం: linux.org.ru
