GCC 10 కంపైలర్ సూట్ విడుదల

ఒక సంవత్సరం అభివృద్ధి తర్వాత ప్రచురించిన కంపైలర్ల ఉచిత సెట్ విడుదల GCC 10.1, కొత్త GCC 10.x శాఖలో మొదటి ప్రధాన విడుదల. అనుగుణంగా కొత్త పథకం విడుదల సంఖ్యలు, వెర్షన్ 10.0 అభివృద్ధి ప్రక్రియలో ఉపయోగించబడింది మరియు GCC 10.1 విడుదలకు కొంతకాలం ముందు, GCC 11.0 శాఖ ఇప్పటికే శాఖలుగా విభజించబడింది, దీని ఆధారంగా తదుపరి ముఖ్యమైన విడుదల, GCC 11.1 ఏర్పడుతుంది.

GCC 10.1 అనేది C++20 ప్రమాణం కోసం అభివృద్ధి చేయబడిన C++ భాషలో అనేక ఆవిష్కరణల అమలు, భవిష్యత్ C లాంగ్వేజ్ స్టాండర్డ్ (C2x)కి సంబంధించిన మెరుగుదలలు, కంపైలర్ బ్యాకెండ్‌లలో కొత్త ఆప్టిమైజేషన్లు మరియు ప్రయోగాత్మక మద్దతు కోసం గుర్తించదగినది. స్టాటిక్ విశ్లేషణ మోడ్. అదనంగా, కొత్త బ్రాంచ్ తయారీ సమయంలో, ప్రాజెక్ట్ రిపోజిటరీని SVN నుండి Gitకి బదిలీ చేసింది.

