Hoʻokuʻu ʻia o ka LLVM 16.0 compiler suite

Ma hope o ʻeono mahina o ka hoʻomohala ʻana, ua hōʻike ʻia ka hoʻokuʻu ʻana o ka papahana LLVM 16.0 - kahi hāmeʻa GCC-compatible (compilers, optimizers and code generators) e hōʻuluʻulu i nā papahana i loko o ka bitcode intermediate o nā ʻōlelo kuhikuhi virtual e like me RISC (he mīkini virtual haʻahaʻa haʻahaʻa me kahi. multi-level optimization system). Hiki ke hoʻololi ʻia ka pseudocode i hana ʻia me ka hoʻohana ʻana i kahi compiler JIT i nā kuhikuhi mīkini pololei i ka manawa o ka hoʻokō ʻana o ka papahana.

Nā hoʻomaikaʻi nui ma Clang 16.0:

  • ʻO ka maʻamau C++/ObjC++ ka gnu++17 (gnu++14 ma mua), ʻo ia hoʻi, kākoʻo ʻia nā hiʻohiʻona C++17 me nā hoʻonui GNU e ka paʻamau. No ka hoʻihoʻi i ka hana mua, hiki iā ʻoe ke hoʻohana i ke koho "-std=gnu++14".
  • Hoʻokō ʻia nā hiʻohiʻona holomua e pili ana i ka maʻamau C++20:
    • Nā hana lālā kūikawā koʻikoʻi,
    • ka hopu ʻana i nā paʻa i kūkulu ʻia i nā hana lambda,
    • ʻO ka mea hana kaulike i loko o nā ʻōlelo,
    • Ke koho e haʻalele i ka huaʻōlelo typename i kekahi mau pōʻaiapili,
    • ʻO ka hoʻomaka ʻana o ka hōʻuluʻulu kūpono i loko o nā pale ("Aggr(val1, val2)").
  • Ua hoʻokō ʻia nā hiʻohiʻona i wehewehe ʻia i ka maʻamau C++2b e hiki mai ana:
    • ʻAe ʻia e kau i nā lepili ma ka hope o nā ʻōlelo hoʻohuihui,
    • mea hoʻohana static(),
    • mea hoʻohana paʻa [],
    • Hoʻopili ʻia me ke ʻano char8_t,
    • Ua hoʻonui ʻia ka laulā o nā huapalapala i ʻae ʻia no ka hoʻohana ʻana ma "\N{...}".
    • Hoʻohui ʻia ka hiki ke hoʻohana i nā mea hoʻololi i haʻi ʻia he "static constexpr" i nā hana i haʻi ʻia he constexpr.
  • Ua hoʻokō ʻia nā hiʻohiʻona i wehewehe ʻia i ka C-standard C2x e hiki mai ana:
    • No ka hoʻopau ʻana i ka ʻōlelo aʻo "-Wunused-label", ua ʻae ʻia ke ʻano "[[paha_unused]]" e hoʻopili ʻia i nā lepili.
    • ʻAe ʻia ke kau ʻana i nā lepili ma nā wahi a pau i loko o nā ʻōlelo hoʻohuihui,
    • Hoʻohui ʻia ke ʻano a me ka typeof_unqual operators,
    • ʻO kahi ʻano hou nullptr_t a me kahi nullptr mau e wehewehe i nā kikoʻī null hiki ke hoʻololi i kēlā me kēia ʻano kuhikuhi a hōʻike i kahi ʻano like ʻole o NULL ʻaʻole i hoʻopaʻa ʻia i nā ʻano integer a void*.
    • Ma ke ʻano C2x, ʻae ʻia ke kāhea ʻana i ka va_start macro me kahi helu hoʻopaʻapaʻa (variadic).
  • Ma nā ʻano hoʻokō C99, C11, a me C17, ʻo nā koho paʻamau "-Wimplicit-function-declaration" a me "-Wimplicit-int" i kēia manawa ke hoʻopuka nei i kahi hewa ma mua o ka ʻōlelo aʻo.
  • ʻO ka hoʻohana ʻole ʻana o "void *" (e laʻa.
  • ʻO ka wehewehe ʻana i nā bitfield ma ke ʻano he ʻōlelo aʻo (e laʻa.
  • Hoʻohui ʻia nā diagnostics no ka loaʻa ʻana o nā hale like ʻole a me nā uniona me nā inoa like i nā modula like ʻole.
  • Ua hoʻonui ʻia nā mana e pili ana me OpenCL a me OpenMP kākoʻo. Hoʻomaikaʻi ʻia nā diagnostics no nā template C++ i hoʻohana ʻia i nā manaʻo kumu OpenCL kernel. Hoʻomaikaʻi ʻia ke kākoʻo poloka pila no AMDGPU. Hoʻohui ʻia ka ʻano nounwind i nā hana āpau. Hoʻonui i ke kākoʻo no nā hana i kūkulu ʻia.
  • Hoʻohui i ka hiki ke hoʻohana i ka ʻano hoʻololi kaiapuni CLANG_CRASH_DIAGNOSTICS_DIR e wehewehe i ka papa kuhikuhi i mālama ʻia ai ka ʻikepili diagnostic crash.
  • Ua hōʻano hou ʻia ke kākoʻo Unicode i ka kikoʻī Unicode 15.0. ʻAe ʻia kekahi mau hōʻailona makemakika i nā mea hōʻike, e like me "₊" (e laʻa. "double xₖ₊₁").
  • Kākoʻo hoʻohui ʻia no ka hoʻouka ʻana i nā faila hoʻonohonoho he nui (e hoʻouka mua ʻia nā faila hoʻonohonoho paʻamau, a laila nā mea i kuhikuhi ʻia ma o ka hae "--config=", hiki ke kuhikuhi ʻia i kēia manawa i nā manawa he nui). Ua hoʻololi i ke kauoha hoʻouka paʻamau o nā faila hoʻonohonoho: hoʻāʻo ʻo clang e hoʻouka mua i ka faila - .cfg, a inā ʻaʻole ʻike ʻia, hoʻāʻo ʻo ia e hoʻouka i ʻelua faila .cfg a .cfg. No ka hoʻopau ʻana i ka hoʻouka ʻana i nā faila hoʻonohonoho ma ke ʻano maʻamau, ua hoʻohui ʻia ka hae "--no-default-config".
  • No ka hōʻoia ʻana i ke kūkulu hou ʻana, hiki ke hoʻololi i nā koina o ka lā a me ka manawa i ka __DATE__, __TIME__ a me __TIMESTAMP__ macros me ka manawa i kuhikuhi ʻia ma ka SOURCE_DATE_EPOCH variable environment.
  • No ka nānā ʻana i ke ʻano o nā hana i kūkulu ʻia (builtin) hiki ke hoʻohana ʻia i ka pōʻaiapili o nā mea mau, ua hoʻohui ʻia ka macro "__has_constexpr_builtin".
  • Hoʻohui ʻia ka hae hōʻuluʻulu hou "-fcoro-aligned-allocation" no ka hoʻokaʻawale ʻana i nā kiʻi coroutine.
  • Hoʻokomo ka hae "-fstrict-flex-arrays=" i ke kākoʻo no ke kolu o ka pae o ka nānā ʻana i nā mea hoʻonohonoho maʻalahi i loko o nā hale (Flexible Array Members, kahi ʻano nui ʻole ma ka hopena o ka hale). Ma ka pae ʻekolu, ʻo ka nui "[]" wale nō (no ka laʻana, "int b[]") e mālama ʻia ma ke ʻano he ʻano maʻalahi, akā ʻo ka nui "[0]" (no ka laʻana, "int b[0]") ʻaʻole.
  • Hoʻohui ʻia ka hae "-fmodule-output" e hiki ai ke hoʻohālike i ka hoʻohālike hoʻohui hoʻokahi-phase no nā modula C++ maʻamau.
  • Hoʻohui ʻia ke ʻano "-Rpass-analysis=stack-frame-layout" e kōkua i ka ʻike ʻana i nā pilikia me ka hoʻonohonoho hoʻonohonoho hoʻonohonoho.
  • Hoʻohui i kahi ʻano hou __attribute__((target_version("cpu_features"))) a hoʻonui i ka hana o ka attribute __attribute__((target_clones("cpu_features1", "cpu_features2",...))) e koho i nā mana kiko'ī o nā hiʻohiʻona i hāʻawi ʻia e AArch64 PPU.
  • Hoʻonui ʻia nā mea hana diagnostic:
    • Hoʻohui ʻia ka ʻōlelo aʻo "-Wsingle-bit-bitfield-constant-conversion" e ʻike i ka ʻoki ʻana i ka wā e hāʻawi ai i kekahi i kahi bitfield i kau inoa ʻia.
    • Ua hoʻonui ʻia nā diagnostics o uninitialized constexpr variables.
    • Hoʻohui ʻia nā ʻōlelo luhi "-Wcast-function-type-strict" a me "-Wincompatible-function-pointer-types-strict" e ʻike i nā pilikia e pili ana i ka hoʻolei ʻana i ke ʻano hana.
    • Hoʻohui ʻia nā diagnostics no ka hoʻohana ʻana i nā inoa module hewa ʻole a i mālama ʻia i nā poloka hoʻoili.
    • Ua hoʻomaikaʻi ʻia ka ʻike ʻana i nā huaʻōlelo "auto" nalo i nā wehewehe.
    • ʻO ka hoʻokō ʻana i ka ʻōlelo aʻoaʻo "-Winteger-overflow" ua hoʻohui i nā loiloi no nā kūlana ʻē aʻe e alakaʻi i nā kahe.
  • Hoʻokomo i ke kākoʻo no ka LoongArch instruction set architecture (-march=loongarch64 or -march=la464), hoʻohana ʻia ma Loongson 3 5000 processors a hoʻokō i ka RISC ISA hou, e like me MIPS a me RISC-V.

Nā hana hou nui ma LLVM 16.0:

  • ʻAe ʻia ka code LLVM e hoʻohana i nā mea i wehewehe ʻia ma ka maʻamau C++17.
  • Ua hoʻonui ʻia nā koi kaiapuni no ke kūkulu ʻana i ka LLVM. Pono nā mea hana kūkulu i kēia manawa e kākoʻo i ka maʻamau C++17, ʻo ia hoʻi. No ke kūkulu ʻana, pono ʻoe iā GCC 7.1, Clang 5.0, Apple Clang 10.0 a i ʻole Visual Studio 2019 16.7.
  • Hoʻohui ka hope no ka hoʻolālā AArch64 i ke kākoʻo no Cortex-A715, Cortex-X3 a me Neoverse V2 CPUs, hui pū no RME MEC (Memory Encryption Contexts), Armv8.3 extensions (Complex Number) a me Function Multi Versioning.
  • Ma ke kua hope no ka hoʻolālā ARM, ua hoʻopau ʻia ke kākoʻo no ka Armv2, Armv2A, Armv3 a me Armv3M, no laila ʻaʻole i hōʻoiaʻiʻo ʻia ka hanauna o ke code pololei. Hoʻohui i ka hiki ke hana i nā code no nā kuhikuhi no ka hana ʻana me nā helu paʻakikī.
  • ʻO ka hope no ka hale hoʻolālā X86 ua hoʻohui i ke kākoʻo no nā hoʻonohonoho hoʻonohonoho hoʻonohonoho (ISA) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Hoʻohui ʻia ke kākoʻo no RDMSRLIST, RMSRLIST a me WRMSRNS kuhikuhi. Hoʻokō ʻia nā koho "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" a me "-mcpu=grandridge".
  • Hoʻohui i ke kākoʻo kūhelu no ka platform LoongArch.
  • Hoʻomaikaʻi ʻia nā ʻaoʻao hope no MIPS, PowerPC a me RISC-V hoʻolālā
  • Hoʻohui i ke kākoʻo no ka debugging 64-bit executables no ka hoʻolālā LoongArch i ka LLDB debugger. Hoʻomaikaʻi i ka lawelawe ʻana i nā hōʻailona debug COFF. Hāʻawi ʻia ke kānana ʻana i nā DLL pālua i ka papa inoa o nā modules Windows i hoʻouka ʻia.
  • I loko o ka waihona Libc++, ua kālele ka hana nui i ka hoʻokō ʻana i ke kākoʻo no nā hiʻohiʻona hou o nā kūlana C++20 a me C++23.
  • Hoʻemi nui ka LDD linker i ka manawa hoʻopaʻa ʻana ma o ka hoʻohālikelike ʻana i ka hoʻoneʻe ʻana o ka helu wahi a me nā hana hoʻomaka ʻana o ka ʻāpana. Hoʻohui i ke kākoʻo no ka hoʻopili ʻana i ka ʻāpana me ka hoʻohana ʻana i ka algorithm ZSTD.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka