రస్ట్ భాషకు మద్దతుతో Linux కెర్నల్ కోసం పాచెస్ యొక్క ఆరవ వెర్షన్

Miguel Ojeda, Rust-for-Linux ప్రాజెక్ట్ రచయిత, Linux కెర్నల్ డెవలపర్‌ల పరిశీలన కోసం రస్ట్ భాషలో పరికర డ్రైవర్‌లను అభివృద్ధి చేయడానికి v6 భాగాల విడుదలను ప్రతిపాదించారు. ఇది పాచెస్ యొక్క ఏడవ ఎడిషన్, వెర్షన్ నంబర్ లేకుండా ప్రచురించబడిన మొదటి సంస్కరణను పరిగణనలోకి తీసుకుంటుంది. రస్ట్ మద్దతు ప్రయోగాత్మకంగా పరిగణించబడుతుంది, అయితే ఇది ఇప్పటికే linux-తదుపరి బ్రాంచ్‌లో చేర్చబడింది మరియు కెర్నల్ సబ్‌సిస్టమ్‌లపై అబ్‌స్ట్రాక్షన్ లేయర్‌లను సృష్టించే పనిని ప్రారంభించడానికి, అలాగే డ్రైవర్లు మరియు మాడ్యూల్‌లను వ్రాయడానికి తగినంతగా అభివృద్ధి చేయబడింది. ఈ అభివృద్ధికి Google మరియు ISRG (ఇంటర్నెట్ సెక్యూరిటీ రీసెర్చ్ గ్రూప్) నిధులు సమకూరుస్తుంది, ఇది లెట్స్ ఎన్‌క్రిప్ట్ ప్రాజెక్ట్ స్థాపకుడు మరియు ఇంటర్నెట్ భద్రతను మెరుగుపరచడానికి HTTPS మరియు సాంకేతికతల అభివృద్ధిని ప్రోత్సహిస్తుంది.

