Нашри маҷмӯи компилятори LLVM 9.0

Пас аз шаш моҳи рушд пешниҳод карда мешавад нашри лоиҳа LLVM 9.0 — Асбобҳои ба GCC мувофиқ (компиляторҳо, оптимизаторҳо ва генераторҳои код), тартиб додани барномаҳо ба биткоди фосилавии дастурҳои виртуалии ба RISC монанд (мошини виртуалии сатҳи паст бо системаи оптимизатсияи бисёрсатҳа). Псевдокоди тавлидшуда метавонад бо истифода аз компилятори JIT ба дастурҳои мошин бевосита дар вақти иҷрои барнома табдил дода шавад.

Хусусиятҳои нави LLVM 9.0 аз хориҷ кардани теги тарроҳии таҷрибавӣ аз платформаи ҳадафноки RISC-V, дастгирии C++ барои OpenCL, қобилияти тақсим кардани барнома ба қисмҳои динамикӣ боршуда дар LLD ва татбиқи "асм рафт", дар рамзи ядрои Linux истифода мешавад. libc++ дастгирии WASI (Интерфейси системаи WebAssembly) ва LLD дастгирии ибтидоиро барои пайвасти динамикии WebAssembly илова кард.

Беҳбудиҳо дар Clang 9.0:

  • Илова карда шуд татбиқи ифодаи мушаххаси GCC "асм рафт", ки ба шумо имкон медиҳад, ки аз блоки дохилии ассемблер ба нишони рамзи C гузаред. Ин хусусият барои сохтани ядрои Linux дар реҷаи "CONFIG_JUMP_LABEL=y" бо истифода аз Clang дар системаҳои меъмории x86_64 лозим аст. Бо дарназардошти тағиротҳои дар версияҳои қаблӣ иловашуда, ядрои Linux-ро акнун метавон дар Clang барои меъмории x86_64 сохтан мумкин аст (қаблан танҳо сохтмон барои arm, aarch64, ppc32, ppc64le ва меъмории mips дастгирӣ мешуд). Гузашта аз ин, лоиҳаҳои Android ва ChromeOS аллакай ба истифодаи Clang барои сохтани ядро ​​табдил дода шудаанд ва Google Clang-ро ҳамчун платформаи асосии сохтани ядроҳо барои системаҳои истеҳсолии Linux озмоиш мекунад. Дар оянда ҷузъҳои дигари LLVM метавонанд дар раванди сохтани ядро ​​истифода шаванд, аз ҷумла LLD, llvm-objcopy, llvm-ar, llvm-nm ва llvm-objdump;
  • Дастгирии таҷрибавӣ барои истифодаи C++17 дар OpenCL илова карда шуд. Хусусиятҳои мушаххас дастгирии атрибутҳои фазои суроғаҳо, бастани табдили фазои суроғаҳо аз ҷониби операторҳои навъи кастинг, пешниҳоди намудҳои векторӣ ба монанди дар OpenCL барои C, мавҷудияти намудҳои мушаххаси OpenCL барои тасвирҳо, рӯйдодҳо, каналҳо ва ғайра иборатанд.
  • Илова кардани парчамҳои нави компилятор “-ftime-trace” ва “-ftime-trace-granularity=N” барои тавлиди гузориш дар бораи вақти иҷрои марҳилаҳои гуногуни фронтенд (таҳлил, оғозсозӣ) ва пушти сар (марҳилаҳои оптимизатсия). Ҳисобот дар формати json захира шудааст, ки бо chrome://tracing ва speedscope.app мувофиқ аст;
  • Коркарди иловагии мушаххаскунандаи "__declspec(allocator)" ва тавлиди маълумоти ҳамроҳи ислоҳи ислоҳ, ки ба шумо имкон медиҳад, ки истеъмоли хотираро дар муҳити Visual Studio назорат кунед;
  • Барои забони C, дастгирӣ барои макроси "__FILE_NAME__" илова шудааст, ки ба макроси "__FILE__" шабоҳат дорад, аммо танҳо номи файлро бидуни роҳи пурра дар бар мегирад;
  • C++ дастгирии атрибутҳои фазои суроғаро барои пӯшонидани хусусиятҳои гуногуни C++ васеъ кардааст, аз ҷумла намунаҳои параметрҳо ва аргументҳо, намудҳои истинод, хулосаи навъи бозгашт, объектҳо, функсияҳои худкор тавлидшуда, операторҳои дарунсохт ва ғайра.
  • Имкониятҳое, ки бо дастгирии OpenCL, OpenMP ва CUDA алоқаманданд, васеъ карда шуданд. Ин дастгирии ибтидоиро барои дохилкунии ғайримустақими функсияҳои дарунсохташудаи OpenCL дар бар мегирад (парчами “-fdeclare-opencl-builtins” илова карда шудааст), васеъшавии cl_arm_integer_dot_product амалӣ карда шуд ва абзорҳои ташхис васеъ карда шуданд;
  • Кори анализатори статикӣ такмил дода шуда, ҳуҷҷатҳо оид ба гузаронидани таҳлили статикӣ илова карда шуданд. Барои намоиш додани модулҳои санҷиши дастрас ва имконоти дастгиришаванда парчамҳо илова карда шуданд (“-analyzer-checker[-option]-help”, “-analyzer-checker[-option]-help-alpha” ва “-analyzer-checker[-option]-help ” -таҳиягар”). Парчами "-analyzer-werror" илова карда шуд, то огоҳиҳоро ҳамчун хато ҳисоб кунад.
    Усулҳои нави тасдиқкунӣ илова карда шуданд:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling барои муайян кардани таҷрибаҳои хатарнок барои кор бо буферҳо;
    • osx.MIGChecker барои ҷустуҷӯи вайронкунии қоидаҳои занги MIG (Mach Interface Generator);
    • optin.osx.OSObjectCStyleCast барои дарёфти табдили объекти XNU libkern нодуруст;
    • apiModeling.llvm бо маҷмӯи функсияҳои санҷиши моделсозӣ барои ошкор кардани хатогиҳо дар пойгоҳи коди LLVM;
    • Рамзи устуворшуда барои тафтиши объектҳои оғознашудаи C++ (UninitializedObject дар бастаи optin.cplusplus);
  • Утилитаи clang-format дастгирии форматкунии кодро бо забони C# илова кардааст ва услуби форматкунии кодро, ки Microsoft истифода мебарад, дастгирӣ мекунад;
  • clang-cl, интерфейси алтернативии сатри фармон, ки мутобиқати сатҳи опсияро бо компилятори cl.exe, ки ба Visual Studio дохил карда шудааст, таъмин мекунад, эвристикаро барои баррасии файлҳои мавҷуда ҳамчун имконоти сатри фармон ва намоиш додани огоҳии мувофиқ илова кардааст (масалан, ҳангоми иҷро кардани "clang-cl /diagnostic :caret /c test.cc");
  • Қисми зиёди чекҳои нав ба linter clang-tidy илова карда шуданд, аз ҷумла чекҳои иловагии махсус ба OpenMP API;
  • Васеъ карда шудааст имкониятҳои сервер чанг (Clang Server), ки дар он режими сохтани индекси замина ба таври нобаёнӣ фаъол аст, дастгирии амалҳои контекстӣ бо код илова карда шудааст (ҷустуҷӯи тағирёбанда, тавсеаи таърифҳои худкор ва макрос, табдили сатрҳои фироршуда ба сатрҳои беруншуда), қобилияти намоиш додани огоҳиҳо аз Clang-tidy, тавсеаи ташхиси хатогиҳо дар файлҳои сарлавҳа ва имкони намоиш додани маълумот дар бораи иерархияи намуд;

