Pagpagawas sa LLVM 16.0 compiler set

Human sa unom ka bulan nga pag-uswag, ang pagpagawas sa proyekto sa LLVM 16.0 gipresentar - usa ka GCC-compatible toolkit (compilers, optimizers ug code generators) nga nag-compile sa mga programa ngadto sa intermediate bitcode sa RISC-like virtual instructions (usa ka low-level virtual machine nga adunay multi-level nga sistema sa pag-optimize). Ang namugna nga pseudocode mahimong mabag-o gamit ang JIT compiler ngadto sa mga instruksiyon sa makina direkta sa panahon sa pagpatuman sa programa.

Daghang mga pag-uswag sa Clang 16.0:

  • Ang default nga C++/ObjC++ nga sumbanan mao ang gnu++17 (kaniadto gnu++14), nga nagpasabot nga ang C++17 nga mga feature nga adunay mga extension sa GNU gisuportahan sa default. Aron ibalik ang naunang kinaiya, mahimo nimong gamiton ang opsyon nga "-std=gnu++14".
  • Gipatuman ang mga advanced nga bahin nga may kalabotan sa C++20 nga sumbanan:
    • Ang kondisyon nga walay hinungdan nga espesyal nga mga gimbuhaton sa miyembro,
    • pagkuha sa structured bindings sa lambda functions,
    • Equality operator sulod sa mga ekspresyon,
    • Opsyon sa pagtangtang sa typename keyword sa pipila ka konteksto,
    • Balido nga aggregate initialization sa parentheses (β€œAggr(val1, val2)”).
  • Ang mga bahin nga gihubit sa umaabot nga sumbanan sa C++ 2b gipatuman:
    • Gitugotan nga magbutang og mga label sa katapusan sa compound nga mga ekspresyon,
    • static operator(),
    • static operator [],
    • Ang pagkaangay sa tipo sa char8_t gisiguro,
    • Ang han-ay sa mga karakter nga gitugotan nga gamiton sa "\N{...}" gipalapdan
    • Gidugang ang abilidad sa paggamit sa mga variable nga gideklarar nga "static constexpr" sa mga function nga gideklarar nga constexpr.
  • Ang mga bahin nga gihubit sa umaabot nga C-standard nga C2x gipatuman:
    • Aron ma-disable ang "-Wunused-label" nga pasidaan, ang "[[maybe_unused]]" attribute gitugotan nga magamit sa mga label
    • Gitugotan ang pagbutang og mga label bisan asa sulod sa compound nga mga ekspresyon,
    • Gidugang typeof ug typeof_unqual operators,
    • Usa ka bag-ong tipo nga nullptr_t ug usa ka nullptr nga makanunayon aron sa paghubit sa mga null pointer nga mahimong makombertir sa bisan unsang klase sa pointer ug magrepresentar sa usa ka variant sa NULL nga dili gigapos sa integer ug void* nga mga tipo.
    • Sa C2x mode, ang pagtawag sa va_start macro nga adunay variable nga gidaghanon sa mga argumento (variadic) gitugotan.
  • Sa mga mode sa pagsunod sa C99, C11, ug C17, ang default nga mga kapilian nga "-Wimplicit-function-declaration" ug "-Wimplicit-int" karon nagpatunghag sayup imbes nga usa ka pasidaan.
  • Ang dili direkta nga paggamit sa "void *" (e.g. "void func(void *p) { *p; }") sa C++ mode karon nagpatunghag sayop, susama sa ISO C++, GCC, ICC ug MSVC.
  • Ang pagpiho sa mga bitfield isip mga operand sa instruksiyon (e.g. "__asm ​​​​{mov eax, s.bf }") sa Microsoft-style inline nga mga bloke sa asembliya karon nagpatunghag sayop.
  • Gidugang nga mga diagnostic alang sa presensya sa lainlaing mga istruktura ug mga unyon nga adunay parehas nga mga ngalan sa lainlaing mga module.
  • Ang mga kapabilidad nga nalangkit sa suporta sa OpenCL ug OpenMP gipalapdan. Gipauswag nga mga diagnostic alang sa mga template sa C++ nga gigamit sa mga argumento sa OpenCL kernel. Gipauswag nga suporta sa block sa pila para sa AMDGPU. Ang hiyas sa nounwind gidugang sa tanan sa tanan nga mga gimbuhaton. Gipauswag nga suporta alang sa mga built-in nga function.
  • Gidugang ang abilidad sa paggamit sa CLANG_CRASH_DIAGNOSTICS_DIR nga variable sa palibot aron mahibal-an ang direktoryo diin gitipigan ang datos sa diagnostic sa pag-crash.
  • Ang suporta sa Unicode gi-update sa Unicode 15.0 nga detalye. Ang ubang mga simbolo sa matematika gitugotan sa mga identifier, sama sa "β‚Š" (eg "double xβ‚–β‚Šβ‚").
  • Gidugang nga suporta alang sa pagkarga sa daghang mga file sa pag-configure (ang mga default nga mga file sa pag-configure una nga gikarga, ug dayon ang mga gitakda pinaagi sa bandila nga "--config=", nga mahimo nang ipiho sa daghang mga higayon). Gibag-o ang default nga han-ay sa pagkarga sa mga file sa pag-configure: ang clang mosulay sa pag-load una sa file - .cfg, ug kung dili makit-an kini mosulay sa pagkarga sa duha ka mga file .cfg ug .cfg. Aron ma-disable ang pagkarga sa mga file sa pag-configure pinaagi sa default, ang bandila nga "--no-default-config" gidugang.
  • Aron maseguro nga mabalikbalik ang pagtukod, posible nga ilisan ang kasamtangang petsa ug oras nga mga bili sa __DATE__, __TIME__ ug __TIMESTAMP__ nga mga macro nga adunay oras nga gitakda sa SOURCE_DATE_EPOCH nga variable sa palibot.
  • Aron masusi ang presensya sa mga built-in nga function (builtin) nga magamit sa konteksto sa mga constants, ang macro "__has_constexpr_builtin" gidugang.
  • Gidugang ang bag-ong bandila sa kompilasyon nga "-fcoro-aligned-allocation" para sa aligned coroutine frame allocation.
  • Ang bandila nga "-fstrict-flex-arrays =" nagpatuman sa suporta alang sa ikatulo nga lebel sa pagsusi sa mga flexible array nga elemento sa mga istruktura (Flexible Array Members, usa ka han-ay sa dili tino nga gidak-on sa katapusan sa istruktura). Sa ikatulo nga lebel, ang gidak-on lang nga "[]" (pananglitan, "int b[]") ang gitratar isip usa ka flexible array, apan ang gidak-on "[0]" (pananglitan, "int b[0]") dili.
  • Gidugang ang bandila nga "-fmodule-output" aron mahimo ang usa ka hugna sa pag-compile nga modelo alang sa standard nga C++ modules.
  • Gidugang ang mode nga "-Rpass-analysis=stack-frame-layout" aron matabangan ang pagdayagnos sa mga problema sa layout sa stack frame.
  • Nagdugang ug bag-ong attribute __attribute__((target_version("cpu_features"))) ug gipalapdan ang functionality sa attribute __attribute__((target_clones("cpu_features1", "cpu_features2",...))) para makapili ug espesipikong mga bersyon sa feature nga gihatag sa AArch64 Mga CPU.
  • Ang mga himan sa diagnostic gipalapdan:
    • Gidugang nga pahimangno nga "-Wsingle-bit-bitfield-constant-conversion" aron mahibal-an ang implicit truncation kung mag-assign sa usa sa usa ka bit nga gipirmahan nga bitfield.
    • Gipalapdan ang mga diagnostic sa wala pa nasugdan nga constexpr variables.
    • Gidugang ang "-Wcast-function-type-strict" ug "-Wincompatible-function-pointer-types-strict" nga mga pasidaan aron mahibal-an ang posibleng mga problema sa function type casting.
    • Gidugang nga mga diagnostic alang sa paggamit sa dili husto o gireserba nga mga ngalan sa module sa mga bloke sa pag-eksport.
    • Gipauswag nga pag-ila sa nawala nga "awto" nga mga keyword sa mga kahulugan.
    • Ang pagpatuman sa "-Winteger-overflow" nga pasidaan nagdugang og mga pagsusi alang sa dugang nga mga sitwasyon nga mosangpot sa pag-awas.
  • Suporta alang sa LoongArch instruction set architecture (-march=loongarch64 or -march=la464), nga gigamit sa Loongson 3 5000 processors ug pagpatuman sa bag-ong RISC ISA, susama sa MIPS ug RISC-V, gipatuman.