ప్రధాన మార్పులు:

  • చేర్చబడింది స్థిర విశ్లేషణ యొక్క ప్రయోగాత్మక విధానం "- ఫ్యానలైజర్“, ఇది ప్రోగ్రామ్‌లోని కోడ్ ఎగ్జిక్యూషన్ పాత్‌లు మరియు డేటా ఫ్లోల యొక్క రిసోర్స్-ఇంటెన్సివ్ ఇంటర్‌ప్రొసెడ్యూరల్ విశ్లేషణను నిర్వహిస్తుంది. ఒక మెమరీ ప్రాంతం కోసం ఉచిత() ఫంక్షన్‌కి డబుల్ కాల్‌లు, ఫైల్ డిస్క్రిప్టర్ లీక్‌లు, డిఫరెన్సింగ్ మరియు శూన్య పాయింటర్‌లను పాస్ చేయడం, ఫ్రీడ్ మెమరీ బ్లాక్‌లను యాక్సెస్ చేయడం, ప్రారంభించని విలువలను ఉపయోగించడం వంటి సమస్యలను కంపైలేషన్ దశలో మోడ్ గుర్తించగలదు. OpenSSL కోడ్ కోసం కొత్త మోడ్ యొక్క ఉపయోగం ఇప్పటికే గుర్తించడం సాధ్యం చేసింది ప్రమాదకరమైన దుర్బలత్వం.
  • మెరుగైన ఇంటర్‌ప్రొసీడ్యూరల్ ఆప్టిమైజేషన్‌లు. IPA-SRA (ఇంటర్‌ప్రొసెడ్యూరల్ స్కేలార్ షేర్డ్ రీప్లేస్‌మెంట్) పాస్ బైండ్ సమయంలో పని చేయడానికి పునఃరూపకల్పన చేయబడింది మరియు ఇతర విషయాలతోపాటు, ఇప్పుడు గణించబడిన మరియు ఉపయోగించని విలువలను తీసివేస్తుంది. "-O2" ఆప్టిమైజేషన్ మోడ్‌లో, "-finline-functions" ఎంపిక ప్రారంభించబడింది, ఇది అమలు పనితీరు కంటే మరింత కాంపాక్ట్ కోడ్‌కు అనుకూలంగా రీట్యూన్ చేయబడింది. ఇన్లైన్ ఫంక్షన్ విస్తరణ కోసం హ్యూరిస్టిక్ యొక్క పని వేగవంతం చేయబడింది. ఇన్లైన్ విస్తరణ మరియు ఫంక్షన్ క్లోనింగ్ హ్యూరిస్టిక్స్ ఇప్పుడు వ్యక్తిగత పరివర్తనల ప్రభావాన్ని అంచనా వేయడానికి విలువ పరిధుల గురించి సమాచారాన్ని ఉపయోగించవచ్చు. C++ కోసం, టైప్-బేస్డ్ అలియాస్ పార్సింగ్ యొక్క ఖచ్చితత్వం మెరుగుపరచబడింది.
  • మెరుగైన లింకింగ్ టైమ్ ఆప్టిమైజేషన్‌లు (LTO). కొత్త ఎక్జిక్యూటబుల్ జోడించబడింది డంప్ LTO బైట్‌కోడ్‌తో ఆబ్జెక్ట్ ఫైల్‌ల గురించి సమాచారాన్ని రీసెట్ చేయడానికి. సమాంతర LTO పాస్‌లు స్వయంచాలకంగా ఏకకాలంలో నడుస్తున్న మేక్ టాస్క్‌ల సంఖ్యను నిర్ణయిస్తాయి మరియు వాటిని నిర్ణయించలేకపోతే, CPU కోర్ల సంఖ్య గురించి సమాచారాన్ని సమాంతరీకరణ కారకంగా ఉపయోగిస్తాయి. zstd అల్గారిథమ్‌ని ఉపయోగించి LTO బైట్‌కోడ్‌ను కుదించే సామర్థ్యం జోడించబడింది.
  • కోడ్ ప్రొఫైలింగ్ (PGO - ప్రొఫైల్-గైడెడ్ ఆప్టిమైజేషన్) ఫలితాల ఆధారంగా ఆప్టిమైజేషన్ మెకానిజం మెరుగుపరచబడింది, ఇది కోడ్ అమలు లక్షణాల విశ్లేషణ ఆధారంగా మరింత అనుకూలమైన కోడ్‌ను ఉత్పత్తి చేస్తుంది. సంకలనం మరియు హాట్/కోల్డ్ కోడ్ విభజన సమయంలో మెరుగైన ప్రొఫైల్ నిర్వహణ. ఎంపిక ద్వారా "-fprofile-విలువలు» ఇప్పుడు గరిష్టంగా 4 ప్రొఫైల్ విలువలను పర్యవేక్షించగలదు, ఉదాహరణకు పరోక్ష కాల్‌లు మరియు మరింత ఖచ్చితమైన ప్రొఫైల్ సమాచారాన్ని అందించడం.
  • C, C++ మరియు Fortran భాషలకు సమాంతర ప్రోగ్రామింగ్ స్పెసిఫికేషన్ అమలు చేయబడింది OpenACC 2.6, ఇది GPUలు మరియు NVIDIA PTX వంటి ప్రత్యేక ప్రాసెసర్‌లపై ఆఫ్‌లోడింగ్ ఆపరేషన్ల కోసం సాధనాలను నిర్వచిస్తుంది. ప్రమాణాల అమలు దాదాపు పూర్తయింది MP 5.0ని తెరవండి (ఓపెన్ మల్టీ-ప్రాసెసింగ్), ఇది API మరియు భాగస్వామ్య మెమరీ మరియు వెక్టరైజేషన్ యూనిట్‌లతో (SIMD) మల్టీ-కోర్ మరియు హైబ్రిడ్ (CPU+GPU/DSP) సిస్టమ్‌లపై సమాంతర ప్రోగ్రామింగ్ పద్ధతులను వర్తించే పద్ధతులను నిర్వచిస్తుంది. చివరి ప్రైవేట్ షరతులు, స్కాన్ మరియు లూప్ ఆదేశాలు, ఆర్డర్ మరియు use_device_addr ఎక్స్‌ప్రెషన్‌ల వంటి ఫీచర్‌లు జోడించబడ్డాయి. OpenMP మరియు OpenACC కొరకు, నాల్గవ తరం (ఫిజి) మరియు ఐదవ తరం AMD Radeon (GCN) GPUలు (VEGA 10/VEGA 20)లో ఆఫ్‌లోడింగ్ కార్యకలాపాలకు మద్దతు జోడించబడింది.
  • C కుటుంబానికి చెందిన భాషల కోసం, సూచన లేదా పాయింటర్ ద్వారా పంపబడిన వస్తువులకు ఫంక్షన్ యాక్సెస్‌ను వివరించడానికి మరియు ఆబ్జెక్ట్‌ల పరిమాణం గురించి సమాచారాన్ని కలిగి ఉన్న పూర్ణాంక ఆర్గ్యుమెంట్‌లతో అటువంటి వస్తువులను అనుబంధించడానికి “యాక్సెస్” ఫంక్షన్ జోడించబడింది. “యాక్సెస్”తో కలిసి పని చేయడానికి, వినియోగదారు ఫంక్షన్‌ల నుండి తప్పు యాక్సెస్‌ను గుర్తించడానికి “రకం” లక్షణం అమలు చేయబడుతుంది, ఉదాహరణకు, శ్రేణి సరిహద్దుల వెలుపల ఉన్న ప్రాంతానికి విలువలను వ్రాసేటప్పుడు. నిర్దిష్ట సంస్కరణ సంఖ్యలతో ELF ఫైల్‌లో అనుబంధ చిహ్నాలకు "symver" లక్షణం కూడా జోడించబడింది.
  • కొత్త హెచ్చరికలు జోడించబడ్డాయి:
    • “-Wstring-compare” (“-Wextra”తో ప్రారంభించబడింది) - strcmp మరియు strncmp ఫంక్షన్‌లను కాల్ చేయడం ద్వారా సున్నాని పోల్చిన వ్యక్తీకరణల ఉనికి గురించి హెచ్చరిస్తుంది, ఇది పొడవు కారణంగా స్థిరంగా ఉంటుంది. ఒక ఆర్గ్యుమెంట్ రెండవ ఆర్గ్యుమెంట్‌లోని శ్రేణి పరిమాణం కంటే ఎక్కువగా ఉంటుంది.
    • "-Wzero-length-bounds" ("-Warray-bounds"తో ప్రారంభించబడింది) - సున్నా పొడవు గల శ్రేణి మూలకాలను యాక్సెస్ చేయడం గురించి హెచ్చరిస్తుంది, ఇది ఇతర డేటాను ఓవర్‌రైట్ చేయడానికి దారితీయవచ్చు.
    • "-వార్రే-బౌండ్స్", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" మరియు "-Wstringop-overflow" హెచ్చరికలు సరిహద్దుల వెలుపలి పరిస్థితుల సంఖ్యను విస్తరించడానికి విస్తరించబడ్డాయి. నిర్వహిస్తారు.
  • UCN సంజ్ఞామానం (\uNNNN లేదా \UNNNNNNN) కాకుండా ప్రస్తుత ఎన్‌కోడింగ్ (డిఫాల్ట్‌గా UTF-8) ఉపయోగించి ఐడెంటిఫైయర్‌లలో విస్తృత అక్షరాలను నేరుగా పేర్కొనే సామర్థ్యాన్ని అమలు చేసింది. ఉదాహరణకి:

    స్టాటిక్ కాన్స్ట్ int π = 3;
    int get_naïve_pi() {
    తిరిగి π;
    }

  • C భాష కోసం, C2X ప్రమాణంలో అభివృద్ధి చేయబడిన కొత్త ఫీచర్లలో కొంత భాగం అమలు చేయబడింది (-std=c2x మరియు -std=gnu2xని పేర్కొనడం ద్వారా ప్రారంభించబడింది): “[[]]” సింటాక్స్‌కు మద్దతుగా లక్షణాలను నిర్వచించడానికి కనిపించింది. C++ (ఉదాహరణకు, [[gnu ::const]], [[విస్మరించబడింది]], [[ఫాల్‌త్రూ]] మరియు [[బహుశా_ఉపయోగించబడలేదు]]. UTF-8 అక్షరాలతో స్థిరాంకాలను నిర్వచించడానికి "u8" సింటాక్స్‌కు మద్దతు జోడించబడింది.
    దీనికి కొత్త మాక్రోలు జోడించబడ్డాయి . strftimeకి "%OB" మరియు "%Ob" ప్రత్యామ్నాయాలు జోడించబడ్డాయి.

  • C కోసం డిఫాల్ట్ మోడ్ "-fno-common", ఇది కొన్ని ప్లాట్‌ఫారమ్‌లలో గ్లోబల్ వేరియబుల్స్‌కు మరింత సమర్థవంతమైన యాక్సెస్‌ను అనుమతిస్తుంది.
  • C++ కోసం, సుమారు 16 మార్పులు మరియు ఆవిష్కరణలు అమలు చేయబడ్డాయి, C++20 ప్రమాణంలో అభివృద్ధి చేయబడ్డాయి. జోడించిన కీవర్డ్ “constinit”తో సహా
    మరియు టెంప్లేట్ పొడిగింపులకు మద్దతు అమలు చేయబడింది "భావనలు". కంపైల్ సమయంలో, టెంప్లేట్ పారామీటర్‌లుగా ఆమోదించబడే ఆర్గ్యుమెంట్‌ల సెట్‌ను పరిమితం చేసే టెంప్లేట్ పారామీటర్ అవసరాల సమితిని నిర్వచించడానికి కాన్సెప్ట్‌లు మిమ్మల్ని అనుమతిస్తాయి. టెంప్లేట్‌లో ఉపయోగించిన డేటా రకాల లక్షణాలు మరియు ఇన్‌పుట్ పారామితుల యొక్క డేటా రకం లక్షణాల మధ్య తార్కిక అసమానతలను నివారించడానికి భావనలను ఉపయోగించవచ్చు.

  • G++ constexpr ద్వారా స్థిరమైన వస్తువులను మార్చడం వలన నిర్వచించబడని ప్రవర్తనను అందిస్తుంది. constexprని లెక్కించేటప్పుడు కంపైలర్ ద్వారా మెమరీ వినియోగం తగ్గింది. కొత్త హెచ్చరికలు "-Wmismatched-tags" మరియు "-Wredundant-tags" జోడించబడ్డాయి.
  • కొత్త కమాండ్ లైన్ ఎంపికలు ప్రతిపాదించబడ్డాయి:
    • "-fallocation-dce" అనవసరమైన "కొత్త" మరియు "తొలగించు" ఆపరేటర్లను తీసివేయడానికి.
    • శిక్షణ అమలు లేని కోడ్ కోసం సైజు ఆప్టిమైజేషన్‌ని నిలిపివేయడానికి "-fprofile-partial-training".
    • "-fprofile-ప్రొఫైల్ పునరుత్పత్తి స్థాయిని నియంత్రించడానికి పునరుత్పత్తి.
    • "-fprofile-prefix-path" అనేది ప్రత్యేక ప్రొఫైల్ జనరేషన్ కోసం ఉపయోగించే బేస్ సోర్స్ బిల్డ్ డైరెక్టరీని నిర్వచించడానికి ("-fprofile-generate=profile_dir" మరియు "-fprofile-use=profile_dir" కోసం).
  • పేర్కొన్న ఎంపికల కోసం హెచ్చరిక టెక్స్ట్‌లో, ఈ ఎంపికల కోసం డాక్యుమెంటేషన్‌కు వెళ్లడానికి మిమ్మల్ని అనుమతించే హైపర్‌లింక్‌లు అందించబడ్డాయి. URL ప్రత్యామ్నాయం "-fdiagnostics-urls" ఎంపికను ఉపయోగించి నియంత్రించబడుతుంది.
  • ప్రీప్రాసెసర్ ఆపరేటర్ జోడించబడింది "__హాస్_బిల్టిన్", ఇది అంతర్నిర్మిత ఫంక్షన్ల కోసం తనిఖీ చేయడానికి ఉపయోగించవచ్చు.
  • ISO/IEC TS 18661 స్పెసిఫికేషన్‌లో నిర్వచించబడిన రౌండింగ్ ఫంక్షన్ అమలుతో కొత్త అంతర్నిర్మిత ఫంక్షన్ "__builtin_roundeven" జోడించబడింది, ఇది "రౌండ్" మాదిరిగానే ఉంటుంది, కానీ 0.5 కంటే తక్కువ (పెద్ద విలువకు), 0.5 కంటే తక్కువ భాగం - క్రిందికి (సున్నాకి), మరియు 0.5కి సమానం - చివరి అంకె యొక్క సమానత్వం నుండి ప్రారంభమవుతుంది.
  • AArch64 ఆర్కిటెక్చర్ కోసం, SVE2 పొడిగింపుకు మద్దతు జోడించబడింది మరియు SVE (స్కేలబుల్ వెక్టర్ ఎక్స్‌టెన్షన్) కోసం మద్దతు మెరుగుపరచబడింది, అంతర్నిర్మిత SVE ACLE ఫంక్షన్‌లు మరియు రకాలకు జోడించిన మద్దతు మరియు వెక్టరైజేషన్ వాడకంతో సహా. LSE (లార్జ్ సిస్టమ్ ఎక్స్‌టెన్షన్స్) మరియు TME (లావాదేవీ మెమరీ ఎక్స్‌టెన్షన్) కోసం మద్దతు విస్తరించబడింది. Armv8.5-A మరియు Armv8.6-Aలో ప్రతిపాదించబడిన కొత్త సూచనలు జోడించబడ్డాయి, ఇందులో యాదృచ్ఛిక సంఖ్య ఉత్పత్తి, రౌండింగ్, మెమరీ ట్యాగ్ బైండింగ్,
    bfloat16 మరియు మాతృక గుణకారం. ప్రాసెసర్ మద్దతు జోడించబడింది
    ఆర్మ్ కార్టెక్స్-A77,
    ఆర్మ్ కార్టెక్స్-A76AE,
    ఆర్మ్ కార్టెక్స్-A65,
    ఆర్మ్ కార్టెక్స్-A65AE,
    ఆర్మ్ కార్టెక్స్-A34 మరియు
    మార్వెల్ థండర్X3.

  • ARM32 కోసం ABI FDPIC (64-బిట్ ఫంక్షన్ పాయింటర్లు) కోసం మద్దతు జోడించబడింది. 64-బిట్ పూర్ణాంక కార్యకలాపాల యొక్క పునఃరూపకల్పన మరియు ఆప్టిమైజ్ చేయబడిన ప్రాసెసింగ్. CPU మద్దతు జోడించబడింది
    ఆర్మ్ కార్టెక్స్-A77,
    ఆర్మ్ కార్టెక్స్-A76AE మరియు
    ఆర్మ్ కార్టెక్స్-M35P. 32-బిట్ SIMD, 16-బిట్ మల్టిప్లికేషన్, లాచ్ అర్థమెటిక్ మరియు ఇతర DSP అల్గారిథమ్ ఆప్టిమైజేషన్‌లతో సహా ACLE డేటా ప్రాసెసింగ్ సూచనలకు విస్తరించిన మద్దతు. ACLE CDE (కస్టమ్ డేటాపాత్ ఎక్స్‌టెన్షన్) సూచనలకు ప్రయోగాత్మక మద్దతు జోడించబడింది.

  • GCN మైక్రోఆర్కిటెక్చర్ ఆధారంగా AMD GPUల కోసం బ్యాకెండ్‌లో గణనీయంగా మెరుగుపరచబడిన కోడ్ ఉత్పత్తి మరియు వెక్టరైజేషన్.
  • AVR ఆర్కిటెక్చర్ కోసం XMEGA-వంటి పరికరాలకు మద్దతు జోడించబడింది
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808,ATmega809, ATmega1608 1609, ATmega3208, ATmega3209 4808, ATmega4809 మరియు ATmegaXNUMX.

  • IA-32/x86-64 ఆర్కిటెక్చర్‌ల కోసం కొత్త Intel ENQCMD ఇన్‌స్ట్రక్షన్ సెట్ ఆర్కిటెక్చర్ ఎక్స్‌టెన్షన్ (-menqcmd) జోడించబడింది. Intel Cooperlake (-march=cooperlake, AVX512BF16 ISA పొడిగింపును కలిగి ఉంటుంది) మరియు Tigerlake (-march=tigerlake, MOVDIRI, MOVDIR64B మరియు AVX512VP2INTERSECT ISA పొడిగింపులను కలిగి ఉంటుంది) CPUలకు మద్దతు జోడించబడింది.
  • HSA ఆర్కిటెక్చర్ ఆధారంగా భిన్నమైన కంప్యూటింగ్ సిస్టమ్‌ల కోసం HSAIL (హెటెరోజెనియస్ సిస్టమ్ ఆర్కిటెక్చర్ ఇంటర్మీడియట్ లాంగ్వేజ్) యొక్క అమలు నిలిపివేయబడింది మరియు భవిష్యత్తులో విడుదలలో తీసివేయబడుతుంది.

మూలం: opennet.ru

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