కొత్త వెర్షన్‌లో:

  • టూల్‌కిట్ మరియు అలోక్ లైబ్రరీ యొక్క వేరియంట్, లోపాలు సంభవించినప్పుడు "పానిక్" స్థితి యొక్క సంభావ్య తరం నుండి విముక్తి పొందింది, రస్ట్ 1.60 విడుదలకు నవీకరించబడింది, ఇది కెర్నల్ ప్యాచ్‌లలో ఉపయోగించే "maybe_uninit_extra" మోడ్‌కు మద్దతును స్థిరీకరిస్తుంది.
  • కెర్నల్ APIకి అనుసంధానించబడిన పరీక్షలను కెర్నల్ లోడింగ్ సమయంలో అమలు చేయబడిన KUnit పరీక్షలుగా కంపైల్-టైమ్ మార్పిడి ద్వారా డాక్యుమెంటేషన్ (డాక్యుమెంటేషన్‌లో ఉదాహరణలుగా ఉపయోగించబడే పరీక్షలు) నుండి పరీక్షలను అమలు చేయగల సామర్థ్యం జోడించబడింది.
  • రస్ట్ కెర్నల్ కోడ్ లాగా పరీక్షలు క్లిప్పి లింటర్ హెచ్చరికకు దారితీయకూడదనే అవసరాలు ఆమోదించబడ్డాయి.
  • నెట్‌వర్క్ ఫంక్షన్‌లతో "నెట్" మాడ్యూల్ యొక్క ప్రారంభ అమలు ప్రతిపాదించబడింది. నేమ్‌స్పేస్ (స్ట్రక్ట్ నెట్ కెర్నల్ స్ట్రక్చర్ ఆధారంగా), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddvaltrV4 వంటి కెర్నల్ నెట్‌వర్క్ స్ట్రక్చర్‌లకు రస్ట్ కోడ్ యాక్సెస్ కలిగి ఉంది. .
  • అసమకాలిక ప్రోగ్రామింగ్ టెక్నిక్‌లకు (అసింక్) ప్రారంభ మద్దతు ఉంది, ఇది kasync మాడ్యూల్ రూపంలో అమలు చేయబడుతుంది. ఉదాహరణకు, మీరు TCP సాకెట్‌లను మార్చేందుకు అసమకాలిక కోడ్‌ను వ్రాయవచ్చు: async fn echo_server(stream: TcpStream) -> ఫలితం {లెట్ mut buf = [0u8; 1024]; లూప్ {లెట్ n = stream.read(&mut buf).వెయిట్?; n == 0 అయితే {రిటర్న్ సరే(()); } stream.write_all(&buf[..n]).వెయిట్?; } }
  • నెట్‌వర్క్ ప్యాకెట్ ఫిల్టర్‌లను మానిప్యులేట్ చేయడానికి నెట్:: ఫిల్టర్ మాడ్యూల్ జోడించబడింది. రస్ట్ భాషలో ఫిల్టర్ అమలుతో ఉదాహరణ rust_netfilter.rs జోడించబడింది.
  • పిన్ చేయడం అవసరం లేని సాధారణ మ్యూటెక్స్ స్ముటెక్స్ ::Mutex అమలు జోడించబడింది.
  • NoWaitLock జోడించబడింది, ఇది లాక్ కోసం ఎప్పుడూ వేచి ఉండదు మరియు మరొక థ్రెడ్ ఆక్రమించబడి ఉంటే, కాలర్‌ను ఆపడానికి బదులుగా లాక్‌ని పొందేందుకు ప్రయత్నిస్తున్నప్పుడు లోపం నివేదించబడుతుంది.
  • నిష్క్రియంగా ఉండని విభాగాలకు వర్తింపజేయడానికి, కెర్నల్‌లో raw_spinlock_t ద్వారా గుర్తించబడిన RawSpinLock జోడించబడింది.
  • రిఫరెన్స్ లెక్కింపు విధానం వర్తించే వస్తువుకు సూచనల కోసం ARef రకం జోడించబడింది (ఎల్లప్పుడూ తిరిగి లెక్కించబడుతుంది).
  • rustc_codegen_gcc బ్యాకెండ్, GCCలో అందుబాటులో ఉన్న ఆర్కిటెక్చర్‌లు మరియు ఆప్టిమైజేషన్‌లకు మద్దతుతో rustcని అందించడానికి GCC ప్రాజెక్ట్ నుండి libgccjit లైబ్రరీని rustcలో కోడ్ జనరేటర్‌గా ఉపయోగించడానికి మిమ్మల్ని అనుమతిస్తుంది, rustc కంపైలర్‌ను బూట్‌స్ట్రాప్ చేసే సామర్థ్యాన్ని అమలు చేసింది. కంపైలర్ ప్రమోషన్ అంటే rustc కంపైలర్‌ను నిర్మించడానికి rustcలో GCC-ఆధారిత కోడ్ జనరేటర్‌ను ఉపయోగించగల సామర్థ్యం. అదనంగా, GCC 12.1 యొక్క ఇటీవలి విడుదల rustc_codegen_gcc సరిగ్గా పని చేయడానికి అవసరమైన libgccjitకు పరిష్కారాలను కలిగి ఉంది. రస్టప్ యుటిలిటీని ఉపయోగించి rustc_codegen_gccని ఇన్‌స్టాల్ చేసే సామర్థ్యాన్ని అందించడానికి సన్నాహాలు జరుగుతున్నాయి.
  • GCC ఆధారిత రస్ట్ లాంగ్వేజ్ కంపైలర్ అమలుతో GCC ఫ్రంటెండ్ gccrs అభివృద్ధిలో పురోగతి గుర్తించబడింది. ప్రస్తుతం gccrsలో ఇద్దరు పూర్తి సమయం డెవలపర్లు పని చేస్తున్నారు.

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

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

మూలం: opennet.ru

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