د شپږو میاشتو پراختیا وروسته، LLVM 22.1.0 خپور شو. دا وسایل (کمپیلرونه، اصلاح کونکي، او کوډ جنراتورونه) رامینځته کوي چې پروګرامونه د RISC په څیر مجازی لارښوونو (د څو کچې اصلاح کولو سیسټم سره د ټیټې کچې مجازی ماشین) په منځګړیتوب بټ کوډ کې راټولوي. تولید شوی سیډوکوډ د ورکړل شوي هدف پلیټ فارم لپاره د ماشین کوډ ته بدلیدلی شي یا د Just-in-Time (JIT) کمپیلر لخوا کارول کیدی شي ترڅو د پروګرام اجرا کولو پرمهال مستقیم د ماشین لارښوونې رامینځته کړي. د LLVM ټیکنالوژیو پراساس، پروژه د کلینګ کمپیلر رامینځته کوي، چې د C، C++، او Objective-C پروګرام کولو ژبو ملاتړ کوي. د 18.x څانګې سره پیل کولو سره، پروژه د نوي نسخې شمیرې سکیم ته بدله شوه، چې له مخې یې د پراختیا پرمهال د خپریدو 0 ("N.0") کارول کیږي، او لومړی مستحکم نسخه "N.1" شمیره شوې ده.
په کلینګ 22 کې پرمختګونه شامل دي:
- د حافظې تخصیص ټوکنونو (تخصیص ټوکنونو) لپاره اضافه شوی ملاتړ د حافظې تخصیص عملیات د نښه کولو لپاره چې د یو ځانګړي پیژندونکي سره د malloc په څیر دندو په کارولو سره ترسره کیږي. د تخصیص ټوکنونه د هپ معلوماتو جوړښت، د حافظې لیک کشف ساده کولو، او د دوی د هدف یا تعدیل نمونو پراساس د شیانو ګروپ کولو فعالولو ته اجازه ورکوي (د مثال په توګه، "ګرم" د "سړه" معلوماتو څخه جلا کول). د فعالولو لپاره، د "-fsanitize=alloc-token" بیرغ وکاروئ.
- د سي ژبې پورې اړوند ځانګړتیاوې:
- د "ځنډولو" ځنډول شوي اجرا میکانیزم تعریف کولو لپاره یوه مسوده مشخصات پلي شوي، چې د اوسني ساحې څخه د وتلو پرمهال د عملونو اجرا کولو ته اجازه ورکوي. د "-fdefer-ts" بیرغ د "ځنډولو" ملاتړ فعالولو لپاره اضافه شوی.
- جوړ شوی فعالیت __builtin_stack_address() اضافه شوی، چې په GCC کې ورته فعالیت منعکس کوي. دا فعالیت د سټیک پته بیرته راګرځوي چې د اوسني فعالیت د سټیک ساحه جلا کوي چې __builtin_stack_address() نومیږي او وروسته هغه فعالیتونه چې دا یې بولي.
- د راتلونکي C2y معیار لپاره د پراختیا وړ وړتیاوې:
- د نومول شویو لوپونو لپاره اضافه شوی ملاتړ، کوم چې تاسو ته اجازه درکوي چې لوپونو ته نومونه وټاکئ او بیانونه بدل کړئ، کوم چې په بریک او کنټینیو بیانونو کې مشخص کیدی شي ترڅو هغه لوپ په واضح ډول تعریف کړي چې له هغه څخه وتل کیږي. بهرنۍ: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // go to CONT1 continue outer; // go to CONT2 // CONT1 } // CONT2 }
- د جوړ شوي "__COUNTER__" میکرو پلي کول، چې د ځانګړي پیژندونکي نومونو د تولید لپاره ډیزاین شوي، پراخ شوي او په معیار کې شامل شوي دي. دې میکرو ته د 2147483647 زنګونو حد ټاکل شوی دی؛ د دې حد څخه تیریدل به یوه تېروتنه رامینځته کړي.
- د "بهرني انلاین" په توګه اعلان شوي دندو دننه د جامد دندو یا متغیرونو کارولو پر مهال خبرداری (-Wstatic-in-line) لرې شوی.
- هغه وړتیاوې چې د C23 C معیار کې تعریف شوي دي:
- د float.h سرلیک فایل اوس د FLT_SNAN، DBL_SNAN، او LDBL_SNAN میکرو ملاتړ کوي، کوم چې د فلوټ، ډبل، او اوږد ډبل ډولونو لپاره سیګنال شوي (کله چې په ریاضي عملیاتو کې کارول کیږي استثنا رامینځته کوي) NaN ارزښتونه پلي کوي.
- هغه ستونزه حل کړه چې پکې مختلف بې نومه ډولونه د ورته ژباړې واحد کې د مطابقت وړ ګڼل کېدل که چیرې دوی ورته ساحې ولري.
- د "-MG" بیرغ چې د انحصاري سکین کولو پرمهال د ورک شوي سرلیک فایلونو له پامه غورځولو لپاره کارول کیده د "#embed" لارښوونو ته غځول شوی او اوس د "#embed" لارښود کې مشخص شوی فایل ورکیدو په وخت کې د "فایل نه موندل شوی" تېروتنه بندوي.
- د C++ اړوند ځانګړتیاوې:
- د "constexpr" په شرایطو کې د جوړښتي تړلو کارولو وړتیا، لکه څنګه چې په C++2c (C++26) مشخصاتو کې رامینځته شوې، اضافه شوې ده. دا پدې مانا ده چې د ثابتو څرګندونو حوالې اوس پخپله ثابتې څرګندونې کیدی شي. ملاتړ د صفونو او ساده جوړښتونو لپاره پلي کیږي (ټوپلونه لاهم ملاتړ شوي ندي). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- لکه څنګه چې د C++20 معیار له مخې اړتیا ده، محدودیتونه اوس د چک کولو دمخه معیاري بڼه ته بدلیږي، چې د ډیرو دقیق تشخیصي پیغامونو او د ټیمپلیټ دلیلونو کې د بدیل غلطیو سم اداره کولو ته اجازه ورکوي چې یوازې په مفهوم-ایډونو کې کارول کیږي.
- د جوړو شویو دندو یوه کورنۍ اضافه کړه "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" ترڅو معلومه کړي چې ایا د پرتله کولو چلونکي "<", ">", "<=", او ">=" د "<=>" چلونکي څخه ترکیب شوي دي.
- د "-Wincompatible-pointer-types" پیرامیټر د خبرتیا پرځای د غلطۍ ښودلو لپاره بدل شوی دی. د پخواني چلند ته د بیرته راستنیدو لپاره، د "-Wno-error=incompatible-pointer-types" اختیار وکاروئ.
- اضافه شوي جوړ شوي فعالیتونه __builtin_bswapg، __builtin_elementwise_ldexp، __builtin_elementwise_fshl، __builtin_elementwise_fshr، __builtin_elementwise_minnumnum، __builtin_elementwise_maxnumnum، __builtin_masked_load، __builtin_masked_expand_load، __builtin_masked_store، __builtin_masked_compress_store، __builtin_masked_gather، __builtin_masked_scatter، او __builtin_dedup_pack. د مثال په توګه، builtin_dedup_pack تاسو ته اجازه درکوي چې د ډولونو لیست څخه نقلونه لرې کړئ: د MyTypeList = TypeList<__builtin_dedup_pack کارول …>؛ // پایله لرونکی ډول به د TypeList وي
- کله چې د UBSan (-fsanitize=undefined -fsanitize-trap=undefined) سره د نا تعریف شوي چلند ډیبګ کول، د غلطۍ لامل معلومات اوس د تولید شوي ډیبګ معلوماتو کې شامل دي. د "-fsanitize-debug-trap-reasons" بیرغ د غلطۍ معلوماتو کې د توضیحاتو کچه مشخص کولو لپاره اضافه شوی. دا د عمومي توضیحاتو لپاره "بنسټیز" ته تنظیم کیدی شي (د مثال په توګه، "د بشپړتیا اضافه کول ډیر شوي") او "تفصیل" د تفصيلي معلوماتو شاملولو لپاره (د مثال په توګه، "په 'a + b' کې لاسلیک شوی بشپړتیا اضافه کول ډیر شوي").
- نوي کمپیلر بیرغونه اضافه کړل:
- "-f[no-]sanitize-debug-trap-reasons" د دې کنټرول لپاره چې ایا د استثنایی جال دلیلونه د ډیبګ معلوماتو کې ځای پرځای شوي دي کله چې د "-fsanitize-trap" حالت سره تالیف کوئ.
- "-fsanitize=alloc-token"، "-falloc-token-max"، "-fsanitize-alloc-token-fast-abi"، او "-fsanitize-alloc-token-extended" د حافظې تخصیص ټوکنونو اداره کولو لپاره.
- "-fmatrix-memory-layout" د میټریکس ډولونو د حافظې ترتیب کنټرولولو لپاره (د مثال په توګه، د کالم-میجر لپاره کالم-میجر، د قطار-میجر لپاره قطار-میجر).
- اوس فنکشنونه د "malloc_span" ځانګړتیا لري، د malloc ځانګړتیا سره ورته مګر د هغو فنکشنونو لپاره پلي کیږي چې د سپان په څیر جوړښتونه بیرته راولي چې یو پوائنټر او ساحه لري چې د بلاک پای ته اندازه یا پوائنټر لري.
- د "modular_format" ځانګړتیا اضافه شوه ترڅو د لینک په وخت کې د printf فعالیت اړین جامد لینک شوي پلي کول په متحرک ډول غوره کړي.
- د تشخیص او جامد تحلیل وسایل پراخ شوي، نوي چکونه اضافه شوي (د تشخیص پورې اړوند څو درجن پرمختګونه).
- د SSE، AVX، او AVX512 توسیعونو لپاره اضافي داخلي برخې د X86 بیک اینډ ته اضافه شوي دي. د انټل CPUs لپاره د وائلډ کیټ لیک (-مارچ = وائلډ کیټلیک) او نووا لیک (-مارچ = نووالیک) مایکرو معمارۍ پراساس د جوړونې حالتونه اضافه شوي دي.
- د AArch64 بیک اینډ اوس د امپیر کمپیوټینګ امپیر1C (امپیر1c)، آرم C1-نانو (c1-نانو)، آرم C1-پرو (c1-پرو)، آرم C1-پریمیم (c1-پریمیم)، او آرم C1-الټرا (c1-الټرا) پروسیسرونو ملاتړ کوي. د FCVTZ[US]، FCVTN[US]، FCVTM[US]، FCVTP[US]، او FCVTA[US] لارښوونو لپاره اضافي جوړ شوي فعالیتونه اضافه شوي دي. د فنکشن ملټي-ورژنینګ (FMV) ملاتړ ثبات شوی دی. کاروونکي اوس کولی شي د مختلف فنکشن نسخو لومړیتوب له سره تنظیم کړي.
- د LoongArch32 (LA32R, LA32S) معمارۍ لپاره اضافه شوی ملاتړ.
- د ARM، AMDGPU، RISC-V، LoongArch64، MIPS، WebAssembly، او PowerPC معمارۍ لپاره ښه شوي بیک اینډونه.
سرچینه: opennet.ru