Pangunang mga inobasyon sa LLVM 16.0:

  • Ang LLVM code gitugotan sa paggamit sa mga elemento nga gihubit sa C++17 nga sumbanan.
  • Ang mga kinahanglanon sa palibot alang sa pagtukod sa LLVM nadugangan. Ang mga himan sa pagtukod kinahanglan karon nga mosuporta sa C ++ 17 nga sumbanan, i.e. Sa pagtukod, kinahanglan nimo ang labing menos GCC 7.1, Clang 5.0, Apple Clang 10.0 o Visual Studio 2019 16.7.
  • Ang backend alang sa AArch64 nga arkitektura nagdugang suporta alang sa Cortex-A715, Cortex-X3 ug Neoverse V2 nga mga CPU, assembler para sa RME MEC (Memory Encryption Contexts), Armv8.3 extensions (Complex Number) ug Function Multi Versioning.
  • Sa backend alang sa arkitektura sa ARM, ang suporta alang sa Armv2, Armv2A, Armv3 ug Armv3M nga target nga mga platform gihunong, diin ang henerasyon sa husto nga code dili garantiya. Gidugang ang abilidad sa paghimo og code alang sa mga panudlo alang sa pagtrabaho sa mga komplikado nga numero.
  • Ang backend alang sa X86 nga arkitektura adunay dugang nga suporta alang sa instruksiyon nga mga arkitektura (ISAs) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Gidugang nga suporta alang sa RDMSRLIST, RMSRLIST ug WRMSRNS nga mga panudlo. Gipatuman nga mga opsyon "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" ug "-mcpu=grandridge".
  • Gidugang ang opisyal nga suporta alang sa platform sa LoongArch.
  • Gipaayo nga mga backend alang sa MIPS, PowerPC ug RISC-V nga mga arkitektura
  • Gidugang nga suporta alang sa pag-debug sa 64-bit nga mga executable alang sa arkitektura sa LoongArch sa LLDB debugger. Gipauswag nga pagdumala sa mga simbolo sa pag-debug sa COFF. Gihatag ang pagsala sa mga duplicate nga DLL sa lista sa gikarga nga mga module sa Windows.
  • Sa Libc++ library, ang nag-unang trabaho naka-focus sa pagpatuman sa suporta para sa mga bag-ong feature sa C++20 ug C++23 standards.
  • Ang LDD linker makahuluganon nga nagpamenos sa oras sa pag-link pinaagi sa pagparis sa address relocation scanning ug mga operasyon sa pagsugod sa seksyon. Gidugang nga suporta alang sa pag-compress sa seksyon gamit ang ZSTD algorithm.

Source: opennet.ru

Idugang sa usa ka comment