асосӣ навовариҳо LLVM 9.0:

  • Ба пайвандгари LLD хусусияти тақсимоти таҷрибавӣ илова карда шудааст, ки ба шумо имкон медиҳад як барномаро ба чанд қисм тақсим кунед, ки ҳар яки онҳо дар файли алоҳидаи ELF ҷойгиранд. Ин хусусият ба шумо имкон медиҳад, ки қисми асосии барномаро оғоз кунед, ки дар вақти зарурӣ ҷузъҳои дигарро бор мекунад (масалан, шумо метавонед намоишгари дарунсохтаи PDF-ро ба файли алоҳида ҷудо кунед, ки он танҳо ҳангоми кушодани файли корбар бор карда мешавад. файл).

    Linker LLD ба миён гузоштанд ба ҳолати мувофиқ барои пайваст кардани ядрои Linux барои меъмории arm32_7, arm64, ppc64le ва x86_64.
    Вариантҳои нави "-" (баромад ба stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" ва "-z common-page-size". Барои меъмории AArch64, дастгирии дастурҳои BTI (Шоҳигарии мақсадноки филиал) ва PAC (Кодекси аутентификатсияи нишондиҳанда) илова карда шудааст. Дастгирии платформаҳои MIPS, RISC-V ва PowerPC ба таври назаррас беҳтар шудааст. Дастгирии ибтидоӣ барои пайвасти динамикӣ барои WebAssembly илова карда шуд;

  • Дар libc++ ба амал бароварда шуд функсияҳои ssize, std::is_constant_evaluated, std::midpoint ва std::lerp, усулҳои "front" ва "back" ба std::span илова карда шудаанд, атрибутҳои намудҳои std::is_unbounded_array ва std::is_bounded_array илова карда шудаанд. , стд имкониятхо васеъ карда шуданд: :атомй. Дастгирии GCC 4.9 қатъ карда шуд (метавонад бо GCC 5.1 ва версияҳои навтар истифода шавад). Дастгирии иловашуда ВАСИ (Интерфейси System WebAssembly, интерфейс барои истифодаи WebAssembly берун аз браузер);
  • Оптимизатсияҳои нав илова карда шуданд. Дар баъзе ҳолатҳо табдили зангҳои memcmp ба bcmp фаъол карда шудааст. Тафтиши диапазони гузариш барои ҷадвалҳои ҷаҳиш, ки дар онҳо блокҳои гузариши поёнӣ дастнорасанд ё вақте ки дастурҳо истифода намешаванд, масалан, ҳангоми даъват кардани функсияҳо бо навъи void;
  • Сарпӯши меъмории RISC-V мӯътадил карда шуд, ки он дигар ҳамчун таҷрибавӣ ҷойгир нест ва бо нобаёнӣ сохта шудааст. Дастгирии пурраи тавлиди кодро барои вариантҳои маҷмӯи дастурҳои RV32I ва RV64I бо васеъшавии MAFDC таъмин мекунад;
  • Барои меъмории X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ва PowerPC такмилдиҳии сершумор анҷом дода шуданд. Масалан, барои меъморй
    AArch64 барои дастурҳои SVE2 (Вектори васеъшавандаи миқёспазир 2) ва MTE (васеъкунии барчаспҳои хотира) дастгирии илова кард; дар пуштибонии ARM, дастгирии меъмории Armv8.1-M ва васеъшавии MVE (M-Profile Vector Extension) илова карда шуд. Дастгирии меъмории GFX10 (Navi) ба пуштибонии AMDGPU илова карда шудааст, имкониятҳои занги функсия ба таври нобаёнӣ фаъол карда шудаанд ва гузариш якҷоя фаъол карда шудааст. DPP (Примитивҳои маълумот-параллели).

  • Debugger LLDB ҳоло дорои равшании ранг барои қафо ва дастгирии изофа барои блокҳои debug_info DWARF4 debug_info ва DWARF5;
  • Дастгирии файлҳои объектӣ ва иҷрошаванда дар формати COFF ба утилитаҳои llvm-objcopy ва llvm-strip илова карда шудааст.

Манбаъ: opennet.ru

Илова Эзоҳ