Linux కెర్నల్ 5.18 C లాంగ్వేజ్ స్టాండర్డ్ C11 వినియోగాన్ని అనుమతించాలని యోచిస్తోంది

లింక్ చేయబడిన జాబితా కోడ్‌లో స్పెక్టర్-సంబంధిత సమస్యలను పరిష్కరించడానికి ప్యాచ్‌ల సమితిని చర్చిస్తున్నప్పుడు, కెర్నల్‌లోకి కొత్త వెర్షన్ ప్రమాణానికి అనుగుణంగా ఉండే C కోడ్‌ను అనుమతించినట్లయితే సమస్య మరింత సునాయాసంగా పరిష్కరించబడుతుందని స్పష్టమైంది. ప్రస్తుతం, జోడించిన కెర్నల్ కోడ్ తప్పనిసరిగా 89లో ఏర్పడిన ANSI C (C1989) స్పెసిఫికేషన్‌కు అనుగుణంగా ఉండాలి.

లూప్ తర్వాత విడిగా నిర్వచించబడిన ఇటరేటర్‌ని నిరంతరం ఉపయోగించడం వల్ల కోడ్‌లో స్పెక్టర్-సంబంధిత సమస్య ఏర్పడింది- లింక్ చేయబడిన లిస్ట్‌లోని ఎలిమెంట్‌లను మళ్ళించడానికి మాక్రో ఉపయోగించబడుతుంది మరియు లూప్ ఇటరేటర్ ఆ మాక్రోలోకి పంపబడినందున, అది లూప్ వెలుపల నిర్వచించబడింది మరియు లూప్ తర్వాత అందుబాటులో ఉంటుంది. C99 ప్రమాణాన్ని ఉపయోగించడం వలన లూప్ వేరియబుల్స్‌ను for() బ్లాక్‌లో నిర్వచించవచ్చు, ఇది పరిష్కారాలతో ముందుకు రాకుండానే సమస్యను పరిష్కరిస్తుంది.

లైనస్ టోర్వాల్డ్స్ కొత్త స్పెసిఫికేషన్‌లకు మద్దతును అమలు చేయాలనే ఆలోచనతో అంగీకరించారు మరియు 5.18లో ప్రచురించబడిన C11 ప్రమాణాన్ని ఉపయోగించడానికి 2011 కెర్నల్‌ను తరలించాలని ప్రతిపాదించారు. ప్రాథమిక పరీక్ష సమయంలో, కొత్త మోడ్‌లోని GCC మరియు క్లాంగ్‌లోని అసెంబ్లీ విచలనాలు లేకుండా ఆమోదించబడింది. మరింత సమగ్రమైన పరీక్ష సమయంలో ఊహించని సమస్యలు తలెత్తకపోతే, 5.18 కెర్నల్ బిల్డ్ స్క్రిప్ట్‌లలోని '--std=gnu89' ఎంపిక '--std=gnu11 -Wno-shift-negative-value'తో భర్తీ చేయబడుతుంది. C17 ప్రమాణాన్ని ఉపయోగించే అవకాశం కూడా పరిగణించబడింది, అయితే ఈ సందర్భంలో GCC యొక్క కనీస మద్దతు ఉన్న సంస్కరణను పెంచడం అవసరం. C11 మద్దతును చేర్చడం GCC వెర్షన్ (5.1) కోసం ప్రస్తుత అవసరాలకు సరిపోతుంది.

మూలం: opennet.ru

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