LLVM 22 компиляторлар жинағының шығарылымы

Алты айлық әзірлеуден кейін LLVM 22.1.0 шығарылды. Ол бағдарламаларды RISC тәрізді виртуалды нұсқаулардың аралық биткодына (көп деңгейлі оңтайландыру жүйесі бар төмен деңгейлі виртуалды машина) компиляциялайтын құралдарды (компиляторлар, оңтайландырғыштар және код генераторлары) әзірлейді. Жасалған псевдокод берілген мақсатты платформа үшін машиналық кодқа түрлендірілуі немесе бағдарламаны орындау кезінде машиналық нұсқауларды тікелей жасау үшін уақытында (JIT) компилятор арқылы пайдаланылуы мүмкін. LLVM технологияларына негізделген жоба C, C++ және Objective-C бағдарламалау тілдерін қолдайтын Clang компиляторын әзірлеуде. 18.x тармағынан бастап, жоба жаңа нұсқа нөмірлеу схемасына көшті, оған сәйкес әзірлеу кезінде 0 шығарылымы («N.0») қолданылады, ал бірінші тұрақты нұсқа «N.1» нөмірленеді.

Clang 22 жақсартуларының арасында:

  • malloc сияқты функцияларды пайдаланып орындалатын жад бөлу операцияларын бірегей идентификатормен белгілеуге арналған жад бөлу токендерін (Allocation Tokens) қолдау қосылды. Бөлу токендері үйінді ақпаратын құрылымдауға, жадтың ағып кетуін анықтауды жеңілдетуге және нысандарды олардың мақсатына немесе өзгерту үлгілеріне негізделген топтастыруға мүмкіндік береді (мысалы, «ыстық» деректерді «суық» деректерден бөлу). Қосу үшін «-fsanitize=alloc-token» жалаушасын пайдаланыңыз.
  • Си тіліне қатысты ерекшеліктер:
    • Ағымдағы ауқымнан шыққан кезде әрекеттерді орындауға мүмкіндік беретін «кейінге қалдыру» кейінге қалдырылған орындау механизмін анықтайтын жоба сипаттамасы енгізілді. «Кейінге қалдыру» қолдауын қосу үшін «-fdefer-ts» жалаушасы қосылды.
    • GCC-дегі ұқсас функцияны көрсететін __builtin_stack_address() кірістірілген функциясы қосылды. Бұл функция __builtin_stack_address() деп аталатын ағымдағы функцияның және ол шақыратын кейінгі функциялардың стек аймағын бөлетін стек мекенжайын қайтарады.
  • Болашақ C2y стандарты үшін әзірленетін мүмкіндіктер:
    • Аталған циклдарға қолдау қосылды, ол циклдарға атаулар беруге және циклден шығу үшін break және continue операторларында көрсетілуі мүмкін switch операторларына мүмкіндік береді. outer: 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 шақыру шегі орнатылды; бұл шектен асып кету қате тудырады.
    • «extern inline» деп жарияланған функциялардың ішінде статикалық функцияларды немесе айнымалыларды пайдаланған кезде ескерту (-Wstatic-in-line) жойылды.
  • C23 C стандартында анықталған мүмкіндіктер:
    • float.h тақырып файлы енді FLT_SNAN, DBL_SNAN және LDBL_SNAN макростарын қолдайды, олар float, double және long double түрлері үшін сигналдық (арифметикалық амалдарда қолданылған кезде ерекшелік тудыратын) NaN мәндерін жүзеге асырады.
    • Әртүрлі атаусыз түрлердің бірдей өрістері болса, бір аударма бірлігінде үйлесімді деп қарастырылатын қате түзетілді.
    • Тәуелділікті сканерлеу кезінде жоқ тақырып файлдарын елемеу үшін қолданылатын "-MG" жалаушасы "#embed" директиваларына кеңейтілді және енді "#embed" директивасында көрсетілген файл жоқ болған кезде "файл табылмады" қатесін жояды.
  • C++ қатысты мүмкіндіктер:
    • C++2c (C++26) спецификациясында әзірленгендей, "constexpr" контекстінде құрылымдық байланыстыруларды пайдалану мүмкіндігі қосылды. Бұл тұрақты өрнектерге сілтемелер енді тұрақты өрнектер бола алатынын білдіреді. Қолдау массивтер мен қарапайым құрылымдар үшін жүзеге асырылады (кортеждер әлі қолдау таппайды). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • C++20 стандартының талабына сәйкес, шектеулер енді тексерілмес бұрын стандартты формаға түрлендіріледі, бұл диагностикалық хабарламаларды дәлірек етуге және тек concept-id-лерде қолданылатын үлгі аргументтеріндегі ауыстыру қателерін дұрыс өңдеуге мүмкіндік береді.
    • "<", ">", "<=" және ">=" салыстыру операторларының "<=>" операторынан синтезделгенін білу үшін "__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" жалаушасы қосылды. Оны жалпы сипаттамалар үшін "basic" (мысалы, "Бүтін сан қосу асып кетті") және егжей-тегжейлі ақпаратты қосу үшін "detailed" (мысалы, "'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 атрибутына ұқсас "malloc_span" атрибуты бар, бірақ блоктың соңына өлшемі немесе көрсеткіші бар көрсеткіш пен өрісті қамтитын аралық тәрізді құрылымдарды қайтаратын функцияларға қолданылады.
  • Байланыс уақытында printf функциясының қажетті статикалық байланыстырылған іске асырылуын динамикалық түрде таңдау үшін "modular_format" атрибуты қосылды.
  • Диагностикалық және статикалық талдау құралдары кеңейтілді, жаңа тексерулер қосылды (диагностикалық тұрғыдан бірнеше ондаған жақсартулар).
  • X86 серверіне SSE, AVX және AVX512 кеңейтімдеріне арналған қосымша ішкі элементтер қосылды. Wildcat Lake (-march=wildcatlake) және Nova Lake (-march=novalake) микроархитектураларына негізделген Intel процессорлары үшін құрастыру режимдері қосылды.
  • AArch64 сервері енді Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) және Arm C1-Ultra (c1-ultra) процессорларын қолдайды. FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] және FCVTA[US] нұсқаулары үшін қосымша кіріктірілген функциялар қосылды. Функцияның көп нұсқалылығын (FMV) қолдау тұрақтандырылды. Пайдаланушылар енді әртүрлі функция нұсқаларының басымдығын өзгерте алады.
  • LoongArch32 (LA32R, LA32S) архитектурасына қолдау қосылды.
  • ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly және PowerPC архитектуралары үшін жақсартылған серверлік интерфейстер.

Ақпарат көзі: opennet.ru

DDoS қорғауы бар сайттар үшін сенімді хостинг, VPS VDS серверлерін сатып алыңыз 🔥 DDoS қорғанысы, VPS VDS серверлері бар сенімді веб-сайт хостингін сатып алыңыз | ProHoster