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

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

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

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

  • దీర్ఘకాలం నుండి తొలగించబడింది లోపం పూర్ణాంకాలు మరియు ఫ్లోటింగ్ పాయింట్ సంఖ్యల మధ్య మార్పిడులు చేస్తున్నప్పుడు. రస్ట్ కంపైలర్ LLVMని బ్యాకెండ్‌గా ఉపయోగిస్తుంది కాబట్టి, టైప్ కన్వర్షన్ ఆపరేషన్‌లు LLVM ఇంటర్మీడియట్ కోడ్ సూచనల ద్వారా నిర్వహించబడ్డాయి fptoui, ఇది ఒక ముఖ్యమైన లక్షణాన్ని కలిగి ఉంటుంది - ఫలిత విలువ లక్ష్య రకానికి సరిపోకపోతే నిర్వచించబడని ప్రవర్తన. ఉదాహరణకు, ఫ్లోట్ విలువ 300ని f32 రకంతో పూర్ణాంకం రకం u8కి మార్చినప్పుడు, ఫలితం అనూహ్యమైనది మరియు వివిధ సిస్టమ్‌లలో మారవచ్చు. సమస్య ఏమిటంటే, ఈ ఫీచర్ కోడ్‌లో కనిపిస్తుంది, అది "సురక్షితమైనది" అని గుర్తు పెట్టబడలేదు.

    రస్ట్ 1.45 నాటికి, టైప్ సైజ్ ఓవర్‌ఫ్లో యొక్క ప్రవర్తన ఖచ్చితంగా నియంత్రించబడుతుంది మరియు "యాజ్" కన్వర్షన్ ఆపరేషన్ ఓవర్‌ఫ్లో కోసం తనిఖీ చేస్తుంది మరియు విలువను టార్గెట్ రకం యొక్క గరిష్ట లేదా కనిష్ట విలువకు మార్చడానికి బలవంతం చేస్తుంది (పై ఉదాహరణ కోసం, విలువ 300 255కి మార్చబడుతుంది). అటువంటి తనిఖీలను నిలిపివేయడానికి, అసురక్షిత మోడ్‌లో పనిచేస్తున్న అదనపు API కాల్‌లు “{f64, f32}::to_int_unchecked” అందించబడతాయి.

    fn తారాగణం(x: f32) -> u8 {
    x u8 వలె
    }

    fn ప్రధాన() {
    లెట్ టూ_బిగ్ = 300.0;
    లెట్ టూ_స్మాల్ = -100.0;
    లెట్ నాన్ = f32::NAN;

    x: f32 = 1.0;
    వీలు y: u8 = అసురక్షిత {x.to_int_unchecked()};

    println!("too_big_casted = {}", cast(too_big)); // అవుట్‌పుట్ 255
    println!("too_small_casted = {}", cast(too_small)); // అవుట్‌పుట్ 0
    println!("not_a_number_casted = {}", cast(nan)); // అవుట్‌పుట్ 0
    }

  • స్థిరీకరించబడిన ఉపయోగించండి విధానపరమైన మాక్రోలుఫంక్షన్ లాంటి వ్యక్తీకరణలు, టెంప్లేట్‌లు మరియు స్టేట్‌మెంట్‌లు. ఇంతకుముందు, అటువంటి మాక్రోలను ప్రతిచోటా పిలవలేము, కానీ కోడ్‌లోని కొన్ని భాగాలలో మాత్రమే (ప్రత్యేక కాల్‌గా, ఇతర కోడ్‌తో ముడిపడి ఉండదు). ఫంక్షన్‌ల మాదిరిగానే మాక్రోలను పిలిచే విధానాన్ని విస్తరించడం వెబ్ ఫ్రేమ్‌వర్క్ పని చేయడానికి అవసరమైన వాటిలో ఒకటి రాకెట్ రస్ట్ యొక్క స్థిరమైన విడుదలలలో. ఇంతకుముందు, రాకెట్‌లో హ్యాండ్లర్‌లను నిర్వచించడంలో అదనపు సౌలభ్యాన్ని సాధించడానికి “proc_macro_hygiene” అనే ప్రయోగాత్మక ఫీచర్‌ను ప్రారంభించడం అవసరం, ఇది రస్ట్ యొక్క స్థిరమైన వెర్షన్‌లలో అందుబాటులో లేదు. ఈ ఫంక్షనాలిటీ ఇప్పుడు భాష యొక్క స్థిరమైన విడుదలలలో నిర్మించబడింది.
  • శ్రేణి విలువలను (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo})పై పునరావృతం చేయడానికి “char” రకంతో పరిధులను ఉపయోగించడానికి అనుమతించబడింది:

    'a'లో ch కోసం..='z' {
    ప్రింట్!("{}", ch);
    }
    println!(); // "abcdefghijklmnopqrstuvwxyz"ని ప్రింట్ చేస్తుంది

  • APIల యొక్క కొత్త భాగం స్థిరీకరించబడిన వాటితో సహా స్థిరమైన వర్గానికి బదిలీ చేయబడింది
    ఆర్క్:: as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::బలహీన::as_ptr,
    rc::బలహీనమైన::from_raw,
    rc::బలహీనమైన:: లోకి_రా,
    str::strip_prefix,
    str::strip_suffix,
    సమకాలీకరణ::బలహీనమైన::as_ptr,
    సమకాలీకరణ::బలహీనమైన::from_raw,
    సమకాలీకరించు::బలహీనమైన::లోకి_రా,
    చార్::UNICODE_VERSION,
    Span::పరిష్కరించబడింది,
    Span::located_at,
    Span:: mixed_site,
    unix::process::CommandExt::arg0.

  • rustc కంపైలర్ "టార్గెట్-ఫీచర్" ఫ్లాగ్‌ని ఉపయోగించి వివిధ టార్గెట్ ప్లాట్‌ఫారమ్ ఫీచర్‌లను భర్తీ చేయడానికి మద్దతును జోడించింది, ఉదాహరణకు, "-C టార్గెట్-ఫీచర్=+avx2,+fma". కొత్త జెండాలు కూడా జోడించబడ్డాయి:
    క్రాష్ హ్యాండ్లింగ్ స్ట్రాటజీతో సంబంధం లేకుండా, అన్‌వైండ్ కాల్ టేబుల్‌లను రూపొందించడానికి "ఫోర్స్-అన్‌వైండ్-టేబుల్స్"; ఉత్పత్తి చేయబడిన rlibsలో LLVM బిట్‌కోడ్ చేర్చబడిందో లేదో నియంత్రించడానికి "ఎంబెడ్-బిట్‌కోడ్". బిల్డ్ టైమ్ మరియు డిస్క్ స్పేస్ వినియోగాన్ని ఆప్టిమైజ్ చేయడానికి కార్గోలో డిఫాల్ట్‌గా "ఎంబెడ్-బిట్‌కోడ్" ఫ్లాగ్ ప్రారంభించబడుతుంది.

  • mipsel-sony-psp మరియు thumbv7a-uwp-windows-msvc ప్లాట్‌ఫారమ్‌లకు మూడవ స్థాయి మద్దతు అందించబడింది. మూడవ స్థాయి ప్రాథమిక మద్దతును కలిగి ఉంటుంది, కానీ ఆటోమేటెడ్ టెస్టింగ్ మరియు అధికారిక నిర్మాణాల ప్రచురణ లేకుండా.

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

మూలం: opennet.ru

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