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

ఒక సంవత్సరం అభివృద్ధి తర్వాత, ఉచిత GCC కంపైలర్ సూట్ GCC 15.1 విడుదల చేయబడింది, ఇది కొత్త GCC 15.x బ్రాంచ్‌లో మొదటి ప్రధాన విడుదల. విడుదల నంబరింగ్ పథకం ప్రకారం, అభివృద్ధి సమయంలో వెర్షన్ 15.0 ఉపయోగించబడింది మరియు GCC 15.1 విడుదలకు కొంతకాలం ముందు, GCC 16.0 యొక్క ఒక శాఖ ఇప్పటికే విభజించబడింది, ఇది తదుపరి ప్రధాన విడుదల అయిన GCC 16.1 కి ఆధారం అవుతుంది.

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

  • C ప్రోగ్రామ్‌లను కంపైల్ చేసేటప్పుడు, GNU ఎక్స్‌టెన్షన్‌లతో ("-std=gnu23") C23 ప్రమాణం (మార్పు సారాంశం) డిఫాల్ట్‌గా ఉపయోగించబడుతుంది. గతంలో, C17 ప్రమాణం డిఫాల్ట్‌గా ఉపయోగించబడింది (-std=gnu17). ఈ మార్పు వలన ఇప్పటికే ఉన్న ప్రాజెక్టులను నిర్మించేటప్పుడు nullptr స్థిరాంకం, _BitInt(n) రకం మరియు bool, true మరియు false కీలకపదాలు చేర్చడం వలన సమస్యలు తలెత్తవచ్చు, ఇవి అప్లికేషన్లలో నిర్వచించబడిన సారూప్యంగా పేరు పెట్టబడిన ఐడెంటిఫైయర్‌లతో విభేదించవచ్చు.
  • C23 ప్రమాణం యొక్క క్రింది సామర్థ్యాలు అమలు చేయబడ్డాయి:
    • "#embed" డైరెక్టివ్ బైనరీ వనరులను కోడ్‌లోకి పొందుపరచడానికి రూపొందించబడింది.
    • "అనుబంధం లేని" లక్షణం, ఫలితం అమలు క్రమం మీద ఆధారపడి ఉండదని సూచిస్తుంది.
    • "పునరుత్పత్తి చేయగల" లక్షణం ఫంక్షన్ ఎల్లప్పుడూ ఒకే ఇన్‌పుట్ ఇచ్చిన ఫలితాన్ని తిరిగి ఇస్తుందని సూచిస్తుంది, అంటే ఇది ఇతర అంశాలపై ఆధారపడి ఉండదు.
  • భవిష్యత్ C2Y ప్రమాణం యొక్క అంశాలు అమలు చేయబడ్డాయి (-std=c2y మరియు -std=gnu2y):
    • "if (int x = get ()) {...}" వంటి "if" స్టేట్‌మెంట్‌లో వేరియబుల్స్‌ను ప్రకటించే సామర్థ్యం.
    • కోడ్‌లో వాటిని సూచించడానికి లూప్‌లకు పేరు పెట్టడానికి మద్దతు. బాహ్య: (int i = 0; i < IK; ++ i) కోసం { స్విచ్ (i) { కేసు 1: బ్రేక్; // CONT1 కేస్ 2 కి జంప్స్: బ్రేక్ ఔటర్; // CONT2 కి దూకుతుంది } // CONT1 } // CONT2
    • "కేస్ 1...10:" వంటి కేస్ ఎక్స్‌ప్రెషన్‌లలో పూర్ణాంక విలువల పరిధులను పేర్కొనడానికి మద్దతు.
    • సంక్లిష్ట సంఖ్యలలో ఊహాత్మక భాగాన్ని సూచించడానికి "i" మరియు "j" అనే ప్రత్యయాలు.
    • సంక్లిష్ట సంఖ్యలతో "++" మరియు "—" ఆపరేటర్లను ఉపయోగించే అవకాశం.
    • "_Generic(type, expr1, expr2, …)" అనేది operand రకం ఆధారంగా వ్యక్తీకరణను ఎంచుకోవడానికి నిర్మాణం.
    • నిర్మాణాలు మరియు యూనియన్లు వంటి ఇతర ఆబ్జెక్ట్ రకాల వంటి బైట్ శ్రేణులను యాక్సెస్ చేయడానికి మద్దతు.
    • అసంపూర్ణ శ్రేణులకు (పరిమాణాన్ని పేర్కొనకుండా ప్రకటించబడినవి, "int a[]" వంటివి) "alignof" ఆపరేటర్‌ను వర్తింపజేయడానికి మద్దతు.
    • ఆక్టల్, హెక్సాడెసిమల్ మరియు యూనివర్సల్ క్యారెక్టర్ ఎస్కేప్ సీక్వెన్సుల కోసం కొత్త సింటాక్స్ జోడించబడింది. “\u”, “\x” మరియు “\nnn” లకు బదులుగా, “\u{}”, “\o{}” మరియు “\x{}” అనే శ్రేణులు ప్రతిపాదించబడ్డాయి, దీనిలో ఎన్ని అంకెలనైనా పేర్కొనవచ్చు.
    • అంతర్నిర్మిత ఫంక్షన్లు "__builtin_stdc_rotate_left" మరియు "__builtin_stdc_rotate_right".
    • NULL పాయింటర్లపై సున్నా-పొడవు ఆపరేషన్లు అనుమతించబడతాయి (ఉదా. "sizeof(*p)").
  • C++ భాష కోసం ఫ్రంటెండ్ భవిష్యత్ C++26 ప్రమాణం కోసం అభివృద్ధి చేయబడుతున్న లక్షణాలను అమలు చేస్తుంది:
    • వేరియేషన్ ఆపరేటర్ "ఫ్రెండ్" ("ఫ్రెండ్ Ts...").
    • కంపైల్ సమయంలో ముందుగా కేటాయించిన మెమరీలో ఒక వస్తువును ఉంచడానికి కొత్త ఆపరేటర్ (ప్లేస్‌మెంట్ కొత్తది) యొక్క వైవిధ్యంతో constexpr కీవర్డ్‌ని ఉపయోగించగల సామర్థ్యం.
    • అసంపూర్ణ రకానికి పాయింటర్‌ను తొలగించేటప్పుడు లోపం అవుట్‌పుట్.
    • ముందు కామా లేకుండా ఎలిప్సిస్‌తో వేరియడిక్ పారామితులను నిర్వచించే సింటాక్స్ (ఉదాహరణకు, "void e(int…)" కు బదులుగా "void e(int…)" ని పేర్కొనేటప్పుడు) తీసివేయబడింది.
    • టెంప్లేట్‌లలో పారామీటర్ ప్యాకేజీని ఇండెక్స్ చేయడం.
    • నిర్మాణాత్మక బైండింగ్‌ల కోసం లక్షణాలు;
    • సింటాక్స్ '= తొలగించు("కారణం")';
    • ప్రాథమిక అక్షర సమితిలో "@", "$" మరియు "`" లను చేర్చడం.
    • మాడ్యూళ్ళను ప్రకటించడానికి మాక్రోలను ఉపయోగించడం నిషేధించబడింది.
    • if మరియు switch స్టేట్‌మెంట్‌లలో షరతుగా స్ట్రక్చర్డ్ బైండింగ్‌ను ఉపయోగించగల సామర్థ్యం.
    • డైరెక్ట్ అర్రే పోలికకు మద్దతు (ఉదా. "int arr1[5]; int arr2[5]; bool same = arr1 == arr2") నిలిపివేయబడింది.
    • బైనరీ వనరులను పొందుపరచడానికి "#embed" విధానం.
    • is_trivial టెంప్లేట్ క్లాస్ తీసివేయబడింది.
  • C++23 లక్షణాలు జోడించబడ్డాయి:
    • "ఎగుమతి" డైరెక్టివ్ యొక్క కొన్ని ఉపయోగాలను అనుమతించవద్దు మరియు "ఎగుమతి {}" ఉపయోగాన్ని అనుమతించండి.
    • పరిధులలో పునరావృతమయ్యే లూప్‌ల కోసం తాత్కాలిక వస్తువుల జీవితకాలం పొడిగించడానికి మద్దతు.
  • libstdc++ లైబ్రరీ std మరియు std.compat మాడ్యూళ్ళకు ప్రయోగాత్మక మద్దతును అమలు చేస్తుంది.
  • C మరియు C++ కోడ్‌లలోని యూనియన్‌ల కోసం "{0}" ఇనిషియలైజర్‌ను ఉపయోగించడం వలన అన్ని కంటెంట్‌లు క్లియర్ చేయబడతాయని ఇకపై హామీ ఇవ్వదు, బదులుగా యూనియన్ యొక్క మొదటి ఎలిమెంట్ సున్నా నుండి తీసివేయబడుతుంది. మొత్తం యూనియన్‌ను క్లియర్ చేయడానికి, C23 స్పెసిఫికేషన్‌లో నిర్వచించిన "{}" వ్యక్తీకరణను ఉపయోగించండి లేదా పాత ప్రవర్తనను పునరుద్ధరించడానికి "-fzero-init-padding-bits=unions" ఎంపికను పేర్కొనండి.
  • హామీ ఇవ్వబడిన టెయిల్ కాల్స్ కోసం "musttail" లక్షణానికి ([[gnu::musttail]] మరియు [[clang::musttail]]) మద్దతు అమలు చేయబడింది. ఈ లక్షణం ప్రస్తుత ఫంక్షన్‌కు రికర్సివ్ కాల్ చేసే రిటర్న్ స్టేట్‌మెంట్‌లకు వర్తిస్తుంది మరియు అటువంటి కాల్ టెయిల్ రికర్షన్‌ను ఉపయోగిస్తుందని నిర్ధారిస్తుంది, ఇది స్టాక్‌పై అదనపు మెమరీని కేటాయించదు (చాలా పెద్ద సంఖ్యలో కాల్‌లతో మెమరీ అయిపోయే ప్రమాదాన్ని తొలగిస్తుంది).
  • కంటెంట్‌లు బిట్‌వైజ్ ఆపరేషన్‌లలో ఉపయోగించబడుతున్నాయని సూచించడానికి గణనలకు వర్తింపజేయబడిన flag_enum లక్షణానికి ([[gnu::flag_enum]] మరియు [[clang::flag_enum]]) అమలు చేయబడిన మద్దతు (-Wswitch మోడ్‌లో హెచ్చరికలను నిరోధిస్తుంది).
  • "counted_by" లక్షణానికి మద్దతు జోడించబడింది, ఇది మూలకాల సంఖ్యను నిర్ణయించే సౌకర్యవంతమైన శ్రేణితో నిర్మాణంలో ఫీల్డ్‌ను పేర్కొనడానికి ఉపయోగించబడుతుంది. బఫర్ ఓవర్‌ఫ్లో తనిఖీల సామర్థ్యాన్ని మెరుగుపరచడానికి ఈ లక్షణాన్ని ఉపయోగించవచ్చు.
  • ఫంక్షన్లకు "nonnull_if_nonzero" లక్షణాన్ని జోడించారు, ఇది పాయింటర్లతో కూడిన కొన్ని ఫంక్షన్ పారామితులు మరొక పరామితి సున్నా అయితేనే NULL కాగలవని పేర్కొంటుంది.
  • ఎక్స్‌టెండెడ్ అసెంబ్లర్ ఇన్‌లైనింగ్ "asm(….)" వెలుపలి ఫంక్షన్‌లు అనుమతించబడతాయి. అసెంబ్లర్ ఇన్సర్ట్‌లలో, స్టాక్ యొక్క రెడ్ జోన్‌లో (స్టాక్ పైభాగంలో ఉన్న ప్రాంతం) మెమరీని ఓవర్‌రైట్ చేయడానికి ఇది అనుమతించబడుతుంది.
  • మెరుగైన టెంప్లేట్ హ్యాషింగ్ కారణంగా C++ కోడ్ కంపైలేషన్ వేగంగా జరుగుతుంది.
  • కొత్త ఆప్టిమైజేషన్‌లు జోడించబడ్డాయి. ముందస్తు నిష్క్రమణ కోసం కోడ్‌ను కలిగి ఉన్న లూప్‌లను వెక్టరైజ్ చేయడానికి మద్దతు అమలు చేయబడింది (ఉదాహరణకు, బ్రేక్ లేదా రిటర్న్ కాల్ ద్వారా), అటువంటి లూప్‌లు కంపైల్ సమయంలో పరిమాణం తెలియని డైనమిక్‌గా కేటాయించబడిన శ్రేణులను లేదా బఫర్‌లను మార్చినప్పటికీ. -O2 ఎంపికను పేర్కొన్నప్పుడు, ట్రిప్‌కౌంట్ సమాచారం అందుబాటులో లేని కొన్ని సులభంగా వెక్టరైజబుల్ లూప్‌ల వెక్టరైజేషన్ ప్రారంభించబడుతుంది.
  • లింకింగ్ దశలో ఇంక్రిమెంటల్ ఆప్టిమైజేషన్ మోడ్ (LTO, లింక్-టైమ్ ఆప్టిమైజేషన్) జోడించబడింది, ఇది కోడ్‌లో చిన్న మార్పులు చేయబడిన సందర్భాలలో (ఒక ఫంక్షన్ సవరించబడింది) LTOని ఉపయోగిస్తున్నప్పుడు రీకంపైలేషన్ సమయాన్ని గణనీయంగా తగ్గిస్తుంది. ఇంక్రిమెంటల్ మోడ్‌ను ప్రారంభించడానికి, "-flto-incremental" ఎంపిక ప్రతిపాదించబడింది.
  • చాలా పెద్ద ఇన్‌పుట్ ఫైళ్ల మెరుగైన సంకలనం. 4096 కంటే ఎక్కువ కాలమ్ సంఖ్యల ట్రాకింగ్ అమలు చేయబడింది. చాలా పెద్ద ఫైళ్లలో లోపాలు మరియు హెచ్చరికల స్థానాన్ని సూచించడంలో మెరుగైన ఖచ్చితత్వం.
  • సమస్యలను నిర్ధారించేటప్పుడు నివేదికల దృశ్యమానతను మెరుగుపరచడం. ఉదాహరణకు, సమస్య యొక్క స్థానం “⚠️” గుర్తుతో హైలైట్ చేయబడింది, C++ టెంప్లేట్‌లలో లోపాల కోసం అవుట్‌పుట్ యొక్క లేఅవుట్ మార్చబడింది, C23 ప్రమాణానికి పరివర్తనను సులభతరం చేయడానికి సూచనలు జోడించబడ్డాయి మరియు రంగు పథకం పునఃరూపకల్పన చేయబడింది. Sarif ఫార్మాట్‌లో డయాగ్నస్టిక్‌లను అవుట్‌పుట్ చేసే సామర్థ్యాన్ని జోడించారు (-fdiagnostics-format=sarif-file).
  • libgdiagnostics లైబ్రరీ అమలు చేయబడింది, ఇది మీ ప్రాజెక్టులలో డయాగ్నస్టిక్ సందేశాల రూపకల్పనకు సంబంధించిన GCC సామర్థ్యాలను ఏకీకృతం చేయడానికి మిమ్మల్ని అనుమతిస్తుంది (ఉదాహరణకు, మీరు కోటింగ్, హైలైటింగ్ మరియు దిద్దుబాటు సూచనలను ఉపయోగించవచ్చు).
  • లైన్ల చివర అవశేష వైట్‌స్పేస్‌ను మరియు లైన్ల ప్రారంభంలో అదనపు వైట్‌స్పేస్‌ను గుర్తించడానికి "-Wtrailing-whitespace" మరియు "-Wleading-whitespace" హెచ్చరికలు జోడించబడ్డాయి.
  • హెడర్ ఫైల్‌ను మళ్ళీ చేర్చకుండా నిరోధించే హెడర్ గార్డ్ మాక్రోలలో సమస్యలను నివేదించడానికి "-Wheader-guard" హెచ్చరిక జోడించబడింది.
  • D భాష కోసం ఫ్రంటెండ్ వెర్షన్ 2.111.0 కు నవీకరించబడింది.
  • ఫోర్ట్రాన్ ఫ్రంటెండ్‌కు సంతకం చేయని పూర్ణాంకాలకు మద్దతు జోడించబడింది.
  • ఈ ప్యాకేజీలో COBOL భాష కోసం కంపైలర్ ఉంది, gcobol, ఇది x86-64 మరియు AArch64 ప్లాట్‌ఫామ్‌లకు మద్దతు ఇస్తుంది మరియు 32-బిట్ సిస్టమ్‌లలో ఉపయోగించడానికి రూపొందించబడలేదు. కంపైలర్ ISO/IEC 1989:2023 స్పెసిఫికేషన్‌ను అమలు చేస్తుంది మరియు చాలా NIST CCVS/85 పరీక్షలలో ఉత్తీర్ణత సాధిస్తుంది.
  • షేర్డ్ మెమరీ మరియు వెక్టరైజేషన్ యూనిట్లు (SIMD) కలిగిన మల్టీ-కోర్ మరియు హైబ్రిడ్ (CPU+GPU/DSP) సిస్టమ్‌లపై సమాంతర ప్రోగ్రామింగ్ పద్ధతులను వర్తింపజేయడానికి API మరియు పద్ధతులను నిర్వచించే OpenMP 5.0, 5.1, 5.2 మరియు 6.0 (ఓపెన్ మల్టీ-ప్రాసెసింగ్) ప్రమాణాల అమలు కొనసాగించబడింది. మెటాడైరెక్టివ్‌లు మరియు టైల్, అన్‌రోల్, ఇంటర్‌ఆప్ మరియు డిస్పాచ్ కన్‌స్ట్రక్ట్‌లకు మద్దతు జోడించబడింది. కొన్ని AMD మరియు NVIDIA GPUల కొరకు, యూనిఫైడ్ షేర్డ్ మెమరీకి మద్దతు జోడించబడింది ("requires" డైరెక్టివ్‌లో unified_shared_memory ని పేర్కొనడం ద్వారా ప్రారంభించబడింది). "self_maps" వ్యక్తీకరణకు మద్దతు జోడించబడింది.
  • AArch64 ఆర్కిటెక్చర్ యొక్క బ్యాకెండ్ MinGW ప్లాట్‌ఫారమ్ (aarch64-w64-mingw32) కు మద్దతు ఇవ్వడానికి నవీకరించబడింది. 20 కంటే ఎక్కువ ARM8 ఎక్స్‌టెన్షన్‌లు అమలు చేయబడ్డాయి మరియు ACLE (ఆర్మ్ C లాంగ్వేజ్ ఎక్స్‌టెన్షన్స్) ఎక్స్‌టెన్షన్‌కు మద్దతు మెరుగుపరచబడింది. కోడ్ జనరేటర్‌కు అనేక మెరుగుదలలు చేయబడ్డాయి. CPU మద్దతు జోడించబడింది:
    • ఆపిల్ A12 (ఆపిల్-a12)
    • ఆపిల్ M1 (ఆపిల్-m1)
    • ఆపిల్ M2 (ఆపిల్-m2)
    • ఆపిల్ M3 (ఆపిల్-m3)
    • ఆర్మ్ కార్టెక్స్-A520AE (కార్టెక్స్-a520ae)
    • ఆర్మ్ కార్టెక్స్-A720AE (కార్టెక్స్-a720ae)
    • ఆర్మ్ కార్టెక్స్-A725 (కార్టెక్స్-a725)
    • ఆర్మ్ కార్టెక్స్-R82AE (కార్టెక్స్-r82ae)
    • ఆర్మ్ కార్టెక్స్-X925 (కార్టెక్స్-x925)
    • ఆర్మ్ నియోవర్స్ N3 (నియోవర్స్-n3)
    • ఆర్మ్ నియోవర్స్ V3 (నియోవర్స్-v3)
    • ఆర్మ్ నియోవర్స్ V3AE (నియోవర్స్-v3ae)
    • ఫుజిట్సు-మొనకా (ఫుజిట్సు-మొనకా)
    • NVIDIA గ్రేస్
    • NVIDIA ఒలింపస్ (ఒలింపస్)
    • క్వాల్కమ్ ఓరియన్-1 (ఓరియన్-1)
  • libstdc++ లైబ్రరీకి మద్దతు ఇవ్వడానికి AMD Radeon GPU (GCN) కోడ్ జనరేషన్ బ్యాకెండ్ నవీకరించబడింది మరియు gfx9-generic, gfx10-3-generic, మరియు gfx11-generic పరికర శ్రేణికి ప్రయోగాత్మక కోడ్ జనరేషన్ మద్దతు జోడించబడింది.
  • x86 బ్యాకెండ్ ఇప్పుడు ఇంటెల్ ఇన్‌స్ట్రక్షన్ సెట్ ఆర్కిటెక్చర్ ఎక్స్‌టెన్షన్‌లకు AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS లకు మద్దతు ఇస్తుంది. ఇంటెల్ డైమండ్ రాపిడ్స్ మరియు జియాన్ ఫై CPU లకు మద్దతు జోడించబడింది.
  • LoongArch మరియు AVR ప్లాట్‌ఫారమ్‌ల కోసం విస్తరించిన బ్యాకెండ్ సామర్థ్యాలు.
  • Nios II ప్రాసెసర్లలో ఉపయోగించే nios2 టార్గెట్ ఆర్కిటెక్చర్‌కు మద్దతు తీసివేయబడింది. AArch32 పోర్ట్‌లో ILP32 ABI (-mabi=ilp64) కి మద్దతు నిలిపివేయబడింది మరియు తదుపరి ప్రధాన విడుదలలో తీసివేయబడుతుంది.

మూలం: opennet.ru

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